Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
ehci.hpp File Reference

Go to the source code of this file.

Data Structures

struct  ehci_operation
 
struct  ehci_queue_head
 
struct  ehci_queue_head_node
 
struct  ehci_queue_task_descriptor
 
struct  ehci_queue_task_descriptor_node
 
struct  ehci_periodic_transfer_ctx
 
class  EHCIModule
 

Macros

#define EHCI_VENDOR_ID   0x8086
 
#define EHCI_DEVICE_ID   0x24cd
 
#define EHCI_INTERRUPT_ENABLE   0x1
 
#define EHCI_CONTROLLER_START   1
 
#define EHCI_CONTROLLER_RESET   (1 << 1)
 
#define EHCI_START_PERIODIC_SCHEDULE   (1 << 4)
 
#define EHCI_START_ASYNC_SCHEDULE   (1 << 5)
 
#define EHCI_HC_HALTED_STATUS   (1 << 12)
 
#define EHCI_PERIODIC_SCHEDULE_ENABLE   (1 << 4)
 
#define EHCI_ASYNC_SCHEDULE_ENABLE   (5 << 4)
 
#define EHCI_PORT_ENABLED   (1 << 2)
 
#define EHCI_PORT_RESET   (1 << 8)
 
#define EHCI_1_MICRO_FRAME   (1 << 16)
 
#define EHCI_2_MICRO_FRAME   (2 << 16)
 
#define EHCI_4_MICRO_FRAME   (4 << 16)
 
#define EHCI_8_MICRO_FRAME   (8 << 16)
 
#define EHCI_16_MICRO_FRAME   (16 << 16)
 
#define EHCI_32_MICRO_FRAME   (32 << 16)
 
#define EHCI_64_MICRO_FRAME   (64 << 16)
 
#define EHCI_QUEUE_HEAD_TERMINATE   1
 
#define EHCI_QUEUE_HEAD_TOKEN_HALTED   (1 << 6)
 
#define EHCI_QUEUE_HEAD_TYPE_QTD   (0 << 1)
 
#define EHCI_QUEUE_HEAD_TYPE_QH   (1 << 1)
 
#define EHCI_QUEUE_HEAD_TYPE_SITD   (2 << 1)
 
#define EHCI_QUEUE_HEAD_TYPE_FSTN   (3 << 1)
 
#define EHCI_QH_CAP_DTC   (1 << 14)
 
#define EHCI_QH_CAP_HEAD_OF_RECLAMATION   (1 << 15)
 
#define EHCI_QH_CAP_MAX_PACKET_LENGTH(x)
 
#define EHCI_QH_EPS_MASK   (3 << 12)
 
#define EHCI_QTD_TERMINATE   1
 
#define EHCI_QTD_TOKEN_LENGTH(l)
 
#define EHCI_QTD_TOKEN_DATA   (1 << 31)
 
#define EHCI_QTD_TOKEN_IOC   (1 << 15)
 

Typedefs

typedef struct ehci_queue_head_node ehci_queue_head_node_t
 
typedef struct ehci_queue_task_descriptor_node ehci_queue_task_descriptor_node_t
 

Enumerations

enum  EHCI_Q_SELECT { EHCI_Q_SELECT_ITD = (0 << 1) , EHCI_Q_SELECT_QH = (1 << 1) , EHCI_Q_SELECT_SITD = (2 << 1) , EHCI_Q_SELECT_FSTN = (3 << 1) }
 
enum  EHCI_QTD_TOKEN_PID { EHCI_QTD_TOKEN_PID_OUT = (0 << 8) , EHCI_QTD_TOKEN_PID_IN = (1 << 8) , EHCI_QTD_TOKEN_PID_SETUP = (2 << 8) }
 
enum  EHCI_QTD_TOKEN_STATUS {
  EHCI_QTD_TOKEN_STATUS_ACTIVE = (1 << 7) , EHCI_QTD_TOKEN_STATUS_HALTED = (1 << 6) , EHCI_QTD_TOKEN_STATUS_BUFFER_ERROR = (1 << 5) , EHCI_QTD_TOKEN_STATUS_BABBLE_DETECTED = (1 << 4) ,
  EHCI_QTD_TOKEN_STATUS_TRANSACTION_ERROR = (1 << 3)
}
 
