/*++\r
\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
Module Name:\r
\r
Ehci.h\r
- \r
-Abstract: \r
- \r
+\r
+Abstract:\r
+\r
\r
Revision History\r
--*/\r
#define STALL_1_MILLI_SECOND 1000 * STALL_1_MACRO_SECOND\r
#define STALL_1_SECOND 1000 * STALL_1_MILLI_SECOND\r
\r
+#define MEM_UNIT_SIZE 128\r
+\r
+\r
#define SETUP_PACKET_PID_CODE 0x02\r
#define INPUT_PACKET_PID_CODE 0x01\r
#define OUTPUT_PACKET_PID_CODE 0x0\r
\r
#define USB_BAR_INDEX 0 /* how many bytes away from USB_BASE to 0x10 */\r
\r
-#define NORMAL_MEMORY_BLOCK_UNIT_IN_PAGES 1\r
+#define NORMAL_MEMORY_BLOCK_UNIT_IN_PAGES 16\r
\r
#define EHCI_MIN_PACKET_SIZE 8\r
#define EHCI_MAX_PACKET_SIZE 1024\r
#define EHCI_MAX_QTD_CAPACITY (EFI_PAGE_SIZE * 5)\r
\r
#define NAK_COUNT_RELOAD 3\r
-#define QTD_ERROR_COUNTER 1\r
+#define QTD_ERROR_COUNTER 3\r
#define HIGH_BANDWIDTH_PIPE_MULTIPLIER 1\r
\r
#define QTD_STATUS_ACTIVE 0x80\r
UINT8 BaseCode;\r
} USB_CLASSC;\r
\r
+//\r
+//32 Bytes Aligned\r
+//\r
typedef struct {\r
UINT32 NextQtdTerminate : 1;\r
UINT32 Rsvd1 : 4;\r
UINT32 Rsvd6 : 12;\r
UINT32 BufferPointer4 : 20;\r
\r
- UINT32 ExtBufferPointer0;\r
- UINT32 ExtBufferPointer1;\r
- UINT32 ExtBufferPointer2;\r
- UINT32 ExtBufferPointer3;\r
- UINT32 ExtBufferPointer4;\r
+ UINT32 PAD[5];\r
} EHCI_QTD_HW;\r
\r
+//\r
+//32 Bytes Aligned\r
+//\r
typedef struct {\r
UINT32 QhTerminate : 1;\r
UINT32 SelectType : 2;\r
UINT32 Rsvd6 : 12;\r
UINT32 BufferPointer4 : 20;\r
\r
- UINT32 ExtBufferPointer0;\r
- UINT32 ExtBufferPointer1;\r
- UINT32 ExtBufferPointer2;\r
- UINT32 ExtBufferPointer3;\r
- UINT32 ExtBufferPointer4;\r
+ UINT32 Pad[5];\r
} EHCI_QH_HW;\r
\r
typedef struct {\r
typedef struct _EHCI_QTD_ENTITY EHCI_QTD_ENTITY;\r
typedef struct _EHCI_QH_ENTITY EHCI_QH_ENTITY;\r
typedef struct _EHCI_ASYNC_REQUEST EHCI_ASYNC_REQUEST;\r
-\r
+//\r
+//Aligan On 32 Bytes\r
+//\r
struct _EHCI_QTD_ENTITY {\r
EHCI_QTD_HW Qtd;\r
UINT32 TotalBytes;\r
EHCI_QTD_ENTITY *AltNext;\r
EHCI_QH_ENTITY *SelfQh;\r
};\r
-\r
+//\r
+//Aligan On 32 Bytes\r
+//\r
struct _EHCI_QH_ENTITY {\r
EHCI_QH_HW Qh;\r
EHCI_QH_ENTITY *Next;\r
EFI_EVENT AsyncRequestEvent;\r
EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
MEMORY_MANAGE_HEADER *MemoryHeader;\r
- UINT8 Is64BitCapable;\r
+ UINT8 Is64BitCapable;\r
UINT32 High32BitAddr;\r
+ EHCI_QH_ENTITY *NULLQH;\r
UINT32 UsbCapabilityLen;\r
UINT16 DeviceSpeed[16];\r
} USB2_HC_DEV;\r
HcDev - USB2_HC_DEV\r
MemoryHeader - MEMORY_MANAGE_HEADER to output\r
MemoryBlockSizeInPages - MemoryBlockSizeInPages\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_OUT_OF_RESOURCES Fail for no resources\r
EFI_UNSUPPORTED Unsupported currently\r
- \r
+\r
--*/\r
;\r
\r
Returns:\r
\r
EFI_SUCCESS Success\r
- EFI_NOT_FOUND Can't find the free memory \r
+ EFI_NOT_FOUND Can't find the free memory\r
\r
--*/\r
;\r
Returns:\r
\r
TRUE Empty\r
- FALSE Not Empty \r
+ FALSE Not Empty\r
\r
--*/\r
;\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Read Ehc Capabitlity register\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
CapabiltiyRegAddr - Ehc Capability register address\r
Data - A pointer to data read from register\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Read Ehc Operation register\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
OperationalRegAddr - Ehc Operation register address\r
Data - A pointer to data read from register\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Write Ehc Operation register\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
OperationalRegAddr - Ehc Operation register address\r
Data - 32bit write to register\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Set Ehc door bell bit\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Set the length of Frame List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Length - the required length of frame list\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_INVALID_PARAMETER Invalid parameter\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether frame list is programmable\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE Programmable\r
FALSE Unprogrammable\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether periodic schedule is enabled\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE Enabled\r
FALSE Disabled\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether asynchronous schedule is enabled\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE Enabled\r
FALSE Disabled\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether port is enabled\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE Enabled\r
FALSE Disabled\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Ehc is halted\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE Reseted\r
FALSE Unreseted\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Ehc is halted\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE Halted\r
FALSE Not halted\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Ehc is system error\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE System error\r
FALSE No system error\r
- \r
+\r
--*/\r
;\r
\r
BOOLEAN\r
IsHighSpeedDevice (\r
IN EFI_USB2_HC_PROTOCOL *This,\r
- IN UINT8 PortNum \r
+ IN UINT8 PortNum\r
)\r
/*++\r
\r
Routine Description:\r
\r
Whether high speed device attached\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
TRUE High speed\r
FALSE Full speed\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
wait for Ehc reset or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
wait for Ehc halt or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
wait for Ehc not halt or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Wait for Ehc asynchronous schedule enable or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Wait for Ehc asynchronous schedule disable or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Wait for Ehc periodic schedule enable or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Wait for periodic schedule disable or timeout\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Timeout - timeout threshold\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_TIMEOUT Timeout\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Get the length of capability register\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Set base address of frame list first entry\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
FrameBuffer - base address of first entry of frame list\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Set address of first Async schedule Qh\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to first Qh in the Async schedule\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Set address of first Async schedule Qh\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to first Qh in the Async schedule\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Set Ehc port routing bit\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Enable periodic schedule\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Disable periodic schedule\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Enable asynchrounous schedule\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Disable asynchrounous schedule\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Start Ehc schedule execution\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Reset Ehc\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Clear Ehc all status bits\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
HcDev - USB2_HC_DEV\r
Length - Frame List Length\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
\r
HcDev - USB2_HC_DEV\r
NotifyFunction - Timer Notify Function\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Arguments:\r
\r
HcDev - USB2_HC_DEV\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Arguments:\r
\r
HcDev - USB2_HC_DEV\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Arguments:\r
\r
HcDev - USB2_HC_DEV\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DeviceAddr - Address of Device\r
Endpoint - Endpoint Number\r
DeviceSpeed - Device Speed\r
MaxPacketLen - Max Length of one Packet\r
QhPtrPtr - A pointer of pointer to Qh for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DeviceAddr - Address of Device\r
DeviceSpeed - Device Speed\r
MaxPacketLen - Max Length of one Packet\r
Translator - Translator Transaction for SplitX\r
QhPtrPtr - A pointer of pointer to Qh for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DeviceAddr - Address of Device\r
EndPointAddr - Address of Endpoint\r
DeviceSpeed - Device Speed\r
MaxPacketLen - Max Length of one Packet\r
Translator - Translator Transaction for SplitX\r
QhPtrPtr - A pointer of pointer to Qh for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DeviceAddr - Address of Device\r
EndPointAddr - Address of Endpoint\r
DeviceSpeed - Device Speed\r
Interval - value of interval\r
Translator - Translator Transaction for SplitX\r
QhPtrPtr - A pointer of pointer to Qh for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Destory Qh Structure \r
- \r
+ Destory Qh Structure\r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to Qh\r
- \r
+\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DataPtr - A pointer to user data buffer to transfer\r
DataLen - Length of user data to transfer\r
PktId - Packet Identification of this Qtd\r
Toggle - Data Toggle of this Qtd\r
QtdStatus - Default value of status of this Qtd\r
QtdPtrPtr - A pointer of pointer to Qtd for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_OUT_OF_RESOURCES Cannot allocate resources\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Create Qtd Structure for Setup \r
+ Create Qtd Structure for Setup\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DevReqPtr - A pointer to Device Request Data\r
QtdPtrPtr - A pointer of pointer to Qtd for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_OUT_OF_RESOURCES Cannot allocate resources\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Create Qtd Structure for data \r
+ Create Qtd Structure for data\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DataPtr - A pointer to user data buffer to transfer\r
DataLen - Length of user data to transfer\r
PktId - Packet Identification of this Qtd\r
Toggle - Data Toggle of this Qtd\r
QtdPtrPtr - A pointer of pointer to Qtd for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_OUT_OF_RESOURCES Cannot allocate resources\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Create Qtd Structure for status \r
+ Create Qtd Structure for status\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
PktId - Packet Identification of this Qtd\r
QtdPtrPtr - A pointer of pointer to Qtd for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_OUT_OF_RESOURCES Cannot allocate resources\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Create Qtd Structure for Alternative \r
+ Create Qtd Structure for Alternative\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
PktId - Packet Identification of this Qtd\r
QtdPtrPtr - A pointer of pointer to Qtd for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_OUT_OF_RESOURCES Cannot allocate resources\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Create Qtds list for Control Transfer \r
+ Create Qtds list for Control Transfer\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DataPktId - Packet Identification of Data Qtds\r
RequestCursor - A pointer to request structure buffer to transfer\r
DataCursor - A pointer to user data buffer to transfer\r
DataLen - Length of user data to transfer\r
ControlQtdsHead - A pointer of pointer to first Qtd for control tranfer for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Routine Description:\r
\r
- Create Qtds list for Bulk or Interrupt Transfer \r
+ Create Qtds list for Bulk or Interrupt Transfer\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
PktId - Packet Identification of Qtds\r
DataCursor - A pointer to user data buffer to transfer\r
DataLen - Length of user data to transfer\r
DataToggle - Data Toggle to start\r
Translator - Translator Transaction for SplitX\r
QtdsHead - A pointer of pointer to first Qtd for control tranfer for return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- FirstQtdPtr - A pointer to first Qtd in the list \r
- \r
+ HcDev - USB2_HC_DEV\r
+ FirstQtdPtr - A pointer to first Qtd in the list\r
+\r
Returns:\r
\r
VOID\r
Routine Description:\r
\r
Link Qtds together\r
- \r
+\r
Arguments:\r
\r
PreQtdPtr - A pointer to pre Qtd\r
QtdPtr - A pointer to next Qtd\r
- \r
+\r
Returns:\r
\r
VOID\r
Routine Description:\r
\r
Link AlterQtds together\r
- \r
+\r
Arguments:\r
\r
FirstQtdPtr - A pointer to first Qtd in the list\r
AltQtdPtr - A pointer to alternative Qtd\r
- \r
+\r
Returns:\r
VOID\r
\r
Routine Description:\r
\r
Link Qtds list to Qh\r
- \r
+\r
Arguments:\r
\r
QhPtr - A pointer to Qh\r
QtdPtr - A pointer to first Qtd in the list\r
- \r
+\r
Returns:\r
\r
VOID\r
Routine Description:\r
\r
Link Qh to Async Schedule List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to Qh\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Unlink Qh from Async Schedule List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to Qh\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Link Qh to Periodic Schedule List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to Qh\r
- \r
+\r
Returns:\r
\r
VOID\r
Routine Description:\r
\r
Unlink Qh from Periodic Schedule List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
QhPtr - A pointer to Qh\r
Interval - Interval of this periodic transfer\r
- \r
+\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Llink AsyncRequest Entry to Async Request List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
AsyncRequestPtr - A pointer to Async Request Entry\r
- \r
+\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Unlink AsyncRequest Entry from Async Request List\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
AsyncRequestPtr - A pointer to Async Request Entry\r
- \r
+\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Number of Qtds in the list\r
- \r
+\r
Arguments:\r
\r
FirstQtdPtr - A pointer to first Qtd in the list\r
- \r
+\r
Returns:\r
\r
Number of Qtds in the list\r
--*/\r
;\r
\r
-UINTN\r
-GetNumberOfTransaction (\r
- IN UINTN SizeOfData,\r
- IN UINTN SizeOfTransaction\r
- )\r
-/*++\r
-\r
-Routine Description:\r
\r
- Number of Transactions in one Qtd\r
- \r
-Arguments:\r
-\r
- SizeOfData - Size of one Qtd\r
- SizeOfTransaction - Size of one Transaction\r
- \r
-Returns:\r
-\r
- Number of Transactions in this Qtd\r
-\r
---*/\r
-;\r
\r
UINTN\r
GetCapacityOfQtd (\r
Routine Description:\r
\r
Get Capacity of Qtd\r
- \r
+\r
Arguments:\r
\r
BufferCursor - BufferCursor of the Qtd\r
- \r
+\r
Returns:\r
\r
Capacity of Qtd\r
Routine Description:\r
\r
Get the approximate value in the 2 index sequence\r
- \r
+\r
Arguments:\r
\r
Interval - the value of interval\r
- \r
+\r
Returns:\r
\r
approximate value of interval in the 2 index sequence\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Get Qtd next pointer field\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r
\r
A pointer to next hardware Qtd structure\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Qtd status is active or not\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r
\r
TRUE Active\r
FALSE Inactive\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Qtd status is halted or not\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r\r
\r
TRUE Halted\r
FALSE Not halted\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Qtd status is buffer error or not\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r
\r
TRUE Buffer error\r
FALSE No buffer error\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Qtd status is babble error or not\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r
\r
TRUE Babble error\r
FALSE No babble error\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether Qtd status is transaction error or not\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r
\r
TRUE Transaction error\r
FALSE No transaction error\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Whether is a DataIn direction transfer\r
- \r
+\r
Arguments:\r
\r
- EndPointAddress - address of the endpoint \r
- \r
+ EndPointAddress - address of the endpoint\r
+\r
Returns:\r
\r
TRUE DataIn\r
FALSE DataOut\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Map address of user data buffer\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
TransferDirection - direction of transfer\r
- Data - A pointer to user data buffer \r
+ Data - A pointer to user data buffer\r
DataLength - length of user data\r
PktId - Packte Identificaion\r
DataCursor - mapped address to return\r
DataMap - identificaion of this mapping to return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Map address of request structure buffer\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
Request - A pointer to request structure\r
RequestCursor - Mapped address of request structure to return\r
RequestMap - Identificaion of this mapping to return\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
--*/\r
;\r
\r
\r
Arguments:\r
\r
- QtdHwPtr - A pointer to Qtd hardware structure \r
+ QtdHwPtr - A pointer to Qtd hardware structure\r
DataPtr - A pointer to user data buffer\r
DataLen - Length of the user data buffer\r
- \r
+\r
Returns:\r
\r
VOID\r
Routine Description:\r
\r
Get Qtd alternate next pointer field\r
- \r
+\r
Arguments:\r
\r
HwQtdPtr - A pointer to hardware Qtd structure\r
- \r
+\r
Returns:\r
\r
A pointer to hardware alternate Qtd\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Zero out the fields in Qh structure\r
- \r
+\r
Arguments:\r
\r
QhPtr - A pointer to Qh structure\r
- \r
+\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Update asynchronous request transfer\r
- \r
+\r
Arguments:\r
\r
- AsyncRequestPtr - A pointer to async request \r
- TransferResult - transfer result \r
+ AsyncRequestPtr - A pointer to async request\r
+ TransferResult - transfer result\r
ErrQtdPos - postion of error Qtd\r
- \r
+\r
Returns:\r
\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
Routine Description:\r
\r
Delete all asynchronous request transfer\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
+ HcDev - USB2_HC_DEV\r
DeviceAddress - address of usb device\r
EndPointAddress - address of endpoint\r
DataToggle - stored data toggle\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Success\r
Routine Description:\r
\r
Clean up all asynchronous request transfer\r
- \r
+\r
Arguments:\r
\r
- HcDev - USB2_HC_DEV \r
- \r
+ HcDev - USB2_HC_DEV\r
+\r
Returns:\r
VOID\r
- \r
+\r
--*/\r
;\r
\r
HcDev - USB2_HC_DEV\r
IsControl - Is control transfer or not\r
QhPtr - A pointer to Qh\r
- ActualLen - Actual transfered Len \r
+ ActualLen - Actual transfered Len\r
DataToggle - Data Toggle\r
TimeOut - TimeOut threshold\r
TransferResult - Transfer result\r
- \r
+\r
Returns:\r
\r
EFI_SUCCESS Sucess\r
EFI_DEVICE_ERROR Error\r
- \r
+\r
--*/\r
;\r
\r
\r
TRUE Qtds finished\r
FALSE Not finish\r
- \r
+\r
--*/\r
;\r
\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Interrupt transfer periodic check handler\r
- \r
+\r
Arguments:\r
\r
Event - Interrupt event\r
Context - Pointer to USB2_HC_DEV\r
- \r
+\r
Returns:\r
- \r
+\r
EFI_SUCCESS Success\r
EFI_DEVICE_ERROR Fail\r
- \r
+\r
+--*/\r
+;\r
+\r
+\r
+EFI_STATUS\r
+CreateNULLQH (\r
+ IN USB2_HC_DEV *HcDev\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ Create the NULL QH to make it as the Async QH header\r
+\r
+Arguments:\r
+\r
+ HcDev - USB2_HC_DEV\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS Success\r
--*/\r
;\r
\r
+VOID\r
+DestroyNULLQH (\r
+ IN USB2_HC_DEV *HcDev\r
+ );\r
+\r
VOID\r
ClearLegacySupport (\r
IN USB2_HC_DEV *HcDev\r
IN USB2_HC_DEV *HcDev\r
);\r
\r
-VOID \r
+\r
+VOID\r
DumpEHCIPortsStatus (\r
IN USB2_HC_DEV *HcDev\r
);\r
+\r
+\r
#endif\r