Date: Sat, 11 Sep 2010 23:03:40 +0000 (UTC) From: Weongyo Jeong <weongyo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r212484 - in user/weongyo/usb/sys/dev/usb: . controller Message-ID: <201009112303.o8BN3ebv052546@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: weongyo Date: Sat Sep 11 23:03:40 2010 New Revision: 212484 URL: http://svn.freebsd.org/changeset/base/212484 Log: Changes the purpose of usb_bus_mem_alloc_all() that did initialize DMA/PIO mode, the tailq and callouts. Just looking the function name it looks it's doing jobs related with memory initialization but it's doing more than it that it's really confusing. So cleans up its meaning and adds a wrapper, usb_bus_struct_init, to initialize the usb_bus structure. Modified: user/weongyo/usb/sys/dev/usb/controller/at91dci_atmelarm.c user/weongyo/usb/sys/dev/usb/controller/atmegadci_atmelarm.c user/weongyo/usb/sys/dev/usb/controller/ehci_ixp4xx.c user/weongyo/usb/sys/dev/usb/controller/ehci_mv.c user/weongyo/usb/sys/dev/usb/controller/ehci_pci.c user/weongyo/usb/sys/dev/usb/controller/musb_otg_atmelarm.c user/weongyo/usb/sys/dev/usb/controller/ohci_atmelarm.c user/weongyo/usb/sys/dev/usb/controller/ohci_pci.c user/weongyo/usb/sys/dev/usb/controller/ohci_s3c24x0.c user/weongyo/usb/sys/dev/usb/controller/uhci_pci.c user/weongyo/usb/sys/dev/usb/controller/usb_controller.c user/weongyo/usb/sys/dev/usb/controller/uss820dci_atmelarm.c user/weongyo/usb/sys/dev/usb/usb_controller.h Modified: user/weongyo/usb/sys/dev/usb/controller/at91dci_atmelarm.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/at91dci_atmelarm.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/at91dci_atmelarm.c Sat Sep 11 23:03:40 2010 (r212484) @@ -157,16 +157,11 @@ at91_udp_attach(device_t dev) sc->sc_dci.sc_pull_down = &at91_udp_pull_down; sc->sc_dci.sc_pull_arg = sc; - /* initialise some bus fields */ - sc->sc_dci.sc_bus.parent = dev; - sc->sc_dci.sc_bus.devices = sc->sc_dci.sc_devices; - sc->sc_dci.sc_bus.devices_max = AT91_MAX_DEVICES; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_dci.sc_bus, - USB_GET_DMA_TAG(dev), NULL)) { - return (ENOMEM); - } + err = usb_bus_struct_init(&sc->sc_dci.sc_bus, dev, + sc->sc_dci.sc_devices, AT91_MAX_DEVICES, NULL); + if (err != 0) + return (err); + /* * configure VBUS input pin, enable deglitch and enable * interrupt : @@ -314,7 +309,7 @@ at91_udp_detach(device_t dev) sc->sc_dci.sc_io_res); sc->sc_dci.sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_dci.sc_bus, NULL); + usb_bus_struct_fini(&sc->sc_dci.sc_bus); /* disable clocks */ at91_pmc_clock_disable(sc->sc_iclk); Modified: user/weongyo/usb/sys/dev/usb/controller/atmegadci_atmelarm.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/atmegadci_atmelarm.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/atmegadci_atmelarm.c Sat Sep 11 23:03:40 2010 (r212484) @@ -99,16 +99,11 @@ atmegadci_attach(device_t dev) sc->sc_otg.sc_clocks_on = &atmegadci_clocks_on; sc->sc_otg.sc_clocks_off = &atmegadci_clocks_off; - /* initialise some bus fields */ - sc->sc_otg.sc_bus.parent = dev; - sc->sc_otg.sc_bus.devices = sc->sc_otg.sc_devices; - sc->sc_otg.sc_bus.devices_max = ATMEGA_MAX_DEVICES; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_otg.sc_bus, - USB_GET_DMA_TAG(dev), NULL)) { - return (ENOMEM); - } + err = usb_bus_struct_init(&sc->sc_otg.sc_bus, dev, + sc->sc_otg.sc_devices, ATMEGA_MAX_DEVICES, NULL); + if (err != NULL) + return (err); + rid = 0; sc->sc_otg.sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); @@ -189,7 +184,7 @@ atmegadci_detach(device_t dev) sc->sc_otg.sc_io_res); sc->sc_otg.sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_otg.sc_bus, NULL); + usb_bus_struct_fini(&sc->sc_otg.sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/ehci_ixp4xx.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/ehci_ixp4xx.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/ehci_ixp4xx.c Sat Sep 11 23:03:40 2010 (r212484) @@ -146,15 +146,10 @@ ehci_ixp_attach(device_t self) int err; int rid; - /* initialise some bus fields */ - sc->sc_bus.parent = self; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = EHCI_MAX_DEVICES; - sc->sc_bus.busmem_func = ehci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self))) - return (ENOMEM); + err = usb_bus_struct_init(&sc->sc_bus, self, sc->sc_devices, + EHCI_MAX_DEVICES, ehci_iterate_hw_softc); + if (err != 0) + return (err); /* NB: hints fix the memory location and irq */ @@ -290,7 +285,7 @@ ehci_ixp_detach(device_t self) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/ehci_mv.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/ehci_mv.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/ehci_mv.c Sat Sep 11 23:03:40 2010 (r212484) @@ -161,18 +161,14 @@ mv_ehci_attach(device_t self) int err; int rid; - /* initialise some bus fields */ - sc->sc_bus.parent = self; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = EHCI_MAX_DEVICES; - sc->sc_bus.busmem_func = ehci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self))) - return (ENOMEM); + err = usb_bus_struct_init(&sc->sc_bus, self, sc->sc_devices, + EHCI_MAX_DEVICES, ehci_iterate_hw_softc); + if (err != 0) + return (err); rid = 0; - sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, RF_ACTIVE); + sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, + RF_ACTIVE); if (!sc->sc_io_res) { device_printf(self, "Could not map memory\n"); goto error; @@ -332,7 +328,7 @@ mv_ehci_detach(device_t self) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/ehci_pci.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/ehci_pci.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/ehci_pci.c Sat Sep 11 23:03:40 2010 (r212484) @@ -301,15 +301,10 @@ ehci_pci_attach(device_t self) int err; int rid; - /* initialise some bus fields */ - sc->sc_bus.parent = self; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = EHCI_MAX_DEVICES; - sc->sc_bus.busmem_func = ehci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self))) - return (ENOMEM); + err = usb_bus_struct_init(&sc->sc_bus, self, sc->sc_devices, + EHCI_MAX_DEVICES, ehci_iterate_hw_softc); + if (err != 0) + return (err); pci_enable_busmaster(self); @@ -533,7 +528,7 @@ ehci_pci_detach(device_t self) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/musb_otg_atmelarm.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/musb_otg_atmelarm.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/musb_otg_atmelarm.c Sat Sep 11 23:03:40 2010 (r212484) @@ -113,16 +113,11 @@ musbotg_attach(device_t dev) sc->sc_otg.sc_clocks_off = &musbotg_clocks_off; sc->sc_otg.sc_clocks_arg = sc; - /* initialise some bus fields */ - sc->sc_otg.sc_bus.parent = dev; - sc->sc_otg.sc_bus.devices = sc->sc_otg.sc_devices; - sc->sc_otg.sc_bus.devices_max = MUSB2_MAX_DEVICES; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_otg.sc_bus, - USB_GET_DMA_TAG(dev), NULL)) { - return (ENOMEM); - } + err = usb_bus_struct_init(&sc->sc_otg.sc_bus, dev, + sc->sc_otg.sc_devices, MUSB2_MAX_DEVICES, NULL); + if (err != 0) + return (err); + rid = 0; sc->sc_otg.sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); @@ -212,7 +207,7 @@ musbotg_detach(device_t dev) sc->sc_otg.sc_io_res); sc->sc_otg.sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_otg.sc_bus, NULL); + usb_bus_struct_fini(&sc->sc_otg.sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/ohci_atmelarm.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/ohci_atmelarm.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/ohci_atmelarm.c Sat Sep 11 23:03:40 2010 (r212484) @@ -88,15 +88,10 @@ ohci_atmelarm_attach(device_t dev) int err; int rid; - /* initialise some bus fields */ - sc->sc_ohci.sc_bus.parent = dev; - sc->sc_ohci.sc_bus.devices = sc->sc_ohci.sc_devices; - sc->sc_ohci.sc_bus.devices_max = OHCI_MAX_DEVICES; - sc->sc_ohci.sc_bus.busmem_func = ohci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_ohci.sc_bus, USB_GET_DMA_TAG(dev))) - return (ENOMEM); + err = usb_bus_struct_init(&sc->sc_ohci.sc_bus, dev, + sc->sc_ohci.sc_devices, OHCI_MAX_DEVICES, ohci_iterate_hw_softc); + if (err != 0) + return (err); sc->iclk = at91_pmc_clock_ref("ohci_clk"); sc->fclk = at91_pmc_clock_ref("uhpck"); @@ -212,7 +207,7 @@ ohci_atmelarm_detach(device_t dev) sc->sc_ohci.sc_io_res); sc->sc_ohci.sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_ohci.sc_bus); + usb_bus_struct_fini(&sc->sc_ohci.sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/ohci_pci.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/ohci_pci.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/ohci_pci.c Sat Sep 11 23:03:40 2010 (r212484) @@ -217,15 +217,10 @@ ohci_pci_attach(device_t self) int rid; int err; - /* initialise some bus fields */ - sc->sc_bus.parent = self; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = OHCI_MAX_DEVICES; - sc->sc_bus.busmem_func = ohci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self))) - return (ENOMEM); + err = usb_bus_struct_init(&sc->sc_bus, self, sc->sc_devices, + OHCI_MAX_DEVICES, ohci_iterate_hw_softc); + if (err != 0) + return (err); sc->sc_dev = self; @@ -377,7 +372,7 @@ ohci_pci_detach(device_t self) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/ohci_s3c24x0.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/ohci_s3c24x0.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/ohci_s3c24x0.c Sat Sep 11 23:03:40 2010 (r212484) @@ -81,15 +81,10 @@ ohci_s3c24x0_attach(device_t dev) int err; int rid; - /* initialise some bus fields */ - sc->sc_bus.parent = dev; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = OHCI_MAX_DEVICES; - sc->sc_bus.busmem_func = ohci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(dev))) - return (ENOMEM); + err = usb_bus_struct_init(&sc->sc_bus, dev, sc->sc_devices, + OHCI_MAX_DEVICES, ohci_iterate_hw_softc); + if (err != 0) + return (err); sc->sc_dev = dev; @@ -188,7 +183,7 @@ ohci_s3c24x0_detach(device_t dev) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/uhci_pci.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/uhci_pci.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/uhci_pci.c Sat Sep 11 23:03:40 2010 (r212484) @@ -277,15 +277,11 @@ uhci_pci_attach(device_t self) int rid; int err; - /* initialise some bus fields */ - sc->sc_bus.parent = self; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = UHCI_MAX_DEVICES; - sc->sc_bus.busmem_func = uhci_iterate_hw_softc; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self))) - return ENOMEM; + err = usb_bus_struct_init(&sc->sc_bus, self, sc->sc_devices, + UHCI_MAX_DEVICES, uhci_iterate_hw_softc); + if (err != 0) + return (err); + sc->sc_dev = self; pci_enable_busmaster(self); @@ -441,7 +437,7 @@ uhci_pci_detach(device_t self) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/controller/usb_controller.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/usb_controller.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/usb_controller.c Sat Sep 11 23:03:40 2010 (r212484) @@ -69,6 +69,7 @@ static device_attach_t usb_attach; static device_detach_t usb_detach; static void usb_attach_sub(device_t, struct usb_bus *); +static void usb_bus_mem_free_all(struct usb_bus *); /* static variables */ @@ -518,31 +519,13 @@ usb_bus_mem_alloc_all_cb(struct usb_bus * 0: Success * Else: Failure *------------------------------------------------------------------------*/ -uint8_t +static uint8_t usb_bus_mem_alloc_all(struct usb_bus *bus, bus_dma_tag_t dmat) { - bus->alloc_failed = 0; - - mtx_init(&bus->bus_mtx, device_get_nameunit(bus->parent), - NULL, MTX_DEF | MTX_RECURSE); - - usb_callout_init_mtx(&bus->power_wdog, &bus->bus_mtx, 0); - - TAILQ_INIT(&bus->intr_q.head); - #if USB_HAVE_BUSDMA usb_dma_tag_setup(bus->dma_parent_tag, bus->dma_tags, dmat, &bus->bus_mtx, NULL, 32, USB_BUS_DMA_TAG_MAX); -#endif - if ((bus->devices_max > USB_MAX_DEVICES) || - (bus->devices_max < USB_MIN_DEVICES) || - (bus->devices == NULL)) { - DPRINTFN(0, "Devices field has not been " - "initialised properly\n"); - bus->alloc_failed = 1; /* failure */ - } -#if USB_HAVE_BUSDMA if (bus->busmem_func != NULL) bus->busmem_func(bus, usb_bus_mem_alloc_all_cb); #endif @@ -567,7 +550,7 @@ usb_bus_mem_free_all_cb(struct usb_bus * /*------------------------------------------------------------------------* * usb_bus_mem_free_all - factored out code *------------------------------------------------------------------------*/ -void +static void usb_bus_mem_free_all(struct usb_bus *bus) { @@ -576,6 +559,45 @@ usb_bus_mem_free_all(struct usb_bus *bus bus->busmem_func(bus, usb_bus_mem_free_all_cb); usb_dma_tag_unsetup(bus->dma_parent_tag); #endif +} + +int +usb_bus_struct_init(struct usb_bus *bus, device_t dev, + struct usb_device **udevs, uint8_t udevsmax, + void (*busmem_func)(struct usb_bus *, usb_bus_mem_callback_t *)) +{ + + if (udevsmax > USB_MAX_DEVICES || udevsmax < USB_MIN_DEVICES || + udevs == NULL) { + DPRINTFN(0, "Devices field has not been " + "initialised properly\n"); + return (ENXIO); + } + + /* initialise some bus fields */ + bus->parent = dev; + bus->devices = udevs; + bus->devices_max = udevsmax; + bus->busmem_func = busmem_func; + bus->alloc_failed = 0; + + mtx_init(&bus->bus_mtx, device_get_nameunit(bus->parent), + NULL, MTX_DEF | MTX_RECURSE); + + usb_callout_init_mtx(&bus->power_wdog, &bus->bus_mtx, 0); + + TAILQ_INIT(&bus->intr_q.head); + + /* get all DMA memory */ + if (usb_bus_mem_alloc_all(bus, USB_GET_DMA_TAG(dev))) + return (ENOMEM); + return (0); +} + +void +usb_bus_struct_fini(struct usb_bus *bus) +{ + usb_bus_mem_free_all(bus); mtx_destroy(&bus->bus_mtx); } Modified: user/weongyo/usb/sys/dev/usb/controller/uss820dci_atmelarm.c ============================================================================== --- user/weongyo/usb/sys/dev/usb/controller/uss820dci_atmelarm.c Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/controller/uss820dci_atmelarm.c Sat Sep 11 23:03:40 2010 (r212484) @@ -151,16 +151,11 @@ uss820_atmelarm_attach(device_t dev) int err; int rid; - /* initialise some bus fields */ - sc->sc_bus.parent = dev; - sc->sc_bus.devices = sc->sc_devices; - sc->sc_bus.devices_max = USS820_MAX_DEVICES; - - /* get all DMA memory */ - if (usb_bus_mem_alloc_all(&sc->sc_bus, - USB_GET_DMA_TAG(dev), NULL)) { - return (ENOMEM); - } + err = usb_bus_struct_init(&sc->sc_bus, dev, sc->sc_devices, + USS820_MAX_DEVICES, NULL); + if (err != 0) + return (err); + rid = 0; sc->sc_io_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE); @@ -247,7 +242,7 @@ uss820_atmelarm_detach(device_t dev) sc->sc_io_res); sc->sc_io_res = NULL; } - usb_bus_mem_free_all(&sc->sc_bus, NULL); + usb_bus_struct_fini(&sc->sc_bus); return (0); } Modified: user/weongyo/usb/sys/dev/usb/usb_controller.h ============================================================================== --- user/weongyo/usb/sys/dev/usb/usb_controller.h Sat Sep 11 22:09:16 2010 (r212483) +++ user/weongyo/usb/sys/dev/usb/usb_controller.h Sat Sep 11 23:03:40 2010 (r212484) @@ -191,9 +191,11 @@ struct usb_temp_setup { /* prototypes */ +int usb_bus_struct_init(struct usb_bus *, device_t, struct usb_device **, + uint8_t, void (*busmem_func)(struct usb_bus *, + usb_bus_mem_callback_t *)); +void usb_bus_struct_fini(struct usb_bus *); void usb_bus_mem_flush_all(struct usb_bus *bus); -uint8_t usb_bus_mem_alloc_all(struct usb_bus *bus, bus_dma_tag_t dmat); -void usb_bus_mem_free_all(struct usb_bus *bus); uint16_t usb_isoc_time_expand(struct usb_bus *bus, uint16_t isoc_time_curr); uint16_t usbd_fs_isoc_schedule_isoc_time_expand(struct usb_device *udev, struct usb_fs_isoc_schedule **pp_start, struct usb_fs_isoc_schedule **pp_end, uint16_t isoc_time); uint8_t usbd_fs_isoc_schedule_alloc(struct usb_fs_isoc_schedule *fss, uint8_t *pstart, uint16_t len);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201009112303.o8BN3ebv052546>