enum  EHCI_QTD_TOKEN_ERROR_COUNT { EHCI_QTD_TOKEN_ERROR_COUNT_0 = (0 << 10) , EHCI_QTD_TOKEN_ERROR_COUNT_1 = (1 << 10) , EHCI_QTD_TOKEN_ERROR_COUNT_2 = (2 << 10) , EHCI_QTD_TOKEN_ERROR_COUNT_3 = (3 << 10) }
 
enum  EHCI_QH_CAP_MULT { EHCI_QH_CAP_MULT_1 = (1 << 30) , EHCI_QH_CAP_MULT_2 = (2 << 30) , EHCI_QH_CAP_MULT_3 = (3 << 30) }
 

Functions

struct ehci_queue_head __attribute__ ((aligned(32)))
 

Variables

volatile uint32_t qhlp
 
volatile uint32_t ch
 
volatile uint32_t cap
 
volatile uint32_t currentTD
 
volatile uint32_t nextTD
 
volatile uint32_t altTD
 
volatile uint32_t token
 
volatile uint32_t buffer [5]
 
volatile uint32_t extbuffer [5]
 
uint32_t _pad [7]
 
struct ehci_queue_head_node __attribute__
 
volatile uint32_t link
 
volatile uint32_t altlink
 
boolean_t used
 
uint32_t next
 

Macro Definition Documentation

◆ EHCI_16_MICRO_FRAME

#define EHCI_16_MICRO_FRAME   (16 << 16)

Definition at line 37 of file ehci.hpp.

◆ EHCI_1_MICRO_FRAME

#define EHCI_1_MICRO_FRAME   (1 << 16)

Definition at line 33 of file ehci.hpp.

Referenced by EHCIModule::load().

◆ EHCI_2_MICRO_FRAME

#define EHCI_2_MICRO_FRAME   (2 << 16)

Definition at line 34 of file ehci.hpp.

◆ EHCI_32_MICRO_FRAME

#define EHCI_32_MICRO_FRAME   (32 << 16)

Definition at line 38 of file ehci.hpp.

◆ EHCI_4_MICRO_FRAME

#define EHCI_4_MICRO_FRAME   (4 << 16)

Definition at line 35 of file ehci.hpp.

◆ EHCI_64_MICRO_FRAME

#define EHCI_64_MICRO_FRAME   (64 << 16)

Definition at line 39 of file ehci.hpp.

◆ EHCI_8_MICRO_FRAME

#define EHCI_8_MICRO_FRAME   (8 << 16)

Definition at line 36 of file ehci.hpp.

◆ EHCI_ASYNC_SCHEDULE_ENABLE

#define EHCI_ASYNC_SCHEDULE_ENABLE   (5 << 4)

Definition at line 26 of file ehci.hpp.

◆ EHCI_CONTROLLER_RESET

#define EHCI_CONTROLLER_RESET   (1 << 1)

Definition at line 17 of file ehci.hpp.

Referenced by EHCIModule::reset_device().

◆ EHCI_CONTROLLER_START

#define EHCI_CONTROLLER_START   1

Definition at line 16 of file ehci.hpp.

Referenced by EHCIModule::start_device().

◆ EHCI_DEVICE_ID

#define EHCI_DEVICE_ID   0x24cd

Definition at line 10 of file ehci.hpp.

Referenced by EHCIModule::load().

◆ EHCI_HC_HALTED_STATUS

#define EHCI_HC_HALTED_STATUS   (1 << 12)

Definition at line 22 of file ehci.hpp.

Referenced by EHCIModule::start_device().

◆ EHCI_INTERRUPT_ENABLE

#define EHCI_INTERRUPT_ENABLE   0x1

Definition at line 13 of file ehci.hpp.

◆ EHCI_PERIODIC_SCHEDULE_ENABLE

