FreeBSD kernel usb device Code
uhci.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  uhci_td
 
struct  uhci_qh
 
struct  uhci_config_desc
 
union  uhci_hub_desc
 
struct  uhci_hw_softc
 
struct  uhci_softc
 

Macros

#define UHCI_MAX_DEVICES   MIN(USB_MAX_DEVICES, 128)
 
#define UHCI_FRAMELIST_COUNT   1024 /* units */
 
#define UHCI_FRAMELIST_ALIGN   4096 /* bytes */
 
#define UHCI_TD_ALIGN   16
 
#define UHCI_QH_ALIGN   16
 
#define UHCI_PTR_T   0x00000001
 
#define UHCI_PTR_TD   0x00000000
 
#define UHCI_PTR_QH   0x00000002
 
#define UHCI_PTR_VF   0x00000004
 
#define UHCI_TD_GET_ACTLEN(s)   (((s) + 1) & 0x3ff)
 
#define UHCI_TD_ZERO_ACTLEN(t)   ((t) | 0x3ff)
 
#define UHCI_TD_BITSTUFF   0x00020000
 
#define UHCI_TD_CRCTO   0x00040000
 
#define UHCI_TD_NAK   0x00080000
 
#define UHCI_TD_BABBLE   0x00100000
 
#define UHCI_TD_DBUFFER   0x00200000
 
#define UHCI_TD_STALLED   0x00400000
 
#define UHCI_TD_ACTIVE   0x00800000
 
#define UHCI_TD_IOC   0x01000000
 
#define UHCI_TD_IOS   0x02000000
 
#define UHCI_TD_LS   0x04000000
 
#define UHCI_TD_GET_ERRCNT(s)   (((s) >> 27) & 3)
 
#define UHCI_TD_SET_ERRCNT(n)   ((n) << 27)
 
#define UHCI_TD_SPD   0x20000000
 
#define UHCI_TD_PID   0x000000ff
 
#define UHCI_TD_PID_IN   0x00000069
 
#define UHCI_TD_PID_OUT   0x000000e1
 
#define UHCI_TD_PID_SETUP   0x0000002d
 
#define UHCI_TD_GET_PID(s)   ((s) & 0xff)
 
#define UHCI_TD_SET_DEVADDR(a)   ((a) << 8)
 
#define UHCI_TD_GET_DEVADDR(s)   (((s) >> 8) & 0x7f)
 
#define UHCI_TD_SET_ENDPT(e)   (((e) & 0xf) << 15)
 
#define UHCI_TD_GET_ENDPT(s)   (((s) >> 15) & 0xf)
 
#define UHCI_TD_SET_DT(t)   ((t) << 19)
 
#define UHCI_TD_GET_DT(s)   (((s) >> 19) & 1)
 
#define UHCI_TD_SET_MAXLEN(l)   (((l)-1U) << 21)
 
#define UHCI_TD_GET_MAXLEN(s)   ((((s) >> 21) + 1) & 0x7ff)
 
#define UHCI_TD_MAXLEN_MASK   0xffe00000
 
#define UHCI_TD_ERROR
 
#define UHCI_TD_SETUP(len, endp, dev)
 
#define UHCI_TD_OUT(len, endp, dev, dt)
 
#define UHCI_TD_IN(len, endp, dev, dt)
 
#define UHCI_VFRAMELIST_COUNT   128
 
#define UHCI_IFRAMELIST_COUNT   (2 * UHCI_VFRAMELIST_COUNT)
 

Typedefs

typedef uint32_t uhci_physaddr_t
 
typedef struct uhci_td uhci_td_t
 
typedef struct uhci_qh uhci_qh_t
 
typedef struct uhci_softc uhci_softc_t
 

Functions

struct uhci_td __aligned (UHCI_TD_ALIGN)
 
struct uhci_qh __aligned (UHCI_QH_ALIGN)
 
usb_error_t uhci_init (uhci_softc_t *sc)
 
void uhci_reset (uhci_softc_t *sc)
 
void uhci_interrupt (uhci_softc_t *sc)
 

Variables

volatile uint32_t td_next
 
