Lines Matching +full:usb +full:- +full:controller

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
33 /* Universal Host Controller Interface
38 /* The low level controller code for UHCI has been split into
62 #include <dev/usb/usb.h>
63 #include <dev/usb/usbdi.h>
65 #include <dev/usb/usb_core.h>
66 #include <dev/usb/usb_busdma.h>
67 #include <dev/usb/usb_process.h>
68 #include <dev/usb/usb_util.h>
69 #include <dev/usb/usb_debug.h>
71 #include <dev/usb/usb_controller.h>
72 #include <dev/usb/usb_bus.h>
73 #include <dev/usb/usb_pci.h>
74 #include <dev/usb/controller/uhci.h>
75 #include <dev/usb/controller/uhcireg.h>
106 return ("Intel 631XESB/632XESB/3100 USB controller USB-1"); in uhci_pci_match()
109 return ("Intel 631XESB/632XESB/3100 USB controller USB-2"); in uhci_pci_match()
112 return ("Intel 631XESB/632XESB/3100 USB controller USB-3"); in uhci_pci_match()
115 return ("Intel 631XESB/632XESB/3100 USB controller USB-4"); in uhci_pci_match()
118 return ("Intel 82371SB (PIIX3) USB controller"); in uhci_pci_match()
121 return ("Intel 82371AB/EB (PIIX4) USB controller"); in uhci_pci_match()
124 return ("Intel 82801AA (ICH) USB controller"); in uhci_pci_match()
127 return ("Intel 82801AB (ICH0) USB controller"); in uhci_pci_match()
130 return ("Intel 82801BA/BAM (ICH2) USB controller USB-A"); in uhci_pci_match()
133 return ("Intel 82801BA/BAM (ICH2) USB controller USB-B"); in uhci_pci_match()
136 return ("Intel 82801CA/CAM (ICH3) USB controller USB-A"); in uhci_pci_match()
139 return ("Intel 82801CA/CAM (ICH3) USB controller USB-B"); in uhci_pci_match()
142 return ("Intel 82801CA/CAM (ICH3) USB controller USB-C"); in uhci_pci_match()
145 return ("Intel 82801DB (ICH4) USB controller USB-A"); in uhci_pci_match()
148 return ("Intel 82801DB (ICH4) USB controller USB-B"); in uhci_pci_match()
151 return ("Intel 82801DB (ICH4) USB controller USB-C"); in uhci_pci_match()
154 return ("Intel 82801EB (ICH5) USB controller USB-A"); in uhci_pci_match()
157 return ("Intel 82801EB (ICH5) USB controller USB-B"); in uhci_pci_match()
160 return ("Intel 82801EB (ICH5) USB controller USB-C"); in uhci_pci_match()
163 return ("Intel 82801EB (ICH5) USB controller USB-D"); in uhci_pci_match()
166 return ("Intel 6300ESB USB controller USB-A"); in uhci_pci_match()
169 return ("Intel 6300ESB USB controller USB-B"); in uhci_pci_match()
172 return ("Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-A"); in uhci_pci_match()
175 return ("Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-B"); in uhci_pci_match()
178 return ("Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-C"); in uhci_pci_match()
181 return ("Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-D"); in uhci_pci_match()
184 return ("Intel 82801G (ICH7) USB controller USB-A"); in uhci_pci_match()
186 return ("Intel 82801G (ICH7) USB controller USB-B"); in uhci_pci_match()
188 return ("Intel 82801G (ICH7) USB controller USB-C"); in uhci_pci_match()
190 return ("Intel 82801G (ICH7) USB controller USB-D"); in uhci_pci_match()
193 return ("Intel 82801H (ICH8) USB controller USB-A"); in uhci_pci_match()
195 return ("Intel 82801H (ICH8) USB controller USB-B"); in uhci_pci_match()
197 return ("Intel 82801H (ICH8) USB controller USB-C"); in uhci_pci_match()
199 return ("Intel 82801H (ICH8) USB controller USB-D"); in uhci_pci_match()
201 return ("Intel 82801H (ICH8) USB controller USB-E"); in uhci_pci_match()
203 return ("Intel 82801I (ICH9) USB controller"); in uhci_pci_match()
205 return ("Intel 82801I (ICH9) USB controller"); in uhci_pci_match()
207 return ("Intel 82801I (ICH9) USB controller"); in uhci_pci_match()
209 return ("Intel 82801I (ICH9) USB controller"); in uhci_pci_match()
211 return ("Intel 82801I (ICH9) USB controller"); in uhci_pci_match()
213 return ("Intel 82801I (ICH9) USB controller"); in uhci_pci_match()
215 return ("Intel 82801JI (ICH10) USB controller USB-A"); in uhci_pci_match()
217 return ("Intel 82801JI (ICH10) USB controller USB-B"); in uhci_pci_match()
219 return ("Intel 82801JI (ICH10) USB controller USB-C"); in uhci_pci_match()
221 return ("Intel 82801JI (ICH10) USB controller USB-D"); in uhci_pci_match()
223 return ("Intel 82801JI (ICH10) USB controller USB-E"); in uhci_pci_match()
225 return ("Intel 82801JI (ICH10) USB controller USB-F"); in uhci_pci_match()
227 return ("Intel 82801JD (ICH10) USB controller USB-A"); in uhci_pci_match()
229 return ("Intel 82801JD (ICH10) USB controller USB-B"); in uhci_pci_match()
231 return ("Intel 82801JD (ICH10) USB controller USB-C"); in uhci_pci_match()
233 return ("Intel 82801JD (ICH10) USB controller USB-D"); in uhci_pci_match()
235 return ("Intel 82801JD (ICH10) USB controller USB-E"); in uhci_pci_match()
237 return ("Intel 82801JD (ICH10) USB controller USB-F"); in uhci_pci_match()
240 return ("Intel 82443MX USB controller"); in uhci_pci_match()
243 return ("Intel 82372FB/82468GX USB controller"); in uhci_pci_match()
246 return ("HP iLO Standard Virtual USB controller"); in uhci_pci_match()
249 return ("VIA 83C572 USB controller"); in uhci_pci_match()
252 return ("VMware USB controller"); in uhci_pci_match()
255 return ("Zhaoxin ZX-100/ZX-200/ZX-E USB controller"); in uhci_pci_match()
264 return ("UHCI (generic) USB controller"); in uhci_pci_match()
290 sc->sc_bus.parent = self; in uhci_pci_attach()
291 sc->sc_bus.devices = sc->sc_devices; in uhci_pci_attach()
292 sc->sc_bus.devices_max = UHCI_MAX_DEVICES; in uhci_pci_attach()
293 sc->sc_bus.dma_bits = 32; in uhci_pci_attach()
296 if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self), in uhci_pci_attach()
300 sc->sc_dev = self; in uhci_pci_attach()
305 sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_IOPORT, &rid, in uhci_pci_attach()
307 if (!sc->sc_io_res) { in uhci_pci_attach()
311 sc->sc_io_tag = rman_get_bustag(sc->sc_io_res); in uhci_pci_attach()
312 sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res); in uhci_pci_attach()
313 sc->sc_io_size = rman_get_size(sc->sc_io_res); in uhci_pci_attach()
316 bus_space_write_2(sc->sc_io_tag, sc->sc_io_hdl, UHCI_INTR, 0); in uhci_pci_attach()
319 sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid, in uhci_pci_attach()
321 if (sc->sc_irq_res == NULL) { in uhci_pci_attach()
325 sc->sc_bus.bdev = device_add_child(self, "usbus", DEVICE_UNIT_ANY); in uhci_pci_attach()
326 if (!sc->sc_bus.bdev) { in uhci_pci_attach()
327 device_printf(self, "Could not add USB device\n"); in uhci_pci_attach()
330 device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus); in uhci_pci_attach()
336 device_set_desc(sc->sc_bus.bdev, uhci_pci_match(self)); in uhci_pci_attach()
339 sprintf(sc->sc_vendor, "Intel"); in uhci_pci_attach()
342 sprintf(sc->sc_vendor, "HP"); in uhci_pci_attach()
345 sprintf(sc->sc_vendor, "VIA"); in uhci_pci_attach()
348 sprintf(sc->sc_vendor, "VMware"); in uhci_pci_attach()
351 sprintf(sc->sc_vendor, "Zhaoxin"); in uhci_pci_attach()
358 sprintf(sc->sc_vendor, "(0x%04x)", pci_get_vendor(self)); in uhci_pci_attach()
363 sc->sc_bus.usbrev = USB_REV_PRE_1_0; in uhci_pci_attach()
366 sc->sc_bus.usbrev = USB_REV_1_0; in uhci_pci_attach()
370 device_printf(self, "USB revision is unknown. Assuming v1.1.\n"); in uhci_pci_attach()
371 sc->sc_bus.usbrev = USB_REV_1_1; in uhci_pci_attach()
375 err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, in uhci_pci_attach()
376 NULL, (driver_intr_t *)uhci_interrupt, sc, &sc->sc_intr_hdl); in uhci_pci_attach()
380 sc->sc_intr_hdl = NULL; in uhci_pci_attach()
399 err = device_probe_and_attach(sc->sc_bus.bdev); in uhci_pci_attach()
402 device_printf(self, "USB init failed\n"); in uhci_pci_attach()
427 if (sc->sc_io_res) { in uhci_pci_detach()
428 USB_BUS_LOCK(&sc->sc_bus); in uhci_pci_detach()
430 /* stop the controller */ in uhci_pci_detach()
433 USB_BUS_UNLOCK(&sc->sc_bus); in uhci_pci_detach()
437 if (sc->sc_irq_res && sc->sc_intr_hdl) { in uhci_pci_detach()
438 int err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl); in uhci_pci_detach()
445 sc->sc_intr_hdl = NULL; in uhci_pci_detach()
447 if (sc->sc_irq_res) { in uhci_pci_detach()
448 bus_release_resource(self, SYS_RES_IRQ, 0, sc->sc_irq_res); in uhci_pci_detach()
449 sc->sc_irq_res = NULL; in uhci_pci_detach()
451 if (sc->sc_io_res) { in uhci_pci_detach()
453 sc->sc_io_res); in uhci_pci_detach()
454 sc->sc_io_res = NULL; in uhci_pci_detach()
456 usb_bus_mem_free_all(&sc->sc_bus, &uhci_iterate_hw_softc); in uhci_pci_detach()
481 MODULE_DEPEND(uhci, usb, 1, 1, 1);