1/* $FreeBSD: head/sys/dev/usb/controller/usb_controller.c 215649 2010-11-22 01:11:28Z weongyo $ */ |
2/*- 3 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. --- 46 unchanged lines hidden (view full) --- 56#include <dev/usb/usb_process.h> 57#include <dev/usb/usb_busdma.h> 58#include <dev/usb/usb_dynamic.h> 59#include <dev/usb/usb_device.h> 60#include <dev/usb/usb_hub.h> 61 62#include <dev/usb/usb_controller.h> 63#include <dev/usb/usb_bus.h> |
64#include <dev/usb/usb_pf.h> |
65 66/* function prototypes */ 67 68static device_probe_t usb_probe; 69static device_attach_t usb_attach; 70static device_detach_t usb_detach; 71 72static void usb_attach_sub(device_t, struct usb_bus *); --- 470 unchanged lines hidden (view full) --- 543 mtx_init(&bus->bus_mtx, device_get_nameunit(bus->parent), 544 NULL, MTX_DEF | MTX_RECURSE); 545 546 usb_callout_init_mtx(&bus->power_wdog, 547 &bus->bus_mtx, 0); 548 549 TAILQ_INIT(&bus->intr_q.head); 550 |
551 usbpf_attach(bus, &bus->uif); 552 |
553#if USB_HAVE_BUSDMA 554 usb_dma_tag_setup(bus->dma_parent_tag, bus->dma_tags, 555 dmat, &bus->bus_mtx, NULL, 32, USB_BUS_DMA_TAG_MAX); 556#endif 557 if ((bus->devices_max > USB_MAX_DEVICES) || 558 (bus->devices_max < USB_MIN_DEVICES) || 559 (bus->devices == NULL)) { 560 DPRINTFN(0, "Devices field has not been " --- 31 unchanged lines hidden (view full) --- 592{ 593#if USB_HAVE_BUSDMA 594 if (cb) { 595 cb(bus, &usb_bus_mem_free_all_cb); 596 } 597 usb_dma_tag_unsetup(bus->dma_parent_tag); 598#endif 599 |
600 usbpf_detach(bus); 601 |
602 mtx_destroy(&bus->bus_mtx); 603} |
604 605struct usb_bus * 606usb_bus_find(const char *name) 607{ 608 struct usb_bus *ubus; 609 devclass_t dc; 610 device_t *devlist; 611 int devcount, error, i; 612 const char *nameunit; 613 614 dc = devclass_find("usbus"); 615 if (dc == NULL) 616 return (NULL); 617 error = devclass_get_devices(dc, &devlist, &devcount); 618 if (error != 0) 619 return (NULL); 620 for (i = 0; i < devcount; i++) { 621 nameunit = device_get_nameunit(devlist[i]); 622 if (!strncmp(name, nameunit, strlen(nameunit))) { 623 ubus = device_get_ivars(devlist[i]); 624 free(devlist, M_TEMP); 625 return (ubus); 626 } 627 } 628 free(devlist, M_TEMP); 629 return (NULL); 630} |