volatile uint32_t td_status
 
volatile uint32_t td_token
 
volatile uint32_t td_buffer
 
struct uhci_tdnext
 
struct uhci_tdprev
 
struct uhci_tdobj_next
 
struct usb_page_cachepage_cache
 
struct usb_page_cachefix_pc
 
uint32_t td_self
 
uint16_t len
 
volatile uint32_t qh_h_next
 
volatile uint32_t qh_e_next
 
struct uhci_qhh_next
 
struct uhci_qhh_prev
 
struct uhci_tde_next
 
uint32_t qh_self
 
uint16_t intr_pos
 
struct uhci_config_desc __packed
 
usb_bus_mem_cb_t uhci_iterate_hw_softc
 

Macro Definition Documentation

◆ UHCI_FRAMELIST_ALIGN

#define UHCI_FRAMELIST_ALIGN   4096 /* bytes */

Definition at line 40 of file uhci.h.

◆ UHCI_FRAMELIST_COUNT

#define UHCI_FRAMELIST_COUNT   1024 /* units */

Definition at line 39 of file uhci.h.

◆ UHCI_IFRAMELIST_COUNT

#define UHCI_IFRAMELIST_COUNT   (2 * UHCI_VFRAMELIST_COUNT)

Definition at line 160 of file uhci.h.

◆ UHCI_MAX_DEVICES

#define UHCI_MAX_DEVICES   MIN(USB_MAX_DEVICES, 128)

Definition at line 37 of file uhci.h.

◆ UHCI_PTR_QH

#define UHCI_PTR_QH   0x00000002

Definition at line 55 of file uhci.h.

◆ UHCI_PTR_T

#define UHCI_PTR_T   0x00000001

Definition at line 53 of file uhci.h.

◆ UHCI_PTR_TD

#define UHCI_PTR_TD   0x00000000

Definition at line 54 of file uhci.h.

◆ UHCI_PTR_VF

#define UHCI_PTR_VF   0x00000004

Definition at line 56 of file uhci.h.

◆ UHCI_QH_ALIGN

#define UHCI_QH_ALIGN   16

Definition at line 44 of file uhci.h.

◆ UHCI_TD_ACTIVE

#define UHCI_TD_ACTIVE   0x00800000

Definition at line 14 of file uhci.h.

◆ UHCI_TD_ALIGN

#define UHCI_TD_ALIGN   16

Definition at line 43 of file uhci.h.

◆ UHCI_TD_BABBLE

#define UHCI_TD_BABBLE   0x00100000

Definition at line 11 of file uhci.h.

◆ UHCI_TD_BITSTUFF

#define UHCI_TD_BITSTUFF   0x00020000

Definition at line 8 of file uhci.h.

◆ UHCI_TD_CRCTO

#define UHCI_TD_CRCTO   0x00040000

Definition at line 9 of file uhci.h.

◆ UHCI_TD_DBUFFER

#define UHCI_TD_DBUFFER   0x00200000

Definition at line 12 of file uhci.h.

◆ UHCI_TD_ERROR

#define UHCI_TD_ERROR
Value:
UHCI_TD_BABBLE | UHCI_TD_DBUFFER | UHCI_TD_STALLED)
#define UHCI_TD_STALLED
Definition: uhci.h:13
#define UHCI_TD_BITSTUFF
Definition: uhci.h:8
#define UHCI_TD_CRCTO
Definition: uhci.h:9
#define UHCI_TD_DBUFFER
Definition: uhci.h:12

Definition at line 120 of file uhci.h.

◆ UHCI_TD_GET_ACTLEN

#define UHCI_TD_GET_ACTLEN (   s)    (((s) + 1) & 0x3ff)

Definition at line 6 of file uhci.h.

◆ UHCI_TD_GET_DEVADDR

#define UHCI_TD_GET_DEVADDR (   s)    (((s) >> 8) & 0x7f)

Definition at line 28 of file uhci.h.

◆ UHCI_TD_GET_DT

#define UHCI_TD_GET_DT (   s)    (((s) >> 19) & 1)

Definition at line 32 of file uhci.h.