#define EHCI_PERIODIC_SCHEDULE_ENABLE   (1 << 4)

Definition at line 25 of file ehci.hpp.

Referenced by EHCIModule::start_periodic(), and EHCIModule::stop_periodic().

◆ EHCI_PORT_ENABLED

#define EHCI_PORT_ENABLED   (1 << 2)

Definition at line 29 of file ehci.hpp.

Referenced by EHCIModule::probe().

◆ EHCI_PORT_RESET

#define EHCI_PORT_RESET   (1 << 8)

Definition at line 30 of file ehci.hpp.

Referenced by EHCIModule::port_reset().

◆ EHCI_QH_CAP_DTC

#define EHCI_QH_CAP_DTC   (1 << 14)

Definition at line 56 of file ehci.hpp.

Referenced by EHCIModule::send_async_with_response().

◆ EHCI_QH_CAP_HEAD_OF_RECLAMATION

#define EHCI_QH_CAP_HEAD_OF_RECLAMATION   (1 << 15)

Definition at line 57 of file ehci.hpp.

Referenced by EHCIModule::init_controller(), and EHCIModule::init_periodic().

◆ EHCI_QH_CAP_MAX_PACKET_LENGTH

#define EHCI_QH_CAP_MAX_PACKET_LENGTH ( x)
Value:
(x << 16)
uint32_t x
Definition virtio-gpu.hpp:0

Definition at line 58 of file ehci.hpp.

Referenced by EHCIModule::send_async_with_response().

◆ EHCI_QH_EPS_MASK

#define EHCI_QH_EPS_MASK   (3 << 12)

Definition at line 59 of file ehci.hpp.

◆ EHCI_QTD_TERMINATE

#define EHCI_QTD_TERMINATE   1

◆ EHCI_QTD_TOKEN_DATA

#define EHCI_QTD_TOKEN_DATA   (1 << 31)

Definition at line 70 of file ehci.hpp.

Referenced by EHCIPipe::arm(), and EHCIModule::send_async_with_response().

◆ EHCI_QTD_TOKEN_IOC

#define EHCI_QTD_TOKEN_IOC   (1 << 15)

Definition at line 71 of file ehci.hpp.

Referenced by EHCIPipe::arm(), and EHCIModule::send_async_with_response().

◆ EHCI_QTD_TOKEN_LENGTH

#define EHCI_QTD_TOKEN_LENGTH ( l)
Value:
(l << 16)

Definition at line 69 of file ehci.hpp.

Referenced by EHCIPipe::arm(), and EHCIModule::send_async_with_response().

◆ EHCI_QUEUE_HEAD_TERMINATE

#define EHCI_QUEUE_HEAD_TERMINATE   1

Definition at line 46 of file ehci.hpp.

◆ EHCI_QUEUE_HEAD_TOKEN_HALTED

#define EHCI_QUEUE_HEAD_TOKEN_HALTED   (1 << 6)

Definition at line 47 of file ehci.hpp.

◆ EHCI_QUEUE_HEAD_TYPE_FSTN

#define EHCI_QUEUE_HEAD_TYPE_FSTN   (3 << 1)

Definition at line 53 of file ehci.hpp.

◆ EHCI_QUEUE_HEAD_TYPE_QH

#define EHCI_QUEUE_HEAD_TYPE_QH   (1 << 1)

Definition at line 51 of file ehci.hpp.

◆ EHCI_QUEUE_HEAD_TYPE_QTD

#define EHCI_QUEUE_HEAD_TYPE_QTD   (0 << 1)

Definition at line 50 of file ehci.hpp.

◆ EHCI_QUEUE_HEAD_TYPE_SITD

#define EHCI_QUEUE_HEAD_TYPE_SITD   (2 << 1)

Definition at line 52 of file ehci.hpp.

◆ EHCI_START_ASYNC_SCHEDULE

#define EHCI_START_ASYNC_SCHEDULE   (1 << 5)

Definition at line 19 of file ehci.hpp.

Referenced by EHCIModule::init_controller(), and EHCIModule::procces_async().

