#ifndef _SYS_USB_EHCI_H
#define _SYS_USB_EHCI_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <sys/pci.h>
#include <sys/sunddi.h>
#include <sys/sunndi.h>
#include <sys/ndi_impldefs.h>
#include <sys/disp.h>
#include <sys/usb/usba.h>
#include <sys/usb/usba/hcdi.h>
#include <sys/usb/hubd/hub.h>
#include <sys/usb/usba/hubdi.h>
#include <sys/usb/hubd/hubdvar.h>
#include <sys/id32.h>
#define EHCI_MAX_RH_PORTS 31
#define EHCI_4K_ALIGN 0x1000
#if defined(__sparc)
#define EHCI_DMA_ATTR_MAX_XFER 0xffffffffull
#define EHCI_DMA_ATTR_COUNT_MAX 0xffffffffull
#define EHCI_DMA_ATTR_GRANULAR 512
#define EHCI_DMA_ATTR_ALIGNMENT EHCI_4K_ALIGN
#else
#define EHCI_DMA_ATTR_MAX_XFER 0x00ffffffull
#define EHCI_DMA_ATTR_COUNT_MAX 0x00ffffffull
#define EHCI_DMA_ATTR_GRANULAR 1
#define EHCI_DMA_ATTR_ALIGNMENT EHCI_4K_ALIGN
#endif
#define EHCI_DMA_ATTR_TD_QH_ALIGNMENT 0x0020
#define EHCI_DMA_ATTR_PFL_ALIGNMENT EHCI_4K_ALIGN
#define EHCI_DMA_ATTR_TW_SGLLEN 0x7fffffff
typedef volatile struct ehci_caps {
uint8_t ehci_caps_length;
uint8_t ehci_pad;
uint16_t ehci_version;
uint32_t ehci_hcs_params;
uint32_t ehci_hcc_params;
uint8_t ehci_port_route[8];
} ehci_caps_t;
#define EHCI_REVISION_0_95 0x95
#define EHCI_HCS_PORT_INDICATOR 0x00010000
#define EHCI_HCS_NUM_COMP_CTRLS 0x0000F000
#define EHCI_HCS_NUM_COMP_CTRL_SHIFT 12
#define EHCI_HCS_NUM_PORTS_CC 0x00000F00
#define EHCI_HCS_NUM_PORTS_CC_SHIFT 8
#define EHCI_HCS_PORT_ROUTING_RULES 0x00000080
#define EHCI_HCS_PORT_POWER_CONTROL 0x00000010
#define EHCI_HCS_NUM_PORTS 0x0000000F
#define EHCI_HCC_EECP 0x0000FF00
#define EHCI_HCC_EECP_SHIFT 8
#define EHCI_HCC_EECP_MIN_OFFSET 0x00000040
#define EHCI_HCC_ISOCH_SCHED_THRESHOLD 0x000000F0
#define EHCI_HCC_ASYNC_SCHED_PARK_CAP 0x00000004
#define EHCI_HCC_PROG_FRAME_LIST_FLAG 0x00000002
#define EHCI_HCC_64BIT_ADDR_CAP 0x00000001
#define EHCI_PORT_ROUTE_EVEN 0x0F
#define EHCI_PORT_ROUTE_ODD 0xF0
#define EHCI_PORT_ROUTE_ODD_SHIFT 4
typedef volatile struct ehci_regs {
uint32_t ehci_command;
uint32_t ehci_status;
uint32_t ehci_interrupt;
uint32_t ehci_frame_index;
uint32_t ehci_ctrl_segment;
uint32_t ehci_periodic_list_base;
uint32_t ehci_async_list_addr;
uint32_t ehci_pad[9];
uint32_t ehci_config_flag;
uint32_t ehci_rh_port_status[EHCI_MAX_RH_PORTS];
} ehci_regs_t;
#define EHCI_CMD_INTR_THRESHOLD 0x00FF0000
#define EHCI_CMD_INTR_SHIFT 16
#define EHCI_CMD_01_INTR 0x00010000
#define EHCI_CMD_02_INTR 0x00020000
#define EHCI_CMD_04_INTR 0x00040000
#define EHCI_CMD_08_INTR 0x00080000
#define EHCI_CMD_16_INTR 0x00100000
#define EHCI_CMD_32_INTR 0x00200000
#define EHCI_CMD_64_INTR 0x00400000
#define EHCI_CMD_ASYNC_PARK_ENABLE 0x00000800
#define EHCI_CMD_ASYNC_PARK_COUNT 0x00000300
#define EHCI_CMD_ASYNC_PARK_COUNT_1 0x00000100
#define EHCI_CMD_ASYNC_PARK_COUNT_2 0x00000200
#define EHCI_CMD_ASYNC_PARK_COUNT_3 0x00000300
#define EHCI_CMD_ASYNC_PARK_SHIFT 8
#define EHCI_CMD_LIGHT_HC_RESET 0x00000080
#define EHCI_CMD_INTR_ON_ASYNC_ADVANCE 0x00000040
#define EHCI_CMD_ASYNC_SCHED_ENABLE 0x00000020
#define EHCI_CMD_PERIODIC_SCHED_ENABLE 0x00000010
#define EHCI_CMD_FRAME_LIST_SIZE 0x0000000C
#define EHCI_CMD_FRAME_LIST_SIZE_SHIFT 2
#define EHCI_CMD_FRAME_1024_SIZE 0x00000000
#define EHCI_CMD_FRAME_512_SIZE 0x00000004
#define EHCI_CMD_FRAME_256_SIZE 0X00000008
#define EHCI_CMD_HOST_CTRL_RESET 0x00000002
#define EHCI_CMD_HOST_CTRL_RS 0x00000001
#define EHCI_CMD_HOST_CTRL_RUN 0x00000001
#define EHCI_CMD_HOST_CTRL_STOP 0x00000000
#define EHCI_STS_ASYNC_SCHED_STATUS 0x00008000
#define EHCI_STS_PERIODIC_SCHED_STATUS 0x00004000
#define EHCI_STS_EMPTY_ASYNC_SCHEDULE 0x00002000
#define EHCI_STS_HOST_CTRL_HALTED 0x00001000
#define EHCI_STS_ASYNC_ADVANCE_INTR 0x00000020
#define EHCI_STS_HOST_SYSTEM_ERROR_INTR 0x00000010
#define EHCI_STS_FRM_LIST_ROLLOVER_INTR 0x00000008
#define EHCI_STS_RH_PORT_CHANGE_INTR 0x00000004
#define EHCI_STS_USB_ERROR_INTR 0x00000002
#define EHCI_STS_USB_INTR 0x00000001
#define EHCI_INTR_ASYNC_ADVANCE 0x00000020
#define EHCI_INTR_HOST_SYSTEM_ERROR 0x00000010
#define EHCI_INTR_FRAME_LIST_ROLLOVER 0x00000008
#define EHCI_INTR_RH_PORT_CHANGE 0x00000004
#define EHCI_INTR_USB_ERROR 0x00000002
#define EHCI_INTR_USB 0x00000001
#define EHCI_FRAME_INDEX 0x00003FFF
#define EHCI_FRAME_1024 0x00003FFF
#define EHCI_FRAME_0512 0x00001FFF
#define EHCI_FRAME_0256 0x00000FFF
#define EHCI_CTRLD_SEGMENT 0xFFFFFFFF
#define EHCI_PERIODIC_LIST_BASE 0xFFFFF000
#define EHCI_PERIODIC_LIST_BASE_SHIFT 12
#define EHCI_ASYNC_LIST_ADDR 0xFFFFFFE0
#define EHCI_ASYNC_LIST_ADDR_SHIFT 5
#define EHCI_CONFIG_FLAG 0x00000001
#define EHCI_CONFIG_FLAG_CLASSIC 0x00000000
#define EHCI_CONFIG_FLAG_EHCI 0x00000001
#define EHCI_RH_PORT_OVER_CURENT_ENABLE 0x00400000
#define EHCI_RH_PORT_DISCONNECT_ENABLE 0x00200000
#define EHCI_RH_PORT_CONNECT_ENABLE 0x00100000
#define EHCI_RH_PORT_INDICATOR 0x0000C000
#define EHCI_RH_PORT_IND_SHIFT 14
#define EHCI_RH_PORT_IND_OFF 0x00000000
#define EHCI_RH_PORT_IND_AMBER 0x00004000
#define EHCI_RH_PORT_IND_GREEN 0x00008000
#define EHCI_RH_PORT_OWNER 0x00002000
#define EHCI_RH_PORT_OWNER_CLASSIC 0x00002000
#define EHCI_RH_PORT_OWNER_EHCI 0x00000000
#define EHCI_RH_PORT_POWER 0x00001000
#define EHCI_RH_PORT_LINE_STATUS 0x00000C00
#define EHCI_RH_PORT_LOW_SPEED 0x00000400
#define EHCI_RH_PORT_RESET 0x00000100
#define EHCI_RH_PORT_SUSPEND 0x00000080
#define EHCI_RH_PORT_RESUME 0x00000040
#define EHCI_RH_PORT_OVER_CURR_CHANGE 0x00000020
#define EHCI_RH_PORT_OVER_CURR_ACTIVE 0x00000010
#define EHCI_RH_PORT_ENABLE_CHANGE 0x00000008
#define EHCI_RH_PORT_ENABLE 0x00000004
#define EHCI_RH_PORT_CONNECT_STS_CHANGE 0x00000002
#define EHCI_RH_PORT_CONNECT_STATUS 0x00000001
#define EHCI_RH_PORT_CLEAR_MASK 0x0000002A
#define EHCI_EX_CAP_SPECIFICS 0xFFFF0000
#define EHCI_EX_CAP_SPECIFICS_SHIFT 16
#define EHCI_EX_CAP_NEXT_PTR 0x0000FF00
#define EHCI_EX_CAP_NEXT_PTR_SHIFT 8
#define EHCI_EX_CAP_ID 0x000000FF
#define EHCI_EX_CAP_ID_SHIFT 0
#define EHCI_EX_CAP_ID_RESERVED 0
#define EHCI_EX_CAP_ID_BIOS_HANDOFF 1
#define EHCI_LEGSUP_OS_OWNED_SEM 0x01000000
#define EHCI_LEGSUP_BIOS_OWNED_SEM 0x00010000
#define EHCI_NUM_INTR_QH_LISTS 32
#define EHCI_NUM_STATIC_NODES 63
#define EHCI_NUM_PERIODIC_FRAME_LISTS 1024
typedef volatile struct ehci_periodic_frame_list {
uint32_t ehci_periodic_frame_list_table[
EHCI_NUM_PERIODIC_FRAME_LISTS];
} ehci_periodic_frame_list_t;
typedef volatile struct ehci_qh {
uint32_t qh_link_ptr;
uint32_t qh_ctrl;
uint32_t qh_split_ctrl;
uint32_t qh_curr_qtd;
uint32_t qh_next_qtd;
uint32_t qh_alt_next_qtd;
uint32_t qh_status;
uint32_t qh_buf[5];
uint32_t qh_buf_high[5];
uint32_t qh_dummy_qtd;
uint32_t qh_prev;
uint32_t qh_state;
uint32_t qh_reclaim_next;
uint32_t qh_reclaim_frame;
uint8_t qh_pad[8];
} ehci_qh_t;
#define EHCI_QH_LINK_PTR 0xFFFFFFE0
#define EHCI_QH_LINK_REF 0x00000006
#define EHCI_QH_LINK_REF_ITD 0x00000000
#define EHCI_QH_LINK_REF_QH 0x00000002
#define EHCI_QH_LINK_REF_SITD 0x00000004
#define EHCI_QH_LINK_REF_FSTN 0x00000006
#define EHCI_QH_LINK_PTR_VALID 0x00000001
#define EHCI_QH_CTRL_NC_RL 0xF0000000
#define EHCI_QH_CTRL_NC_RL_SHIFT 28
#define EHCI_QH_CTRL_MAX_NC 0xF0000000
#define EHCI_QH_CTRL_CONTROL_ED_FLAG 0x08000000
#define EHCI_QH_CTRL_MAXPKTSZ 0x07FF0000
#define EHCI_QH_CTRL_MAXPKTSZ_SHIFT 16
#define EHCI_QH_CTRL_RECLAIM_HEAD 0x00008000
#define EHCI_QH_CTRL_DATA_TOGGLE 0x00004000
#define EHCI_QH_CTRL_ED_SPEED 0x00003000
#define EHCI_QH_CTRL_ED_FULL_SPEED 0x00000000
#define EHCI_QH_CTRL_ED_LOW_SPEED 0x00001000
#define EHCI_QH_CTRL_ED_HIGH_SPEED 0x00002000
#define EHCI_QH_CTRL_ED_SPEED_SHIFT 12
#define EHCI_QH_CTRL_ED_NUMBER 0x00000F00
#define EHCI_QH_CTRL_ED_NUMBER_SHIFT 8
#define EHCI_QH_CTRL_ED_INACTIVATE 0x00000080
#define EHCI_QH_CTRL_DEVICE_ADDRESS 0x0000007F
#define EHCI_QH_SPLIT_CTRL_MULT 0xC0000000
#define EHCI_QH_SPLIT_CTRL_MULT_SHIFT 30
#define EHCI_QH_SPLIT_CTRL_1_XACTS 0x40000000
#define EHCI_QH_SPLIT_CTRL_2_XACTS 0x80000000
#define EHCI_QH_SPLIT_CTRL_3_XACTS 0xC0000000
#define EHCI_QH_SPLIT_CTRL_HUB_PORT 0x3F800000
#define EHCI_QH_SPLIT_CTRL_HUB_PORT_SHIFT 23
#define EHCI_QH_SPLIT_CTRL_HUB_ADDR 0x007F0000
#define EHCI_QH_SPLIT_CTRL_HUB_ADDR_SHIFT 16
#define EHCI_QH_SPLIT_CTRL_COMP_MASK 0x0000FF00
#define EHCI_QH_SPLIT_CTRL_COMP_SHIFT 8
#define EHCI_QH_SPLIT_CTRL_INTR_MASK 0x000000FF
#define EHCI_QH_CURR_QTD_PTR 0xFFFFFFE0
#define EHCI_QH_NEXT_QTD_PTR 0xFFFFFFE0
#define EHCI_QH_NEXT_QTD_PTR_VALID 0x00000001
#define EHCI_QH_ALT_NEXT_QTD_PTR 0xFFFFFFE0
#define EHCI_QH_ALT_NEXT_QTD_PTR_VALID 0x00000001
#define EHCI_QH_ALT_NEXT_QTD_NAKCNT 0x0000001E
#define EHCI_QH_STS_DATA_TOGGLE 0x80000000
#define EHCI_QH_STS_BYTES_TO_XFER 0x7FFF0000
#define EHCI_QH_STS_BYTES_TO_XFER_SHIFT 16
#define EHCI_QH_STS_INTR_ON_COMPLETE 0x00008000
#define EHCI_QH_STS_C_PAGE 0x00007000
#define EHCI_QH_STS_ERROR_COUNTER 0x00000C00
#define EHCI_QH_STS_ERROR_COUNT_MASK 0x00000C00
#define EHCI_QH_STS_PID_CODE 0x00000300
#define EHCI_QH_STS_XACT_STATUS 0x000000FF
#define EHCI_QH_STS_HS_XACT_STATUS 0x000000F8
#define EHCI_QH_STS_NON_HS_XACT_STATUS 0x000000FD
#define EHCI_QH_STS_NO_ERROR 0x00000000
#define EHCI_QH_STS_ACTIVE 0x00000080
#define EHCI_QH_STS_HALTED 0x00000040
#define EHCI_QH_STS_DATA_BUFFER_ERR 0x00000020
#define EHCI_QH_STS_BABBLE_DETECTED 0x00000010
#define EHCI_QH_STS_XACT_ERROR 0x00000008
#define EHCI_QH_STS_MISSED_uFRAME 0x00000004
#define EHCI_QH_STS_SPLIT_XSTATE 0x00000002
#define EHCI_QH_STS_DO_START_SPLIT 0x00000000
#define EHCI_QH_STS_DO_COMPLETE_SPLIT 0x00000002
#define EHCI_QH_STS_PING_STATE 0x00000001
#define EHCI_QH_STS_DO_OUT 0x00000000
#define EHCI_QH_STS_DO_PING 0x00000001
#define EHCI_QH_STS_PRD_SPLIT_XACT_ERR 0x00000001
#define EHCI_QH_BUF_PTR 0xFFFFF000
#define EHCI_QH_BUF_CURR_OFFSET 0x00000FFF
#define EHCI_QH_BUF_CPROG_MASK 0x000000FF
#define EHCI_QH_BUF_SBYTES 0x00000FE0
#define EHCI_QH_BUF_FRAME_TAG 0x0000001F
#define EHCI_QH_BUF_HIGH_PTR 0xFFFFFFFF
#define EHCI_QH_FREE 1
#define EHCI_QH_STATIC 2
#define EHCI_QH_ACTIVE 3
typedef volatile struct ehci_qtd {
uint32_t qtd_next_qtd;
uint32_t qtd_alt_next_qtd;
uint32_t qtd_ctrl;
uint32_t qtd_buf[5];
uint32_t qtd_buf_high[5];
uint32_t qtd_trans_wrapper;
uint32_t qtd_tw_next_qtd;
uint32_t qtd_active_qtd_next;
uint32_t qtd_active_qtd_prev;
uint32_t qtd_state;
uint32_t qtd_ctrl_phase;
uint32_t qtd_xfer_offs;
uint32_t qtd_xfer_len;
uint8_t qtd_pad[12];
} ehci_qtd_t;
#define EHCI_QTD_NEXT_QTD_PTR 0xFFFFFFE0
#define EHCI_QTD_NEXT_QTD_PTR_VALID 0x00000001
#define EHCI_QTD_ALT_NEXT_QTD_PTR 0xFFFFFFE0
#define EHCI_QTD_ALT_NEXT_QTD_PTR_VALID 0x00000001
#define EHCI_QTD_CTRL_DATA_TOGGLE 0x80000000
#define EHCI_QTD_CTRL_DATA_TOGGLE_0 0x00000000
#define EHCI_QTD_CTRL_DATA_TOGGLE_1 0x80000000
#define EHCI_QTD_CTRL_BYTES_TO_XFER 0x7FFF0000
#define EHCI_QTD_CTRL_BYTES_TO_XFER_SHIFT 16
#define EHCI_QTD_CTRL_INTR_ON_COMPLETE 0x00008000
#define EHCI_QTD_CTRL_C_PAGE 0x00007000
#define EHCI_QTD_CTRL_MAX_ERR_COUNTS 0x00000C00
#define EHCI_QTD_CTRL_PID_CODE 0x00000300
#define EHCI_QTD_CTRL_OUT_PID 0x00000000
#define EHCI_QTD_CTRL_IN_PID 0x00000100
#define EHCI_QTD_CTRL_SETUP_PID 0x00000200
#define EHCI_QTD_CTRL_XACT_STATUS 0x000000FF
#define EHCI_QTD_CTRL_HS_XACT_STATUS 0x000000F8
#define EHCI_QTD_CTRL_NON_HS_XACT_STATUS 0x000000FD
#define EHCI_QTD_CTRL_NO_ERROR 0x00000000
#define EHCI_QTD_CTRL_ACTIVE_XACT 0x00000080
#define EHCI_QTD_CTRL_HALTED_XACT 0x00000040
#define EHCI_QTD_CTRL_DATA_BUFFER_ERROR 0x00000020
#define EHCI_QTD_CTRL_ERR_COUNT_MASK 0x00000C00
#define EHCI_QTD_CTRL_BABBLE_DETECTED 0x00000010
#define EHCI_QTD_CTRL_XACT_ERROR 0x00000008
#define EHCI_QTD_CTRL_MISSED_uFRAME 0x00000004
#define EHCI_QTD_CTRL_SPLIT_XACT_STATE 0x00000002
#define EHCI_QTD_CTRL_DO_START_SPLIT 0x00000000
#define EHCI_QTD_CTRL_DO_COMPLETE_SPLIT 0x00000002
#define EHCI_QTD_CTRL_PING_STATE 0x00000001
#define EHCI_QTD_CTRL_DO_OUT 0x00000000
#define EHCI_QTD_CTRL_DO_PING 0x00000001
#define EHCI_QTD_CTRL_PRD_SPLIT_XACT_ERR 0x00000001
#define EHCI_QTD_BUF_PTR 0xFFFFF000
#define EHCI_QTD_BUF_CURR_OFFSET 0x00000FFF
#define EHCI_QTD_BUF_HIGH_PTR 0xFFFFFFFF
#define EHCI_QTD_FREE 1
#define EHCI_QTD_DUMMY 2
#define EHCI_QTD_ACTIVE 3
#define EHCI_QTD_RECLAIM 4
#define EHCI_CTRL_SETUP_PHASE 1
#define EHCI_CTRL_DATA_PHASE 2
#define EHCI_CTRL_STATUS_PHASE 3
typedef volatile struct ehci_itd {
uint32_t itd_link_ptr;
uint32_t itd_body[15];
uint32_t itd_body_high[7];
uint32_t itd_pad;
uint32_t itd_trans_wrapper;
uint32_t itd_itw_next_itd;
uint32_t itd_next_active_itd;
uint32_t itd_state;
uint32_t itd_index[8];
uint64_t itd_frame_number;
uint64_t itd_reclaim_number;
} ehci_itd_t;
#define EHCI_ITD_LINK_PTR 0xFFFFFFE0
#define EHCI_ITD_LINK_REF 0x00000006
#define EHCI_ITD_LINK_REF_ITD 0x00000000
#define EHCI_ITD_LINK_REF_QH 0x00000002
#define EHCI_ITD_LINK_REF_SITD 0x00000004
#define EHCI_ITD_LINK_REF_FSTN 0x00000006
#define EHCI_ITD_LINK_PTR_INVALID 0x00000001
#define EHCI_ITD_CTRL_LIST_SIZE 8
#define EHCI_ITD_BUFFER_LIST_SIZE 7
#define EHCI_ITD_CTRL0 0
#define EHCI_ITD_CTRL1 1
#define EHCI_ITD_CTRL2 2
#define EHCI_ITD_CTRL3 3
#define EHCI_ITD_CTRL4 4
#define EHCI_ITD_CTRL5 5
#define EHCI_ITD_CTRL6 6
#define EHCI_ITD_CTRL7 7
#define EHCI_ITD_BUFFER0 8
#define EHCI_ITD_BUFFER1 9
#define EHCI_ITD_BUFFER2 10
#define EHCI_ITD_BUFFER3 11
#define EHCI_ITD_BUFFER4 12
#define EHCI_ITD_BUFFER5 13
#define EHCI_ITD_BUFFER6 14
#define EHCI_ITD_XFER_STATUS_MASK 0xF0000000
#define EHCI_ITD_XFER_STATUS_SHIFT 28
#define EHCI_ITD_XFER_ACTIVE 0x80000000
#define EHCI_ITD_XFER_DATA_BUFFER_ERR 0x40000000
#define EHCI_ITD_XFER_BABBLE 0x20000000
#define EHCI_ITD_XFER_ERROR 0x10000000
#define EHCI_ITD_XFER_LENGTH 0x0FFF0000
#define EHCI_ITD_XFER_IOC 0x00008000
#define EHCI_ITD_XFER_IOC_ON 0x00008000
#define EHCI_ITD_XFER_IOC_OFF 0x00000000
#define EHCI_ITD_XFER_PAGE_SELECT 0x00007000
#define EHCI_ITD_XFER_OFFSET 0x00000FFF
#define EHCI_ITD_CTRL_BUFFER_MASK 0xFFFFF000
#define EHCI_ITD_CTRL_ENDPT_MASK 0x00000F00
#define EHCI_ITD_CTRL_DEVICE_MASK 0x0000007F
#define EHCI_ITD_CTRL_DIR 0x00000800
#define EHCI_ITD_CTRL_DIR_IN 0x00000800
#define EHCI_ITD_CTRL_DIR_OUT 0x00000000
#define EHCI_ITD_CTRL_MAX_PACKET_MASK 0x000007FF
#define EHCI_ITD_CTRL_MULTI_MASK 0x00000003
#define EHCI_ITD_CTRL_ONE_XACT 0x00000001
#define EHCI_ITD_CTRL_TWO_XACT 0x00000002
#define EHCI_ITD_CTRL_THREE_XACT 0x00000003
#define EHCI_ITD_UNUSED_INDEX 0xFFFFFFFF
#define EHCI_SITD_CTRL 0
#define EHCI_SITD_UFRAME_SCHED 1
#define EHCI_SITD_XFER_STATE 2
#define EHCI_SITD_BUFFER0 3
#define EHCI_SITD_BUFFER1 4
#define EHCI_SITD_PREV_SITD 5
#define EHCI_SITD_CTRL_DIR 0x80000000
#define EHCI_SITD_CTRL_DIR_IN 0x80000000
#define EHCI_SITD_CTRL_DIR_OUT 0x00000000
#define EHCI_SITD_CTRL_PORT_MASK 0x7F000000
#define EHCI_SITD_CTRL_PORT_SHIFT 24
#define EHCI_SITD_CTRL_HUB_MASK 0x007F0000
#define EHCI_SITD_CTRL_HUB_SHIFT 16
#define EHCI_SITD_CTRL_END_PT_MASK 0x00000F00
#define EHCI_SITD_CTRL_END_PT_SHIFT 8
#define EHCI_SITD_CTRL_DEVICE_MASK 0x0000007F
#define EHCI_SITD_CTRL_DEVICE_SHIFT 0
#define EHCI_SITD_UFRAME_CMASK_MASK 0x0000FF00
#define EHCI_SITD_UFRAME_CMASK_SHIFT 8
#define EHCI_SITD_UFRAME_SMASK_MASK 0x000000FF
#define EHCI_SITD_UFRAME_SMASK_SHIFT 0
#define EHCI_SITD_XFER_IOC_MASK 0x80000000
#define EHCI_SITD_XFER_IOC_ON 0x80000000
#define EHCI_SITD_XFER_IOC_OFF 0x00000000
#define EHCI_SITD_XFER_PAGE_MASK 0x40000000
#define EHCI_SITD_XFER_PAGE_0 0x00000000
#define EHCI_SITD_XFER_PAGE_1 0x40000000
#define EHCI_SITD_XFER_TOTAL_MASK 0x03FF0000
#define EHCI_SITD_XFER_TOTAL_SHIFT 16
#define EHCI_SITD_XFER_CPROG_MASK 0x0000FF00
#define EHCI_SITD_XFER_CPROG_SHIFT 8
#define EHCI_SITD_XFER_STATUS_MASK 0x000000FF
#define EHCI_SITD_XFER_STATUS_SHIFT 0
#define EHCI_SITD_XFER_ACTIVE 0x80
#define EHCI_SITD_XFER_ERROR 0x40
#define EHCI_SITD_XFER_DATA_BUFFER_ERR 0x20
#define EHCI_SITD_XFER_BABBLE 0x10
#define EHCI_SITD_XFER_XACT_ERROR 0x08
#define EHCI_SITD_XFER_MISSED_UFRAME 0x04
#define EHCI_SITD_XFER_SPLIT_XACT_STATE 0x02
#define EHCI_SITD_XFER_SSPLIT_STATE 0x00
#define EHCI_SITD_XFER_CSPLIT_STATE 0x02
#define EHCI_SITD_XFER_BUFFER_MASK 0xFFFFF000
#define EHCI_SITD_XFER_BUFFER_SHIFT 12
#define EHCI_SITD_XFER_OFFSET_MASK 0x00000FFF
#define EHCI_SITD_XFER_OFFSET_SHIFT 0
#define EHCI_SITD_XFER_TP_MASK 0x00000018
#define EHCI_SITD_XFER_TP_ALL 0x0
#define EHCI_SITD_XFER_TP_BEGIN 0x1
#define EHCI_SITD_XFER_TP_MID 0x2
#define EHCI_SITD_XFER_TP_END 0x3
#define EHCI_SITD_XFER_TCOUNT_MASK 0x00000007
#define EHCI_SITD_XFER_TCOUNT_SHIFT 0
#define EHCI_ITD_FREE 1
#define EHCI_ITD_DUMMY 2
#define EHCI_ITD_ACTIVE 3
#define EHCI_ITD_RECLAIM 4
#ifdef __cplusplus
}
#endif
#endif