◆ UHCI_TD_GET_ENDPT

#define UHCI_TD_GET_ENDPT (   s)    (((s) >> 15) & 0xf)

Definition at line 30 of file uhci.h.

◆ UHCI_TD_GET_ERRCNT

#define UHCI_TD_GET_ERRCNT (   s)    (((s) >> 27) & 3)

Definition at line 18 of file uhci.h.

◆ UHCI_TD_GET_MAXLEN

#define UHCI_TD_GET_MAXLEN (   s)    ((((s) >> 21) + 1) & 0x7ff)

Definition at line 34 of file uhci.h.

◆ UHCI_TD_GET_PID

#define UHCI_TD_GET_PID (   s)    ((s) & 0xff)

Definition at line 26 of file uhci.h.

◆ UHCI_TD_IN

#define UHCI_TD_IN (   len,
  endp,
  dev,
  dt 
)
Value:
UHCI_TD_SET_ENDPT(endp) | \
UHCI_TD_SET_DEVADDR(dev) | \
UHCI_TD_PID_IN | UHCI_TD_SET_DT(dt))
#define UHCI_TD_SET_MAXLEN(l)
Definition: uhci.h:33
uint16_t len
Definition: uhci.h:46
#define UHCI_TD_SET_DT(t)
Definition: uhci.h:31

Definition at line 133 of file uhci.h.

◆ UHCI_TD_IOC

#define UHCI_TD_IOC   0x01000000

Definition at line 15 of file uhci.h.

◆ UHCI_TD_IOS

#define UHCI_TD_IOS   0x02000000

Definition at line 16 of file uhci.h.

◆ UHCI_TD_LS

#define UHCI_TD_LS   0x04000000

Definition at line 17 of file uhci.h.

◆ UHCI_TD_MAXLEN_MASK

#define UHCI_TD_MAXLEN_MASK   0xffe00000

Definition at line 35 of file uhci.h.

◆ UHCI_TD_NAK

#define UHCI_TD_NAK   0x00080000

Definition at line 10 of file uhci.h.

◆ UHCI_TD_OUT

#define UHCI_TD_OUT (   len,
  endp,
  dev,
  dt 
)
Value:
UHCI_TD_SET_ENDPT(endp) | \
UHCI_TD_SET_DEVADDR(dev) | \
UHCI_TD_PID_OUT | UHCI_TD_SET_DT(dt))

Definition at line 128 of file uhci.h.

◆ UHCI_TD_PID

#define UHCI_TD_PID   0x000000ff

Definition at line 22 of file uhci.h.

◆ UHCI_TD_PID_IN

#define UHCI_TD_PID_IN   0x00000069

Definition at line 23 of file uhci.h.

◆ UHCI_TD_PID_OUT

#define UHCI_TD_PID_OUT   0x000000e1

Definition at line 24 of file uhci.h.

◆ UHCI_TD_PID_SETUP

#define UHCI_TD_PID_SETUP   0x0000002d

Definition at line 25 of file uhci.h.

◆ UHCI_TD_SET_DEVADDR

#define UHCI_TD_SET_DEVADDR (   a)    ((a) << 8)

Definition at line 27 of file uhci.h.

◆ UHCI_TD_SET_DT

#define UHCI_TD_SET_DT (   t)    ((t) << 19)

Definition at line 31 of file uhci.h.

◆ UHCI_TD_SET_ENDPT

#define UHCI_TD_SET_ENDPT (   e)    (((e) & 0xf) << 15)

Definition at line 29 of file uhci.h.

◆ UHCI_TD_SET_ERRCNT

#define UHCI_TD_SET_ERRCNT (   n)    ((n) << 27)

Definition at line 19 of file uhci.h.

◆ UHCI_TD_SET_MAXLEN

#define UHCI_TD_SET_MAXLEN (   l)    (((l)-1U) << 21)

Definition at line 33 of file uhci.h.

◆ UHCI_TD_SETUP

#define UHCI_TD_SETUP (   len,
  endp,
  dev 
)
Value:
UHCI_TD_SET_ENDPT(endp) | \
UHCI_TD_SET_DEVADDR(dev) | \
UHCI_TD_PID_SETUP)

