1#ifndef __EHCI__EHCI_HPP__
2#define __EHCI__EHCI_HPP__
9#define EHCI_VENDOR_ID 0x8086
10#define EHCI_DEVICE_ID 0x24cd
13#define EHCI_INTERRUPT_ENABLE 0x1
16#define EHCI_CONTROLLER_START 1
17#define EHCI_CONTROLLER_RESET (1 << 1)
18#define EHCI_START_PERIODIC_SCHEDULE (1 << 4)
19#define EHCI_START_ASYNC_SCHEDULE (1 << 5)
22#define EHCI_HC_HALTED_STATUS (1 << 12)
25#define EHCI_PERIODIC_SCHEDULE_ENABLE (1 << 4)
26#define EHCI_ASYNC_SCHEDULE_ENABLE (5 << 4)
29#define EHCI_PORT_ENABLED (1 << 2)
30#define EHCI_PORT_RESET (1 << 8)
33#define EHCI_1_MICRO_FRAME (1 << 16)
34#define EHCI_2_MICRO_FRAME (2 << 16)
35#define EHCI_4_MICRO_FRAME (4 << 16)
36#define EHCI_8_MICRO_FRAME (8 << 16)
37#define EHCI_16_MICRO_FRAME (16 << 16)
38#define EHCI_32_MICRO_FRAME (32 << 16)
39#define EHCI_64_MICRO_FRAME (64 << 16)
46#define EHCI_QUEUE_HEAD_TERMINATE 1
47#define EHCI_QUEUE_HEAD_TOKEN_HALTED (1 << 6)
50#define EHCI_QUEUE_HEAD_TYPE_QTD (0 << 1)
51#define EHCI_QUEUE_HEAD_TYPE_QH (1 << 1)
52#define EHCI_QUEUE_HEAD_TYPE_SITD (2 << 1)
53#define EHCI_QUEUE_HEAD_TYPE_FSTN (3 << 1)
56#define EHCI_QH_CAP_DTC (1 << 14)
57#define EHCI_QH_CAP_HEAD_OF_RECLAMATION (1 << 15)
58#define EHCI_QH_CAP_MAX_PACKET_LENGTH(x) (x << 16)
59#define EHCI_QH_EPS_MASK (3 << 12)
66#define EHCI_QTD_TERMINATE 1
69#define EHCI_QTD_TOKEN_LENGTH(l) (l << 16)
70#define EHCI_QTD_TOKEN_DATA (1 << 31)
71#define EHCI_QTD_TOKEN_IOC (1 << 15)
210 uint32_t response,
size_t response_size);
void set_controller(ioforge_usb_controller_service *controller)
boolean_t retrieve_qtd(ehci_queue_task_descriptor_node_t **out)
void call_completion_callback(ioforge_device *dev)
boolean_t retrieve_qh(ehci_queue_head_node_t **out)
void store_qtd(ehci_queue_task_descriptor_node_t **in)
void insert_periodic(ehci_queue_head_node_t *qh_node, uint16_t interval_ms)
boolean_t is_trasaction_is_running
void usb_get_string_descriptor(uint8_t addr, uint8_t index, char *data, size_t size)
void assign_address(int address)
ioforge_pci_device * device
static void fireHandler()
void usb_get_descriptor(uint8_t addr, uint8_t type, uint8_t index, uint8_t len, uint8_t *data)
ioforge_usb_controller_service * controller
void push_to_qh(ehci_queue_head_node_t *qh_node)
void send_async_with_response(uint8_t addr, uint8_t endpoint, uint32_t data_phys, size_t size, uint32_t response, size_t response_size)
void port_reset(int port)
static EHCIModule * getInstance()
void store_qh(ehci_queue_head_node_t **in)
void procces_async(ehci_queue_task_descriptor *qtd)
void pop_from_qh(ehci_queue_head_node_t *qh)
IOforgePCI(const char *mod)
struct ehci_queue_head_node ehci_queue_head_node_t
EHCI_QTD_TOKEN_ERROR_COUNT
@ EHCI_QTD_TOKEN_ERROR_COUNT_2
@ EHCI_QTD_TOKEN_ERROR_COUNT_1
@ EHCI_QTD_TOKEN_ERROR_COUNT_3
@ EHCI_QTD_TOKEN_ERROR_COUNT_0
struct ehci_queue_task_descriptor_node ehci_queue_task_descriptor_node_t
struct ehci_queue_head_node __attribute__
@ EHCI_QTD_TOKEN_PID_SETUP
@ EHCI_QTD_TOKEN_STATUS_BUFFER_ERROR
@ EHCI_QTD_TOKEN_STATUS_HALTED
@ EHCI_QTD_TOKEN_STATUS_TRANSACTION_ERROR
@ EHCI_QTD_TOKEN_STATUS_ACTIVE
@ EHCI_QTD_TOKEN_STATUS_BABBLE_DETECTED
volatile uint32_t usbintr
volatile uint32_t configflag
volatile uint32_t frindex
volatile uint32_t periodiclistbase
volatile uint32_t ctrldssegment
volatile uint32_t asynclistaddr
volatile uint32_t reserved[9]
volatile uint32_t portsc[]
ehci_queue_task_descriptor_node_t * data_node
ehci_queue_head_node_t * qh_node
struct ehci_queue_head * head
ehci_queue_head_node_t * next
volatile uint32_t buffer[5]
volatile uint32_t currentTD
volatile uint32_t extbuffer[5]
struct ehci_queue_task_descriptor * task_descriptor
ehci_queue_task_descriptor_node_t * next
volatile uint32_t buffer[5]
volatile uint32_t altlink
volatile uint32_t extbuffer[5]