37#define ATMEGA_MAX_DEVICES (USB_MIN_DEVICES + 1)
39#define ATMEGA_OTGTCON 0xF9
40#define ATMEGA_OTGTCON_VALUE(x) ((x) << 0)
41#define ATMEGA_OTGTCON_PAGE(x) ((x) << 5)
43#define ATMEGA_UEINT 0xF4
44#define ATMEGA_UEINT_MASK(n) (1 << (n))
46#define ATMEGA_UEBCHX 0xF3
47#define ATMEGA_UEBCLX 0xF2
48#define ATMEGA_UEDATX 0xF1
50#define ATMEGA_UEIENX 0xF0
51#define ATMEGA_UEIENX_TXINE (1 << 0)
52#define ATMEGA_UEIENX_STALLEDE (1 << 1)
53#define ATMEGA_UEIENX_RXOUTE (1 << 2)
54#define ATMEGA_UEIENX_RXSTPE (1 << 3)
55#define ATMEGA_UEIENX_NAKOUTE (1 << 4)
56#define ATMEGA_UEIENX_NAKINE (1 << 6)
57#define ATMEGA_UEIENX_FLERRE (1 << 7)
59#define ATMEGA_UESTA1X 0xEF
60#define ATMEGA_UESTA1X_CURRBK (3 << 0)
61#define ATMEGA_UESTA1X_CTRLDIR (1 << 2)
63#define ATMEGA_UESTA0X 0xEE
64#define ATMEGA_UESTA0X_NBUSYBK (3 << 0)
65#define ATMEGA_UESTA0X_DTSEQ (3 << 2)
66#define ATMEGA_UESTA0X_UNDERFI (1 << 5)
67#define ATMEGA_UESTA0X_OVERFI (1 << 6)
68#define ATMEGA_UESTA0X_CFGOK (1 << 7)
70#define ATMEGA_UECFG1X 0xED
71#define ATMEGA_UECFG1X_ALLOC (1 << 1)
72#define ATMEGA_UECFG1X_EPBK0 (0 << 2)
73#define ATMEGA_UECFG1X_EPBK1 (1 << 2)
74#define ATMEGA_UECFG1X_EPBK2 (2 << 2)
75#define ATMEGA_UECFG1X_EPBK3 (3 << 2)
76#define ATMEGA_UECFG1X_EPSIZE(n) ((n) << 4)
78#define ATMEGA_UECFG0X 0xEC
79#define ATMEGA_UECFG0X_EPDIR (1 << 0)
80#define ATMEGA_UECFG0X_EPTYPE0 (0 << 6)
81#define ATMEGA_UECFG0X_EPTYPE1 (1 << 6)
82#define ATMEGA_UECFG0X_EPTYPE2 (2 << 6)
83#define ATMEGA_UECFG0X_EPTYPE3 (3 << 6)
85#define ATMEGA_UECONX 0xEB
86#define ATMEGA_UECONX_EPEN (1 << 0)
87#define ATMEGA_UECONX_RSTDT (1 << 3)
88#define ATMEGA_UECONX_STALLRQC (1 << 4)
89#define ATMEGA_UECONX_STALLRQ (1 << 5)
91#define ATMEGA_UERST 0xEA
92#define ATMEGA_UERST_MASK(n) (1 << (n))
94#define ATMEGA_UENUM 0xE9
96#define ATMEGA_UEINTX 0xE8
97#define ATMEGA_UEINTX_TXINI (1 << 0)
98#define ATMEGA_UEINTX_STALLEDI (1 << 1)
99#define ATMEGA_UEINTX_RXOUTI (1 << 2)
100#define ATMEGA_UEINTX_RXSTPI (1 << 3)
101#define ATMEGA_UEINTX_NAKOUTI (1 << 4)
102#define ATMEGA_UEINTX_RWAL (1 << 5)
103#define ATMEGA_UEINTX_NAKINI (1 << 6)
104#define ATMEGA_UEINTX_FIFOCON (1 << 7)
106#define ATMEGA_UDMFN 0xE6
107#define ATMEGA_UDMFN_FNCERR (1 << 4)
109#define ATMEGA_UDFNUMH 0xE5
110#define ATMEGA_UDFNUMH_MASK 7
112#define ATMEGA_UDFNUML 0xE4
113#define ATMEGA_UDFNUML_MASK 0xFF
115#define ATMEGA_FRAME_MASK 0x7FF
117#define ATMEGA_UDADDR 0xE3
118#define ATMEGA_UDADDR_MASK 0x7F
119#define ATMEGA_UDADDR_ADDEN (1 << 7)
121#define ATMEGA_UDIEN 0xE2
122#define ATMEGA_UDINT_SUSPE (1 << 0)
123#define ATMEGA_UDINT_MSOFE (1 << 1)
124#define ATMEGA_UDINT_SOFE (1 << 2)
125#define ATMEGA_UDINT_EORSTE (1 << 3)
126#define ATMEGA_UDINT_WAKEUPE (1 << 4)
127#define ATMEGA_UDINT_EORSME (1 << 5)
128#define ATMEGA_UDINT_UPRSME (1 << 6)
130#define ATMEGA_UDINT 0xE1
131#define ATMEGA_UDINT_SUSPI (1 << 0)
132#define ATMEGA_UDINT_MSOFI (1 << 1)
133#define ATMEGA_UDINT_SOFI (1 << 2)
134#define ATMEGA_UDINT_EORSTI (1 << 3)
135#define ATMEGA_UDINT_WAKEUPI (1 << 4)
136#define ATMEGA_UDINT_EORSMI (1 << 5)
137#define ATMEGA_UDINT_UPRSMI (1 << 6)
139#define ATMEGA_UDCON 0xE0
140#define ATMEGA_UDCON_DETACH (1 << 0)
141#define ATMEGA_UDCON_RMWKUP (1 << 1)
142#define ATMEGA_UDCON_LSM (1 << 2)
143#define ATMEGA_UDCON_RSTCPU (1 << 3)
145#define ATMEGA_OTGINT 0xDF
147#define ATMEGA_OTGCON 0xDD
148#define ATMEGA_OTGCON_VBUSRQC (1 << 0)
149#define ATMEGA_OTGCON_VBUSREQ (1 << 1)
150#define ATMEGA_OTGCON_VBUSHWC (1 << 2)
151#define ATMEGA_OTGCON_SRPSEL (1 << 3)
152#define ATMEGA_OTGCON_SRPREQ (1 << 4)
153#define ATMEGA_OTGCON_HNPREQ (1 << 5)
155#define ATMEGA_USBINT 0xDA
156#define ATMEGA_USBINT_VBUSTI (1 << 0)
157#define ATMEGA_USBINT_IDI (1 << 1)
159#define ATMEGA_USBSTA 0xD9
160#define ATMEGA_USBSTA_VBUS (1 << 0)
161#define ATMEGA_USBSTA_ID (1 << 1)
163#define ATMEGA_USBCON 0xD8
164#define ATMEGA_USBCON_VBUSTE (1 << 0)
165#define ATMEGA_USBCON_IDE (1 << 1)
166#define ATMEGA_USBCON_OTGPADE (1 << 4)
167#define ATMEGA_USBCON_FRZCLK (1 << 5)
168#define ATMEGA_USBCON_USBE (1 << 7)
170#define ATMEGA_UHWCON 0xD7
171#define ATMEGA_UHWCON_UVREGE (1 << 0)
172#define ATMEGA_UHWCON_UVCONE (1 << 4)
173#define ATMEGA_UHWCON_UIDE (1 << 6)
174#define ATMEGA_UHWCON_UIMOD (1 << 7)
176#define ATMEGA_READ_1(sc, reg) \
177 bus_space_read_1((sc)->sc_io_tag, (sc)->sc_io_hdl, reg)
179#define ATMEGA_WRITE_1(sc, reg, data) \
180 bus_space_write_1((sc)->sc_io_tag, (sc)->sc_io_hdl, reg, data)
182#define ATMEGA_WRITE_MULTI_1(sc, reg, ptr, len) \
183 bus_space_write_multi_1((sc)->sc_io_tag, (sc)->sc_io_hdl, reg, ptr, len)
185#define ATMEGA_READ_MULTI_1(sc, reg, ptr, len) \
186 bus_space_read_multi_1((sc)->sc_io_tag, (sc)->sc_io_hdl, reg, ptr, len)
191#define ATMEGA_EP_MAX 7
struct atmegadci_config_desc __packed
void atmegadci_uninit(struct atmegadci_softc *sc)
uint8_t() atmegadci_cmd_t(struct atmegadci_td *td)
usb_error_t atmegadci_init(struct atmegadci_softc *sc)
#define ATMEGA_MAX_DEVICES
void() atmegadci_clocks_t(struct usb_bus *)
void atmegadci_interrupt(struct atmegadci_softc *sc)
struct usb_config_descriptor confd
struct usb_endpoint_descriptor endpd
struct usb_interface_descriptor ifcd
union atmegadci_hub_temp sc_hub_temp
bus_space_tag_t sc_io_tag
struct resource * sc_io_res
atmegadci_clocks_t * sc_clocks_on
bus_space_handle_t sc_io_hdl
struct atmegadci_flags sc_flags
atmegadci_clocks_t * sc_clocks_off
struct resource * sc_irq_res
struct usb_device * sc_devices[ATMEGA_MAX_DEVICES]
struct usb_page_cache * pc
struct atmegadci_td * td_next
uint8_t support_multi_buffer
struct usb_page_cache * pc
struct atmegadci_td * obj_next
struct usb_port_status ps