Definition at line 123 of file uhci.h.

◆ UHCI_TD_SPD

#define UHCI_TD_SPD   0x20000000

Definition at line 20 of file uhci.h.

◆ UHCI_TD_STALLED

#define UHCI_TD_STALLED   0x00400000

Definition at line 13 of file uhci.h.

◆ UHCI_TD_ZERO_ACTLEN

#define UHCI_TD_ZERO_ACTLEN (   t)    ((t) | 0x3ff)

Definition at line 7 of file uhci.h.

◆ UHCI_VFRAMELIST_COUNT

#define UHCI_VFRAMELIST_COUNT   128

Definition at line 159 of file uhci.h.

Typedef Documentation

◆ uhci_physaddr_t

typedef uint32_t uhci_physaddr_t

Definition at line 51 of file uhci.h.

◆ uhci_qh_t

typedef struct uhci_qh uhci_qh_t

Definition at line 156 of file uhci.h.

◆ uhci_softc_t

typedef struct uhci_softc uhci_softc_t

◆ uhci_td_t

typedef struct uhci_td uhci_td_t

Definition at line 118 of file uhci.h.

Function Documentation

◆ __aligned() [1/2]

struct uhci_qh __aligned ( UHCI_QH_ALIGN  )

◆ __aligned() [2/2]

struct uhci_td __aligned ( UHCI_TD_ALIGN  )

◆ uhci_init()

◆ uhci_interrupt()

void uhci_interrupt ( uhci_softc_t sc)

Definition at line 1414 of file uhci.c.

References DPRINTF, uhci_softc::sc_bus, status, uhci_interrupt_poll(), UHCI_STS, UHCI_STS_ALLINTRS, UHCI_STS_HCH, UHCI_STS_HCPE, UHCI_STS_HSE, UHCI_STS_RD, UHCI_STS_USBEI, UHCI_STS_USBINT, UREAD2, USB_BUS_LOCK, USB_BUS_UNLOCK, and UWRITE2.

Referenced by uhci_pci_attach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ uhci_reset()

Variable Documentation

◆ __packed

◆ e_next

struct uhci_td* e_next

Definition at line 11 of file uhci.h.

◆ fix_pc

struct usb_page_cache* fix_pc

Definition at line 44 of file uhci.h.

◆ h_next

struct uhci_qh* h_next

Definition at line 8 of file uhci.h.

◆ h_prev

struct uhci_qh* h_prev

Definition at line 9 of file uhci.h.

◆ intr_pos

uint16_t intr_pos

Definition at line 14 of file uhci.h.

◆ len

uint16_t len

Definition at line 46 of file uhci.h.

◆ next

struct uhci_td* next

Definition at line 40 of file uhci.h.

◆ obj_next

struct uhci_qh* obj_next

Definition at line 42 of file uhci.h.

◆ page_cache

struct usb_page_cache* page_cache

Definition at line 43 of file uhci.h.

◆ prev

struct uhci_td* prev

Definition at line 41 of file uhci.h.

◆ qh_e_next

volatile uint32_t qh_e_next

Definition at line 4 of file uhci.h.

◆ qh_h_next

volatile uint32_t qh_h_next

Definition at line 3 of file uhci.h.

◆ qh_self

uint32_t qh_self

Definition at line 13 of file uhci.h.

◆ td_buffer

volatile uint32_t td_buffer

Definition at line 36 of file uhci.h.

◆ td_next

volatile uint32_t td_next

Definition at line 4 of file uhci.h.

◆ td_self

uint32_t td_self

Definition at line 45 of file uhci.h.

◆ td_status

volatile uint32_t td_status

Definition at line 5 of file uhci.h.

◆ td_token

volatile uint32_t td_token

Definition at line 21 of file uhci.h.

Referenced by uhci_check_transfer_sub(), and uhci_device_isoc_open().

◆ uhci_iterate_hw_softc

usb_bus_mem_cb_t uhci_iterate_hw_softc

Definition at line 245 of file uhci.h.

Referenced by uhci_pci_attach(), and uhci_pci_detach().