◆ EHCI_START_PERIODIC_SCHEDULE

#define EHCI_START_PERIODIC_SCHEDULE   (1 << 4)

Definition at line 18 of file ehci.hpp.

◆ EHCI_VENDOR_ID

#define EHCI_VENDOR_ID   0x8086

Definition at line 9 of file ehci.hpp.

Referenced by EHCIModule::load().

Typedef Documentation

◆ ehci_queue_head_node_t

Definition at line 156 of file ehci.hpp.

◆ ehci_queue_task_descriptor_node_t

Enumeration Type Documentation

◆ EHCI_Q_SELECT

Enumerator
EHCI_Q_SELECT_ITD 
EHCI_Q_SELECT_QH 
EHCI_Q_SELECT_SITD 
EHCI_Q_SELECT_FSTN 

Definition at line 74 of file ehci.hpp.

◆ EHCI_QH_CAP_MULT

Enumerator
EHCI_QH_CAP_MULT_1 
EHCI_QH_CAP_MULT_2 
EHCI_QH_CAP_MULT_3 

Definition at line 106 of file ehci.hpp.

◆ EHCI_QTD_TOKEN_ERROR_COUNT

Enumerator
EHCI_QTD_TOKEN_ERROR_COUNT_0 
EHCI_QTD_TOKEN_ERROR_COUNT_1 
EHCI_QTD_TOKEN_ERROR_COUNT_2 
EHCI_QTD_TOKEN_ERROR_COUNT_3 

Definition at line 98 of file ehci.hpp.

◆ EHCI_QTD_TOKEN_PID

Enumerator
EHCI_QTD_TOKEN_PID_OUT 
EHCI_QTD_TOKEN_PID_IN 
EHCI_QTD_TOKEN_PID_SETUP 

Definition at line 82 of file ehci.hpp.

◆ EHCI_QTD_TOKEN_STATUS

Enumerator
EHCI_QTD_TOKEN_STATUS_ACTIVE 
EHCI_QTD_TOKEN_STATUS_HALTED 
EHCI_QTD_TOKEN_STATUS_BUFFER_ERROR 
EHCI_QTD_TOKEN_STATUS_BABBLE_DETECTED 
EHCI_QTD_TOKEN_STATUS_TRANSACTION_ERROR 

Definition at line 89 of file ehci.hpp.

Function Documentation

◆ __attribute__()

struct ehci_queue_head __attribute__ ( (aligned(32)) )

Definition at line 1 of file framebuffer.h.

Variable Documentation

◆ __attribute__

struct ehci_queue_task_descriptor_node __attribute__

◆ _pad

uint32_t _pad[7]

Definition at line 11 of file ehci.hpp.

◆ altlink

volatile uint32_t altlink

Definition at line 1 of file ehci.hpp.

◆ altTD

volatile uint32_t altTD

Definition at line 6 of file ehci.hpp.

◆ buffer

◆ cap

◆ ch

volatile uint32_t ch

Definition at line 1 of file ehci.hpp.

Referenced by EHCIModule::usb_get_string_descriptor(), and vfs_umount_recursive().

◆ currentTD

volatile uint32_t currentTD

Definition at line 3 of file ehci.hpp.

◆ extbuffer

volatile uint32_t extbuffer

Definition at line 9 of file ehci.hpp.

◆ link

volatile uint32_t link

Definition at line 0 of file ehci.hpp.

◆ next

uint32_t next

Definition at line 7 of file ehci.hpp.

Referenced by EHCIModule::call_completion_callback().

◆ nextTD

volatile uint32_t nextTD

Definition at line 5 of file ehci.hpp.

◆ qhlp

volatile uint32_t qhlp

Definition at line 0 of file ehci.hpp.

◆ token

volatile uint32_t token

Definition at line 7 of file ehci.hpp.

Referenced by EHCIModule::call_completion_callback().

◆ used

boolean_t used

Definition at line 6 of file ehci.hpp.

Referenced by __attribute__(), __attribute__(), char_write(), and phys_base_alloc().