PERFORCE change 144578 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Thu Jul 3 23:00:59 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=144578
Change 144578 by hselasky at hselasky_laptop001 on 2008/07/03 23:00:00
This is the second step making the old USB stack
compile together with the new USB stack. Restore
old USB stack. Note that the new USB stack now
resides under /sys/dev/usb2 .
Affected files ...
.. //depot/projects/usb/src/sys/amd64/conf/NOTES#11 integrate
.. //depot/projects/usb/src/sys/arm/at91/files.at91#5 integrate
.. //depot/projects/usb/src/sys/arm/at91/ohci_atmelarm.c#17 integrate
.. //depot/projects/usb/src/sys/arm/conf/KB920X#9 integrate
.. //depot/projects/usb/src/sys/conf/NOTES#15 integrate
.. //depot/projects/usb/src/sys/conf/files#29 integrate
.. //depot/projects/usb/src/sys/dev/ata/ata-usb.c#37 integrate
.. //depot/projects/usb/src/sys/dev/if_ndis/if_ndis_usb.c#8 integrate
.. //depot/projects/usb/src/sys/dev/sound/usb/uaudio.c#34 integrate
.. //depot/projects/usb/src/sys/dev/sound/usb/uaudio.h#7 integrate
.. //depot/projects/usb/src/sys/dev/sound/usb/uaudio_pcm.c#10 integrate
.. //depot/projects/usb/src/sys/dev/sound/usb/uaudioreg.h#8 integrate
.. //depot/projects/usb/src/sys/dev/usb/FILES#3 branch
.. //depot/projects/usb/src/sys/dev/usb/dsbr100io.h#7 integrate
.. //depot/projects/usb/src/sys/dev/usb/ehci.c#81 integrate
.. //depot/projects/usb/src/sys/dev/usb/ehci_pci.c#36 integrate
.. //depot/projects/usb/src/sys/dev/usb/ehcireg.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/ehcivar.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/hid.c#5 branch
.. //depot/projects/usb/src/sys/dev/usb/hid.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/if_aue.c#48 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_auereg.h#15 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_axe.c#51 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_axereg.h#19 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_cdce.c#51 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_cdcereg.h#18 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_cue.c#44 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_cuereg.h#14 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_kue.c#46 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_kuereg.h#13 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_rue.c#43 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_ruereg.h#14 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_rum.c#34 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_rumreg.h#6 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_rumvar.h#8 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_udav.c#47 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_udavreg.h#12 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_ural.c#60 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_uralreg.h#17 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_uralvar.h#23 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_zyd.c#42 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_zydfw.h#7 integrate
.. //depot/projects/usb/src/sys/dev/usb/if_zydreg.h#17 integrate
.. //depot/projects/usb/src/sys/dev/usb/kue_fw.h#5 branch
.. //depot/projects/usb/src/sys/dev/usb/ohci.c#65 integrate
.. //depot/projects/usb/src/sys/dev/usb/ohci_pci.c#31 integrate
.. //depot/projects/usb/src/sys/dev/usb/ohcireg.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/ohcivar.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/rio500_usb.h#8 integrate
.. //depot/projects/usb/src/sys/dev/usb/rt2573_ucode.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/sl811hs.c#8 integrate
.. //depot/projects/usb/src/sys/dev/usb/sl811hsreg.h#4 integrate
.. //depot/projects/usb/src/sys/dev/usb/sl811hsvar.h#6 integrate
.. //depot/projects/usb/src/sys/dev/usb/slhci_pccard.c#7 integrate
.. //depot/projects/usb/src/sys/dev/usb/uark.c#24 integrate
.. //depot/projects/usb/src/sys/dev/usb/ubsa.c#42 integrate
.. //depot/projects/usb/src/sys/dev/usb/ubser.c#31 integrate
.. //depot/projects/usb/src/sys/dev/usb/ubser.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/uchcom.c#24 integrate
.. //depot/projects/usb/src/sys/dev/usb/ucom.c#31 integrate
.. //depot/projects/usb/src/sys/dev/usb/ucomvar.h#16 integrate
.. //depot/projects/usb/src/sys/dev/usb/ucycom.c#35 integrate
.. //depot/projects/usb/src/sys/dev/usb/udbp.c#27 integrate
.. //depot/projects/usb/src/sys/dev/usb/udbp.h#9 integrate
.. //depot/projects/usb/src/sys/dev/usb/ufm.c#20 integrate
.. //depot/projects/usb/src/sys/dev/usb/ufoma.c#41 integrate
.. //depot/projects/usb/src/sys/dev/usb/uftdi.c#38 integrate
.. //depot/projects/usb/src/sys/dev/usb/uftdireg.h#8 integrate
.. //depot/projects/usb/src/sys/dev/usb/ugen.c#43 integrate
.. //depot/projects/usb/src/sys/dev/usb/ugraphire_rdesc.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/uhci.c#63 integrate
.. //depot/projects/usb/src/sys/dev/usb/uhci_pci.c#33 integrate
.. //depot/projects/usb/src/sys/dev/usb/uhcireg.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/uhcivar.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/uhid.c#33 integrate
.. //depot/projects/usb/src/sys/dev/usb/uhub.c#34 integrate
.. //depot/projects/usb/src/sys/dev/usb/uipaq.c#26 integrate
.. //depot/projects/usb/src/sys/dev/usb/ukbd.c#44 integrate
.. //depot/projects/usb/src/sys/dev/usb/ulpt.c#45 integrate
.. //depot/projects/usb/src/sys/dev/usb/umass.c#49 integrate
.. //depot/projects/usb/src/sys/dev/usb/umct.c#33 integrate
.. //depot/projects/usb/src/sys/dev/usb/umodem.c#43 integrate
.. //depot/projects/usb/src/sys/dev/usb/ums.c#45 integrate
.. //depot/projects/usb/src/sys/dev/usb/uplcom.c#44 integrate
.. //depot/projects/usb/src/sys/dev/usb/urio.c#27 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb.c#36 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb.h#33 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb_ethersubr.c#6 branch
.. //depot/projects/usb/src/sys/dev/usb/usb_ethersubr.h#5 branch
.. //depot/projects/usb/src/sys/dev/usb/usb_if.m#5 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb_mem.c#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usb_mem.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usb_port.h#27 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb_quirks.c#18 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb_quirks.h#8 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#107 integrate
.. //depot/projects/usb/src/sys/dev/usb/usbcdc.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usbdevs#20 integrate
.. //depot/projects/usb/src/sys/dev/usb/usbdi.c#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usbdi.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usbdi_util.c#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usbdi_util.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usbdivar.h#3 branch
.. //depot/projects/usb/src/sys/dev/usb/usbhid.h#5 integrate
.. //depot/projects/usb/src/sys/dev/usb/uscanner.c#30 integrate
.. //depot/projects/usb/src/sys/dev/usb/uslcom.c#4 integrate
.. //depot/projects/usb/src/sys/dev/usb/uvisor.c#37 integrate
.. //depot/projects/usb/src/sys/dev/usb/uvscom.c#40 integrate
.. //depot/projects/usb/src/sys/dev/usb/uxb360gp_rdesc.h#3 branch
.. //depot/projects/usb/src/sys/modules/Makefile#16 integrate
.. //depot/projects/usb/src/sys/modules/ata/atausb/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/aue/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/axe/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/cdce/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/cue/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/if_ndis/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/kue/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/ndis/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/netgraph/bluetooth/ubt/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/netgraph/bluetooth/ubtbcmfw/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/rue/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/rum/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/slhci/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/sound/driver/uaudio/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/uark/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/ubsa/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/ubser/Makefile#5 integrate
.. //depot/projects/usb/src/sys/modules/uchcom/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/ucom/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/ucycom/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/udav/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/udbp/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/ufm/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/ufoma/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/uftdi/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/ugen/Makefile#7 integrate
.. //depot/projects/usb/src/sys/modules/uhid/Makefile#5 integrate
.. //depot/projects/usb/src/sys/modules/uipaq/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/ukbd/Makefile#7 integrate
.. //depot/projects/usb/src/sys/modules/ulpt/Makefile#5 integrate
.. //depot/projects/usb/src/sys/modules/umass/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/umct/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/umodem/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/ums/Makefile#5 integrate
.. //depot/projects/usb/src/sys/modules/uplcom/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/ural/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/urio/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/usb/Makefile#10 integrate
.. //depot/projects/usb/src/sys/modules/uscanner/Makefile#4 integrate
.. //depot/projects/usb/src/sys/modules/uslcom/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/uvisor/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/uvscom/Makefile#3 integrate
.. //depot/projects/usb/src/sys/modules/zyd/Makefile#3 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubt/TODO#3 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#28 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_var.h#11 integrate
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c#23 integrate
.. //depot/projects/usb/src/sys/pc98/conf/NOTES#9 integrate
Differences ...
==== //depot/projects/usb/src/sys/amd64/conf/NOTES#11 (text+ko) ====
@@ -306,6 +306,7 @@
# nfe: nVidia nForce MCP on-board Ethernet Networking (BSD open source)
# nve: nVidia nForce MCP on-board Ethernet Networking
# ral: Ralink Technology IEEE 802.11 wireless adapter
+# ural: Ralink Technology RT2500USB IEEE 802.11 wireless adapter
# wpi: Intel 3945ABG Wireless LAN controller
device ed
==== //depot/projects/usb/src/sys/arm/at91/files.at91#5 (text) ====
@@ -12,7 +12,7 @@
dependency "spibus_if.h"
arm/at91/at91_tc.c optional at91_tc
arm/at91/at91_twi.c optional at91_twi
-arm/at91/at91_udp.c optional at9100_dci
+arm/at91/at91_udp.c optional at91_udp
arm/at91/if_ate.c optional ate
arm/at91/ohci_atmelarm.c optional ohci
arm/at91/uart_bus_at91usart.c optional uart
==== //depot/projects/usb/src/sys/arm/at91/ohci_atmelarm.c#17 (text) ====
@@ -25,31 +25,36 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/sys/arm/at91/ohci_atmelarm.c,v 1.4 2007/10/29 21:01:50 imp Exp $");
-#include "opt_bus.h"
-
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
-#include <sys/endian.h>
+#include <sys/lock.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/bus.h>
#include <sys/queue.h>
-#include <sys/lock.h>
-#include <sys/malloc.h>
+#include <machine/bus.h>
+#include <sys/rman.h>
+#include <machine/resource.h>
-#include <dev/usb/usb_port.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_subr.h>
-#include <dev/usb/ohci.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usbdivar.h>
+#include <dev/usb/usb_mem.h>
+
+#include <dev/usb/ohcireg.h>
+#include <dev/usb/ohcivar.h>
#include <arm/at91/at91_pmcvar.h>
-#define MEM_RID 0
+#define MEM_RID 0
-static device_probe_t ohci_atmelarm_probe;
-static device_attach_t ohci_atmelarm_attach;
-static device_detach_t ohci_atmelarm_detach;
+static int ohci_atmelarm_attach(device_t dev);
+static int ohci_atmelarm_detach(device_t dev);
-struct at91_ohci_softc {
- struct ohci_softc sc_ohci; /* must be first */
+struct at91_ohci_softc
+{
+ struct ohci_softc sc_ohci;
struct at91_pmc_clock *iclk;
struct at91_pmc_clock *fclk;
};
@@ -57,7 +62,7 @@
static int
ohci_atmelarm_probe(device_t dev)
{
- device_set_desc(dev, "AT91 integrated OHCI controller");
+ device_set_desc(dev, "AT91 integrated ohci controller");
return (BUS_PROBE_DEFAULT);
}
@@ -68,99 +73,96 @@
int err;
int rid;
- if (sc == NULL) {
- return (ENXIO);
- }
- /* get all DMA memory */
-
- if (usbd_bus_mem_alloc_all(&(sc->sc_ohci.sc_bus),
- device_get_dma_tag(dev), &ohci_iterate_hw_softc)) {
- return ENOMEM;
- }
+
sc->iclk = at91_pmc_clock_ref("ohci_clk");
sc->fclk = at91_pmc_clock_ref("uhpck");
- sc->sc_ohci.sc_dev = dev;
-
rid = MEM_RID;
- sc->sc_ohci.sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &rid, RF_ACTIVE);
-
- if (!(sc->sc_ohci.sc_io_res)) {
+ sc->sc_ohci.io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+ RF_ACTIVE);
+ if (sc->sc_ohci.io_res == NULL) {
err = ENOMEM;
goto error;
}
- sc->sc_ohci.sc_io_tag = rman_get_bustag(sc->sc_ohci.sc_io_res);
- sc->sc_ohci.sc_io_hdl = rman_get_bushandle(sc->sc_ohci.sc_io_res);
- sc->sc_ohci.sc_io_size = rman_get_size(sc->sc_ohci.sc_io_res);
+ sc->sc_ohci.iot = rman_get_bustag(sc->sc_ohci.io_res);
+ sc->sc_ohci.ioh = rman_get_bushandle(sc->sc_ohci.io_res);
rid = 0;
- sc->sc_ohci.sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+ sc->sc_ohci.irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
RF_ACTIVE);
- if (!(sc->sc_ohci.sc_irq_res)) {
+ if (sc->sc_ohci.irq_res == NULL) {
+ err = ENOMEM;
goto error;
}
sc->sc_ohci.sc_bus.bdev = device_add_child(dev, "usb", -1);
- if (!(sc->sc_ohci.sc_bus.bdev)) {
+ if (sc->sc_ohci.sc_bus.bdev == NULL) {
+ err = ENOMEM;
goto error;
}
- device_set_ivars(sc->sc_ohci.sc_bus.bdev, &(sc->sc_ohci.sc_bus));
- device_set_softc(sc->sc_ohci.sc_bus.bdev, &(sc->sc_ohci.sc_bus));
+ device_set_ivars(sc->sc_ohci.sc_bus.bdev, &sc->sc_ohci.sc_bus);
- strlcpy(sc->sc_ohci.sc_vendor, "Atmel", sizeof(sc->sc_ohci.sc_vendor));
+ /* Allocate a parent dma tag for DMA maps */
+ err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ BUS_SPACE_MAXSIZE_32BIT, USB_DMA_NSEG, BUS_SPACE_MAXSIZE_32BIT, 0,
+ NULL, NULL, &sc->sc_ohci.sc_bus.parent_dmatag);
+ if (err) {
+ device_printf(dev, "Could not allocate parent DMA tag (%d)\n",
+ err);
+ err = ENXIO;
+ goto error;
+ }
- err = usbd_config_td_setup(&(sc->sc_ohci.sc_config_td), sc,
- &(sc->sc_ohci.sc_bus.mtx), NULL, 0, 4);
+ /* Allocate a dma tag for transfer buffers */
+ err = bus_dma_tag_create(sc->sc_ohci.sc_bus.parent_dmatag, 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ BUS_SPACE_MAXSIZE_32BIT, USB_DMA_NSEG, BUS_SPACE_MAXSIZE_32BIT, 0,
+ busdma_lock_mutex, &Giant, &sc->sc_ohci.sc_bus.buffer_dmatag);
if (err) {
- device_printf(dev, "could not setup config thread!\n");
+ device_printf(dev, "Could not allocate transfer tag (%d)\n",
+ err);
+ err = ENXIO;
goto error;
}
-#if (__FreeBSD_version >= 700031)
- err = bus_setup_intr(dev, sc->sc_ohci.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
- NULL, (void *)ohci_interrupt, sc, &(sc->sc_ohci.sc_intr_hdl));
-#else
- err = bus_setup_intr(dev, sc->sc_ohci.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
- (void *)ohci_interrupt, sc, &(sc->sc_ohci.sc_intr_hdl));
-#endif
+
+ err = bus_setup_intr(dev, sc->sc_ohci.irq_res, INTR_TYPE_BIO, NULL,
+ ohci_intr, sc, &sc->sc_ohci.ih);
if (err) {
- sc->sc_ohci.sc_intr_hdl = NULL;
+ err = ENXIO;
goto error;
}
+ strlcpy(sc->sc_ohci.sc_vendor, "Atmel", sizeof(sc->sc_ohci.sc_vendor));
+
/*
* turn on the clocks from the AT91's point of view. Keep the unit in reset.
*/
at91_pmc_clock_enable(sc->iclk);
at91_pmc_clock_enable(sc->fclk);
- bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl,
- OHCI_CONTROL, 0);
+ bus_space_write_4(sc->sc_ohci.iot, sc->sc_ohci.ioh, OHCI_CONTROL, 0);
- err = ohci_init(&(sc->sc_ohci));
+ err = ohci_init(&sc->sc_ohci);
if (!err) {
+ sc->sc_ohci.sc_flags |= OHCI_SCFLG_DONEINIT;
err = device_probe_and_attach(sc->sc_ohci.sc_bus.bdev);
}
+
+error:;
if (err) {
- goto error;
+ ohci_atmelarm_detach(dev);
+ return (err);
}
- return (0);
-
-error:
- ohci_atmelarm_detach(dev);
- return (ENXIO);
+ return (err);
}
static int
ohci_atmelarm_detach(device_t dev)
{
struct at91_ohci_softc *sc = device_get_softc(dev);
- int err;
- if (sc->sc_ohci.sc_bus.bdev) {
- device_detach(sc->sc_ohci.sc_bus.bdev);
- device_delete_child(dev, sc->sc_ohci.sc_bus.bdev);
- sc->sc_ohci.sc_bus.bdev = NULL;
+ if (sc->sc_ohci.sc_flags & OHCI_SCFLG_DONEINIT) {
+ ohci_detach(&sc->sc_ohci, 0);
+ sc->sc_ohci.sc_flags &= ~OHCI_SCFLG_DONEINIT;
}
- /* during module unload there are lots of children leftover */
- device_delete_all_children(dev);
/*
* Put the controller into reset, then disable clocks and do
@@ -171,36 +173,36 @@
* clocks after we disable them, so the system could, in
* theory, reuse them.
*/
- bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl,
- OHCI_CONTROL, 0);
-
+ bus_space_write_4(sc->sc_ohci.iot, sc->sc_ohci.ioh, OHCI_CONTROL, 0);
at91_pmc_clock_disable(sc->fclk);
at91_pmc_clock_disable(sc->iclk);
at91_pmc_clock_deref(sc->fclk);
at91_pmc_clock_deref(sc->iclk);
- if (sc->sc_ohci.sc_irq_res && sc->sc_ohci.sc_intr_hdl) {
- /*
- * only call ohci_detach() after ohci_init()
- */
- ohci_detach(&(sc->sc_ohci));
+ if (sc->sc_ohci.ih) {
+ bus_teardown_intr(dev, sc->sc_ohci.irq_res, sc->sc_ohci.ih);
+ sc->sc_ohci.ih = NULL;
+ }
+
+ if (sc->sc_ohci.sc_bus.parent_dmatag != NULL)
+ bus_dma_tag_destroy(sc->sc_ohci.sc_bus.parent_dmatag);
+ if (sc->sc_ohci.sc_bus.buffer_dmatag != NULL)
+ bus_dma_tag_destroy(sc->sc_ohci.sc_bus.buffer_dmatag);
- err = bus_teardown_intr(dev, sc->sc_ohci.sc_irq_res, sc->sc_ohci.sc_intr_hdl);
- sc->sc_ohci.sc_intr_hdl = NULL;
+ if (sc->sc_ohci.sc_bus.bdev) {
+ device_delete_child(dev, sc->sc_ohci.sc_bus.bdev);
+ sc->sc_ohci.sc_bus.bdev = NULL;
}
- if (sc->sc_ohci.sc_irq_res) {
- bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_ohci.sc_irq_res);
- sc->sc_ohci.sc_irq_res = NULL;
+ if (sc->sc_ohci.irq_res) {
+ bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_ohci.irq_res);
+ sc->sc_ohci.irq_res = NULL;
}
- if (sc->sc_ohci.sc_io_res) {
- bus_release_resource(dev, SYS_RES_MEMORY, MEM_RID,
- sc->sc_ohci.sc_io_res);
- sc->sc_ohci.sc_io_res = NULL;
+ if (sc->sc_ohci.io_res) {
+ bus_release_resource(dev, SYS_RES_MEMORY, MEM_RID, sc->sc_ohci.io_res);
+ sc->sc_ohci.io_res = NULL;
+ sc->sc_ohci.iot = 0;
+ sc->sc_ohci.ioh = 0;
}
- usbd_config_td_unsetup(&(sc->sc_ohci.sc_config_td));
-
- usbd_bus_mem_free_all(&(sc->sc_ohci.sc_bus), &ohci_iterate_hw_softc);
-
return (0);
}
==== //depot/projects/usb/src/sys/arm/conf/KB920X#9 (text) ====
@@ -93,8 +93,7 @@
device bpf
# USB support
-device ohci # OHCI localbus->USB interface (Host Mode)
-device at9100_dci # ADCI localbus->USB interface (Device Mode)
+device ohci # OHCI localbus->USB interface
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device ugen # Generic
==== //depot/projects/usb/src/sys/conf/NOTES#15 (text+ko) ====
@@ -2409,8 +2409,6 @@
device ufm
# Generic USB device driver
device ugen
-# Generic USB serial driver
-device ugensa
# Human Interface Device (anything with buttons and dials)
device uhid
# USB keyboard
@@ -2442,8 +2440,6 @@
device uftdi
# USB support for some Windows CE based serial communication.
device uipaq
-# USB support for MOSCHIP serial port adapters
-device umoscom
# USB support for Prolific PL-2303 serial adapters
device uplcom
# USB support for Silicon Laboratories CP2101/CP2102 based USB serial adapters
==== //depot/projects/usb/src/sys/conf/files#29 (text+ko) ====
@@ -1265,9 +1265,9 @@
dev/ubsec/ubsec.c optional ubsec
#
# USB support
-dev/usb/at9100_dci.c optional at9100_dci
dev/usb/ehci.c optional ehci
dev/usb/ehci_pci.c optional ehci pci
+dev/usb/hid.c optional usb
dev/usb/if_aue.c optional aue
dev/usb/if_axe.c optional axe
dev/usb/if_cdce.c optional cdce
@@ -1288,11 +1288,10 @@
dev/usb/ucom.c optional ucom
dev/usb/ucycom.c optional ucycom
dev/usb/udbp.c optional udbp
+dev/usb/ufoma.c optional ufoma
dev/usb/ufm.c optional ufm
-dev/usb/ufoma.c optional ufoma
dev/usb/uftdi.c optional uftdi
dev/usb/ugen.c optional ugen
-dev/usb/ugensa.c optional ugensa
dev/usb/uhci.c optional uhci
dev/usb/uhci_pci.c optional uhci pci
dev/usb/uhid.c optional uhid
@@ -1303,31 +1302,21 @@
dev/usb/umass.c optional umass
dev/usb/umct.c optional umct
dev/usb/umodem.c optional umodem
-dev/usb/umoscom.c optional umoscom
dev/usb/ums.c optional ums
dev/usb/uplcom.c optional uplcom
dev/usb/urio.c optional urio
dev/usb/usb.c optional usb
-dev/usb/usb_cdev.c optional usb
-dev/usb/usb_hid.c optional usb
+dev/usb/usb_ethersubr.c optional usb
dev/usb/usb_if.m optional usb
+dev/usb/usb_mem.c optional usb
dev/usb/usb_quirks.c optional usb
-dev/usb/usb_requests.c optional usb
dev/usb/usb_subr.c optional usb
-dev/usb/usb_template.c optional usb
-dev/usb/usb_template_cdce.c optional usb
-dev/usb/usb_template_msc.c optional usb
-dev/usb/usb_transfer.c optional usb
-dev/usb/usb_compat_linux.c optional usb
+dev/usb/usbdi.c optional usb
+dev/usb/usbdi_util.c optional usb
dev/usb/uscanner.c optional uscanner
dev/usb/uslcom.c optional uslcom
-dev/usb/uss820_dci.c optional uss820_dci
-dev/usb/uss820_dci_pccard.c optional uss820_dci pccard
-dev/usb/ustorage_fs.c optional ustorage_fs
dev/usb/uvisor.c optional uvisor
dev/usb/uvscom.c optional uvscom
-# End of USB support
-#
dev/utopia/idtphy.c optional utopia
dev/utopia/suni.c optional utopia
dev/utopia/utopia.c optional utopia
==== //depot/projects/usb/src/sys/dev/ata/ata-usb.c#37 (text) ====
@@ -2,9 +2,6 @@
* Copyright (c) 2006 - 2008 Søren Schmidt <sos at FreeBSD.org>
* All rights reserved.
*
- * Copyright (c) 2006 Hans Petter Selasky
- * All rights reserved.
- *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -32,1075 +29,946 @@
#include "opt_ata.h"
#include <sys/param.h>
+#include <sys/conf.h>
#include <sys/systm.h>
#include <sys/kernel.h>
+#include <sys/mutex.h>
+#include <sys/ata.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
#include <sys/malloc.h>
-#include <sys/ata.h>
-#include <sys/bio.h>
+#include <sys/module.h>
#include <sys/sema.h>
+#include <sys/taskqueue.h>
#include <vm/uma.h>
-
+#include <machine/resource.h>
+#include <machine/bus.h>
+#include <sys/rman.h>
#include <dev/usb/usb_port.h>
#include <dev/usb/usb.h>
-#include <dev/usb/usb_subr.h>
-#include <dev/usb/usb_quirks.h>
-
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usbdi_util.h>
+#include <dev/usb/usbdivar.h>
#include <dev/ata/ata-all.h>
#include <ata_if.h>
-#define ATAUSB_BULK_SIZE (1<<17)
-
/* Command Block Wrapper */
struct bbb_cbw {
- uint8_t signature[4];
-#define CBWSIGNATURE 0x43425355
+ u_int8_t signature[4];
+#define CBWSIGNATURE 0x43425355
- uint8_t tag[4];
- uint8_t transfer_length[4];
- uint8_t flags;
-#define CBWFLAGS_OUT 0x00
-#define CBWFLAGS_IN 0x80
+ u_int8_t tag[4];
+ u_int8_t transfer_length[4];
+ u_int8_t flags;
+#define CBWFLAGS_OUT 0x00
+#define CBWFLAGS_IN 0x80
- uint8_t lun;
- uint8_t length;
-#define CBWCDBLENGTH 16
+ u_int8_t lun;
+ u_int8_t length;
+#define CBWCDBLENGTH 16
- uint8_t cdb[CBWCDBLENGTH];
-} __packed;
+ u_int8_t cdb[CBWCDBLENGTH];
+};
/* Command Status Wrapper */
struct bbb_csw {
- uint8_t signature[4];
-#define CSWSIGNATURE 0x53425355
+ u_int8_t signature[4];
+#define CSWSIGNATURE 0x53425355
- uint8_t tag[4];
- uint8_t residue[4];
- uint8_t status;
-#define CSWSTATUS_GOOD 0x0
-#define CSWSTATUS_FAILED 0x1
-#define CSWSTATUS_PHASE 0x2
-} __packed;
+ u_int8_t tag[4];
+ u_int8_t residue[4];
+ u_int8_t status;
+#define CSWSTATUS_GOOD 0x0
+#define CSWSTATUS_FAILED 0x1
+#define CSWSTATUS_PHASE 0x2
+};
/* USB-ATA 'controller' softc */
struct atausb_softc {
- struct bbb_cbw cbw;
- struct bbb_csw csw;
- struct mtx locked_mtx;
+ device_t dev; /* base device */
+ usbd_interface_handle iface; /* interface */
+ int ifaceno; /* interface number */
+ u_int8_t bulkin; /* endpoint address's */
+ u_int8_t bulkout;
+ u_int8_t bulkirq;
+ usbd_pipe_handle bulkin_pipe; /* pipe handle's */
+ usbd_pipe_handle bulkout_pipe;
+ usbd_pipe_handle bulkirq_pipe;
+ int maxlun;
+ int timeout;
+ struct ata_request *ata_request;
+ usb_device_request_t usb_request;
+ struct bbb_cbw cbw;
+ struct bbb_csw csw;
- struct ata_channel *locked_ch;
- struct ata_channel *restart_ch;
- struct ata_request *ata_request;
+#define ATAUSB_T_BBB_CBW 0
+#define ATAUSB_T_BBB_DATA 1
+#define ATAUSB_T_BBB_DCLEAR 2
+#define ATAUSB_T_BBB_CSW1 3
+#define ATAUSB_T_BBB_CSW2 4
+#define ATAUSB_T_BBB_SCLEAR 5
+#define ATAUSB_T_BBB_RESET1 6
+#define ATAUSB_T_BBB_RESET2 7
+#define ATAUSB_T_BBB_RESET3 8
+#define ATAUSB_T_MAX 9
+ usbd_xfer_handle transfer[ATAUSB_T_MAX];
-#define ATAUSB_T_BBB_RESET1 0
-#define ATAUSB_T_BBB_RESET2 1
-#define ATAUSB_T_BBB_RESET3 2
-#define ATAUSB_T_BBB_COMMAND 3
-#define ATAUSB_T_BBB_DATA_READ 4
-#define ATAUSB_T_BBB_DATA_RD_CS 5
-#define ATAUSB_T_BBB_DATA_WRITE 6
-#define ATAUSB_T_BBB_DATA_WR_CS 7
-#define ATAUSB_T_BBB_STATUS 8
-#define ATAUSB_T_BBB_MAX 9
+ int state;
+#define ATAUSB_S_ATTACH 0
+#define ATAUSB_S_IDLE 1
+#define ATAUSB_S_BBB_COMMAND 2
+#define ATAUSB_S_BBB_DATA 3
+#define ATAUSB_S_BBB_DCLEAR 4
+#define ATAUSB_S_BBB_STATUS1 5
+#define ATAUSB_S_BBB_SCLEAR 6
+#define ATAUSB_S_BBB_STATUS2 7
+#define ATAUSB_S_BBB_RESET1 8
+#define ATAUSB_S_BBB_RESET2 9
+#define ATAUSB_S_BBB_RESET3 10
+#define ATAUSB_S_DETACH 11
-#define ATAUSB_T_MAX ATAUSB_T_BBB_MAX
-
- struct usbd_xfer *xfer[ATAUSB_T_MAX];
- caddr_t ata_data;
- device_t dev;
-
- uint32_t timeout;
- uint32_t ata_donecount;
- uint32_t ata_bytecount;
-
- uint8_t last_xfer_no;
- uint8_t usb_speed;
- uint8_t intr_stalled;
- uint8_t maxlun;
- uint8_t iface_no;
- uint8_t status_try;
+ struct mtx locked_mtx;
+ struct ata_channel *locked_ch;
+ struct ata_channel *restart_ch;
};
-static const int atausbdebug = 0;
+static int atausbdebug = 0;
-/* prototypes */
-
-static device_probe_t atausb_probe;
-static device_attach_t atausb_attach;
-static device_detach_t atausb_detach;
-
-static usbd_callback_t atausb_t_bbb_reset1_callback;
-static usbd_callback_t atausb_t_bbb_reset2_callback;
-static usbd_callback_t atausb_t_bbb_reset3_callback;
-static usbd_callback_t atausb_t_bbb_command_callback;
-static usbd_callback_t atausb_t_bbb_data_read_callback;
-static usbd_callback_t atausb_t_bbb_data_rd_cs_callback;
-static usbd_callback_t atausb_t_bbb_data_write_callback;
-static usbd_callback_t atausb_t_bbb_data_wr_cs_callback;
-static usbd_callback_t atausb_t_bbb_status_callback;
-static usbd_callback_t atausb_tr_error;
+/* prototypes*/
+static usbd_status atausb_start(struct atausb_softc *sc, usbd_pipe_handle pipe, void *buffer, int buflen, int flags, usbd_xfer_handle xfer);
+static usbd_status atausb_ctl_start(struct atausb_softc *sc, usbd_device_handle udev, usb_device_request_t *req, void *buffer, int buflen, int flags, usbd_xfer_handle xfer);
+static void atausb_clear_stall(struct atausb_softc *sc, u_int8_t endpt, usbd_pipe_handle pipe, int state, usbd_xfer_handle xfer);
+static void atausb_bbb_reset(struct atausb_softc *sc);
+static int atausb_bbb_start(struct ata_request *request);
+static void atausb_bbb_finish(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status err);
+int ata_usbchannel_begin_transaction(struct ata_request *request);
+int ata_usbchannel_end_transaction(struct ata_request *request);
-static void atausb_cancel_request(struct atausb_softc *sc);
-static void atausb_transfer_start(struct atausb_softc *sc, uint8_t xfer_no);
-static void atausb_t_bbb_data_clear_stall_callback(struct usbd_xfer *xfer, uint8_t next_xfer, uint8_t stall_xfer);
-static int ata_usbchannel_begin_transaction(struct ata_request *request);
-static int ata_usbchannel_end_transaction(struct ata_request *request);
-static device_probe_t ata_usbchannel_probe;
-static device_attach_t ata_usbchannel_attach;
-static device_detach_t ata_usbchannel_detach;
-
-static ata_setmode_t ata_usbchannel_setmode;
-static ata_locking_t ata_usbchannel_locking;
-
/*
* USB frontend part
*/
-
-struct usbd_config atausb_config[ATAUSB_T_BBB_MAX] = {
-
- [ATAUSB_T_BBB_RESET1] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
- .mh.flags = {},
- .mh.callback = &atausb_t_bbb_reset1_callback,
- .mh.timeout = 5000, /* 5 seconds */
- .mh.interval = 500, /* 500 milliseconds */
- },
-
- [ATAUSB_T_BBB_RESET2] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
- .mh.flags = {},
- .mh.callback = &atausb_t_bbb_reset2_callback,
- .mh.timeout = 5000, /* 5 seconds */
- .mh.interval = 50, /* 50 milliseconds */
- },
-
- [ATAUSB_T_BBB_RESET3] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
- .mh.flags = {},
- .mh.callback = &atausb_t_bbb_reset3_callback,
- .mh.timeout = 5000, /* 5 seconds */
- .mh.interval = 50, /* 50 milliseconds */
- },
-
- [ATAUSB_T_BBB_COMMAND] = {
- .type = UE_BULK,
- .endpoint = UE_ADDR_ANY,
- .direction = UE_DIR_OUT,
- .mh.bufsize = sizeof(struct bbb_cbw),
- .mh.flags = {},
- .mh.callback = &atausb_t_bbb_command_callback,
- .mh.timeout = 5000, /* 5 seconds */
- },
-
- [ATAUSB_T_BBB_DATA_READ] = {
- .type = UE_BULK,
- .endpoint = UE_ADDR_ANY,
- .direction = UE_DIR_IN,
- .mh.bufsize = ATAUSB_BULK_SIZE,
- .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
- .mh.callback = &atausb_t_bbb_data_read_callback,
- .mh.timeout = 0, /* overwritten later */
- },
-
- [ATAUSB_T_BBB_DATA_RD_CS] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
- .mh.flags = {},
- .mh.callback = &atausb_t_bbb_data_rd_cs_callback,
- .mh.timeout = 5000, /* 5 seconds */
- },
-
- [ATAUSB_T_BBB_DATA_WRITE] = {
- .type = UE_BULK,
- .endpoint = UE_ADDR_ANY,
- .direction = UE_DIR_OUT,
- .mh.bufsize = ATAUSB_BULK_SIZE,
- .mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
- .mh.callback = &atausb_t_bbb_data_write_callback,
- .mh.timeout = 0, /* overwritten later */
- },
-
- [ATAUSB_T_BBB_DATA_WR_CS] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(usb_device_request_t),
- .mh.flags = {},
- .mh.callback = &atausb_t_bbb_data_wr_cs_callback,
- .mh.timeout = 5000, /* 5 seconds */
- },
-
- [ATAUSB_T_BBB_STATUS] = {
- .type = UE_BULK,
- .endpoint = UE_ADDR_ANY,
- .direction = UE_DIR_IN,
- .mh.bufsize = sizeof(struct bbb_csw),
- .mh.flags = {.short_xfer_ok = 1,},
- .mh.callback = &atausb_t_bbb_status_callback,
- .mh.timeout = 5000, /* ms */
- },
-};
-
-static devclass_t atausb_devclass;
-
-static device_method_t atausb_methods[] = {
- DEVMETHOD(device_probe, atausb_probe),
- DEVMETHOD(device_attach, atausb_attach),
- DEVMETHOD(device_detach, atausb_detach),
- {0, 0}
-};
-
-static driver_t atausb_driver = {
- .name = "atausb",
- .methods = atausb_methods,
- .size = sizeof(struct atausb_softc),
-};
-
+USB_DECLARE_DRIVER(atausb);
DRIVER_MODULE(atausb, uhub, atausb_driver, atausb_devclass, 0, 0);
-MODULE_DEPEND(atausb, usb, 1, 1, 1);
MODULE_VERSION(atausb, 1);
static int
-atausb_probe(device_t dev)
+atausb_match(device_t dev)
{
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- usb_interface_descriptor_t *id;
+ struct usb_attach_arg *uaa = device_get_ivars(dev);
+ usb_interface_descriptor_t *id;
+
+ if (uaa->iface == NULL)
+ return UMATCH_NONE;
+
+ id = usbd_get_interface_descriptor(uaa->iface);
+ if (!id || id->bInterfaceClass != UICLASS_MASS)
+ return UMATCH_NONE;
- if (uaa->usb_mode != USB_MODE_HOST) {
- return (UMATCH_NONE);
- }
- if (uaa->iface == NULL) {
- return (UMATCH_NONE);
- }
- id = usbd_get_interface_descriptor(uaa->iface);
- if ((!id) || (id->bInterfaceClass != UICLASS_MASS)) {
- return (UMATCH_NONE);
- }
- switch (id->bInterfaceSubClass) {
- case UISUBCLASS_QIC157:
- case UISUBCLASS_RBC:
- case UISUBCLASS_SCSI:
- case UISUBCLASS_SFF8020I:
- case UISUBCLASS_SFF8070I:
- case UISUBCLASS_UFI:
- switch (id->bInterfaceProtocol) {
- case UIPROTO_MASS_CBI:
- case UIPROTO_MASS_CBI_I:
- case UIPROTO_MASS_BBB:
- case UIPROTO_MASS_BBB_OLD:
- return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO);
- default:
- return (UMATCH_IFACECLASS_IFACESUBCLASS);
- }
- break;
+ switch (id->bInterfaceSubClass) {
+ case UISUBCLASS_QIC157:
+ case UISUBCLASS_RBC:
+ case UISUBCLASS_SCSI:
+ case UISUBCLASS_SFF8020I:
+ case UISUBCLASS_SFF8070I:
+ case UISUBCLASS_UFI:
+ switch (id->bInterfaceProtocol) {
+ case UIPROTO_MASS_CBI:
+ case UIPROTO_MASS_CBI_I:
+ case UIPROTO_MASS_BBB:
+ case UIPROTO_MASS_BBB_OLD:
+ return UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO;
default:
- return (UMATCH_IFACECLASS);
+ return UMATCH_IFACECLASS_IFACESUBCLASS;
}
+ break;
+ default:
+ return UMATCH_IFACECLASS;
+ }
}
static int
atausb_attach(device_t dev)
{
- struct atausb_softc *sc = device_get_softc(dev);
- struct usb_attach_arg *uaa = device_get_ivars(dev);
- usb_interface_descriptor_t *id;
- const char *proto, *subclass;
- usb_device_request_t request;
- uint16_t i;
- uint8_t maxlun;
- uint8_t has_intr;
- int err;
+ struct atausb_softc *sc = device_get_softc(dev);
+ struct usb_attach_arg *uaa = device_get_ivars(dev);
+ usb_interface_descriptor_t *id;
+ usb_endpoint_descriptor_t *ed;
+ usbd_device_handle udev;
+ usb_device_request_t request;
+ char devinfo[1024], *proto, *subclass;
+ u_int8_t maxlun;
+ int err, i;
- if (sc == NULL) {
- return (ENOMEM);
- }
- usbd_set_device_desc(dev);
+ sc->dev = dev;
+ usbd_devinfo(uaa->device, 0, devinfo);
+ device_set_desc_copy(dev, devinfo);
+ sc->bulkin = sc->bulkout = sc->bulkirq = -1;
+ sc->bulkin_pipe = sc->bulkout_pipe= sc->bulkirq_pipe = NULL;
+ sc->iface = uaa->iface;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list