您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ usb_bus_mem_alloc_all函数代码示例

51自学网 2021-06-03 09:18:56
  C++
这篇教程C++ usb_bus_mem_alloc_all函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中usb_bus_mem_alloc_all函数的典型用法代码示例。如果您正苦于以下问题:C++ usb_bus_mem_alloc_all函数的具体用法?C++ usb_bus_mem_alloc_all怎么用?C++ usb_bus_mem_alloc_all使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了usb_bus_mem_alloc_all函数的24个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: ehci_oxu_attach

intehci_oxu_attach(device_t self){  ehci_softc_t *sc = device_get_softc(self);  int err;#if EHCI_OXU_DEBUG_LEDS  dbg_port_set_mode (dbg_port_uh_mon);#endif    /* 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_io_tag = 0U;  sc->sc_io_hdl = OXU210_USB_EHCI_OFST;  sc->sc_io_size = 0x00020000;  sc->sc_flags |= (EHCI_SCFLG_SETMODE |                   EHCI_SCFLG_TT | EHCI_SCFLG_FORCESPEED |                   EHCI_SCFLG_NORESTERM |                   EHCI_SCFLG_SETFRSZ);  /* get all DMA memory */  if (usb_bus_mem_alloc_all(&sc->sc_bus,                            USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {    return (ENOMEM);  }  sc->sc_bus.bdev = device_add_child(self, "usbus", -1);  if (!sc->sc_bus.bdev) {    device_printf(self, "Could not add USB device/n");    goto error;  }  device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);  device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);  err = oxu210_intr_attach (oxu210_intr_shc,                            (oxu210_intr_handler) ehci_interrupt,                            sc);  if (err) {    device_printf(self, "USB EHCI intr attach error/n");    goto error;  }  err = ehci_init(sc);  if (!err) {    err = device_probe_and_attach(sc->sc_bus.bdev);  }  if (err) {    device_printf(self, "USB init failed err=%d/n", err);    goto error;  }  return (0);error:  ehci_oxu_detach(self);  return (ENXIO);}
开发者ID:wsoltys,项目名称:pacedev,代码行数:60,


示例2: octusb_octeon_attach

static intoctusb_octeon_attach(device_t dev){	struct octusb_octeon_softc *sc = device_get_softc(dev);	int err;	int rid;	/* setup controller interface softc */	/* 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 = OCTUSB_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);	}	rid = 0;	sc->sc_dci.sc_irq_res =	    bus_alloc_resource(dev, SYS_RES_IRQ, &rid,			       CVMX_IRQ_USB, CVMX_IRQ_USB, 1, RF_ACTIVE);	if (!(sc->sc_dci.sc_irq_res)) {		goto error;	}	sc->sc_dci.sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!(sc->sc_dci.sc_bus.bdev)) {		goto error;	}	device_set_ivars(sc->sc_dci.sc_bus.bdev, &sc->sc_dci.sc_bus);#if (__FreeBSD_version >= 700031)	err = bus_setup_intr(dev, sc->sc_dci.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)octusb_interrupt, sc, &sc->sc_dci.sc_intr_hdl);#else	err = bus_setup_intr(dev, sc->sc_dci.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    (driver_intr_t *)octusb_interrupt, sc, &sc->sc_dci.sc_intr_hdl);#endif	if (err) {		sc->sc_dci.sc_intr_hdl = NULL;		goto error;	}	err = octusb_init(&sc->sc_dci);	if (!err) {		err = device_probe_and_attach(sc->sc_dci.sc_bus.bdev);	}	if (err) {		goto error;	}	return (0);error:	octusb_octeon_detach(dev);	return (ENXIO);}
开发者ID:ppaeps,项目名称:freebsd-head,代码行数:57,


示例3: saf1761_otg_fdt_attach

static intsaf1761_otg_fdt_attach(device_t dev){	struct saf1761_otg_softc *sc = device_get_softc(dev);	int err;	/* 32-bit data bus */	sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_DATA_BUS_WIDTH;	/* initialise some bus fields */	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = SOTG_MAX_DEVICES;	sc->sc_bus.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(dev), NULL))		return (ENOMEM);	sc->sc_io_res = (void *)1;	sc->sc_io_tag = (void *)1;	sc->sc_io_hdl = (void *)USB_PCI_MEMORY_ADDRESS;	sc->sc_io_size = USB_PCI_MEMORY_SIZE;	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (sc->sc_bus.bdev == NULL)		goto error;	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_interrupt(dev, &saf1761_otg_filter_interrupt, &saf1761_otg_interrupt, sc);	err = saf1761_otg_init(sc);	if (err) {		device_printf(dev, "Init failed/n");		goto error;	}	err = device_probe_and_attach(sc->sc_bus.bdev);	if (err) {		device_printf(dev, "USB probe and attach failed/n");		goto error;	}	return (0);error:	saf1761_otg_fdt_detach(dev);	return (ENXIO);}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:47,


示例4: at91_udp_attach

static intat91_udp_attach(device_t dev){	struct at91_udp_softc *sc = device_get_softc(dev);	int err;	int rid;	/* setup AT9100 USB device controller interface softc */	sc->sc_dci.sc_clocks_on = &at91_udp_clocks_on;	sc->sc_dci.sc_clocks_off = &at91_udp_clocks_off;	sc->sc_dci.sc_clocks_arg = sc;	sc->sc_dci.sc_pull_up = &at91_udp_pull_up;	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);	}	callout_init_mtx(&sc->sc_vbus, &sc->sc_dci.sc_bus.bus_mtx, 0);	/*	 * configure VBUS input pin, enable deglitch and enable	 * interrupt :	 */	at91_pio_use_gpio(VBUS_BASE, VBUS_MASK);	at91_pio_gpio_input(VBUS_BASE, VBUS_MASK);	at91_pio_gpio_set_deglitch(VBUS_BASE, VBUS_MASK, 1);	at91_pio_gpio_set_interrupt(VBUS_BASE, VBUS_MASK, 0);	/*	 * configure PULLUP output pin :	 */	at91_pio_use_gpio(PULLUP_BASE, PULLUP_MASK);	at91_pio_gpio_output(PULLUP_BASE, PULLUP_MASK, 0);	at91_udp_pull_down(sc);	/* wait 10ms for pulldown to stabilise */	usb_pause_mtx(NULL, hz / 100);	sc->sc_mclk = at91_pmc_clock_ref("mck");	sc->sc_iclk = at91_pmc_clock_ref("udc_clk");	sc->sc_fclk = at91_pmc_clock_ref("udpck");	rid = MEM_RID;	sc->sc_dci.sc_io_res =	    bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);	if (!(sc->sc_dci.sc_io_res)) {		err = ENOMEM;		goto error;	}	sc->sc_dci.sc_io_tag = rman_get_bustag(sc->sc_dci.sc_io_res);	sc->sc_dci.sc_io_hdl = rman_get_bushandle(sc->sc_dci.sc_io_res);	sc->sc_dci.sc_io_size = rman_get_size(sc->sc_dci.sc_io_res);	rid = 0;	sc->sc_dci.sc_irq_res =	    bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE);	if (!(sc->sc_dci.sc_irq_res)) {		goto error;	}	sc->sc_dci.sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!(sc->sc_dci.sc_bus.bdev)) {		goto error;	}	device_set_ivars(sc->sc_dci.sc_bus.bdev, &sc->sc_dci.sc_bus);	err = bus_setup_intr(dev, sc->sc_dci.sc_irq_res, INTR_TYPE_TTY | INTR_MPSAFE,	    at91dci_filter_interrupt, at91dci_interrupt, sc, &sc->sc_dci.sc_intr_hdl);	if (err) {		sc->sc_dci.sc_intr_hdl = NULL;		goto error;	}	err = at91dci_init(&sc->sc_dci);	if (!err) {		err = device_probe_and_attach(sc->sc_dci.sc_bus.bdev);	}	if (err) {		goto error;	} else {		/* poll VBUS one time */		USB_BUS_LOCK(&sc->sc_dci.sc_bus);		at91_vbus_poll(sc);		USB_BUS_UNLOCK(&sc->sc_dci.sc_bus);	}	return (0);error:	at91_udp_detach(dev);	return (ENXIO);//.........这里部分代码省略.........
开发者ID:JabirTech,项目名称:Source,代码行数:101,


示例5: dotg_fdt_attach

static intdotg_fdt_attach(device_t dev){	struct dwc_otg_softc *sc = device_get_softc(dev);	int err, rid;	/* setup controller interface softc */	/* initialise some bus fields */	sc->sc_mode = DWC_MODE_HOST;	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = DWC_OTG_MAX_DEVICES;	sc->sc_bus.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(dev), NULL)) {		printf("No mem/n");		return (ENOMEM);	}	rid = 0;	sc->sc_io_res =	    bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);	if (!(sc->sc_io_res)) {		printf("Can`t alloc MEM/n");		goto error;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, 	    &rid, RF_ACTIVE);	if (!(sc->sc_irq_res)) {		printf("Can`t alloc IRQ/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!(sc->sc_bus.bdev)) {		printf("Can`t add usbus/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	err = bus_setup_intr(dev, sc->sc_irq_res,	    INTR_TYPE_TTY | INTR_MPSAFE, dwc_otg_filter_interrupt,	    dwc_otg_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		sc->sc_intr_hdl = NULL;		printf("Can`t set IRQ handle/n");		goto error;	}	err = dwc_otg_init(sc);	if (err) printf("dotg_init fail/n");	if (!err) {		err = device_probe_and_attach(sc->sc_bus.bdev);		if (err) printf("device_probe_and_attach fail %d/n", err);	}	if (err) {		goto error;	}	return (0);error:	dotg_fdt_detach(dev);	return (ENXIO);}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:71,


示例6: ehci_pci_attach

static intehci_pci_attach(device_t self){	ehci_softc_t *sc = device_get_softc(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;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {		return (ENOMEM);	}	pci_enable_busmaster(self);	switch (pci_read_config(self, PCI_USBREV, 1) & PCI_USB_REV_MASK) {	case PCI_USB_REV_PRE_1_0:	case PCI_USB_REV_1_0:	case PCI_USB_REV_1_1:		/*		 * NOTE: some EHCI USB controllers have the wrong USB		 * revision number. It appears those controllers are		 * fully compliant so we just ignore this value in		 * some common cases.		 */		device_printf(self, "pre-2.0 USB revision (ignored)/n");		/* fallthrough */	case PCI_USB_REV_2_0:		break;	default:		/* Quirk for Parallels Desktop 4.0 */		device_printf(self, "USB revision is unknown. Assuming v2.0./n");		break;	}	rid = PCI_CBMEM;	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;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	/*	 * ehci_pci_match will never return NULL if ehci_pci_probe	 * succeeded	 */	device_set_desc(sc->sc_bus.bdev, ehci_pci_match(self));	switch (pci_get_vendor(self)) {	case PCI_EHCI_VENDORID_ACERLABS:		sprintf(sc->sc_vendor, "AcerLabs");		break;	case PCI_EHCI_VENDORID_AMD:		sprintf(sc->sc_vendor, "AMD");		break;	case PCI_EHCI_VENDORID_APPLE:		sprintf(sc->sc_vendor, "Apple");		break;	case PCI_EHCI_VENDORID_ATI:		sprintf(sc->sc_vendor, "ATI");		break;	case PCI_EHCI_VENDORID_CMDTECH:		sprintf(sc->sc_vendor, "CMDTECH");		break;	case PCI_EHCI_VENDORID_INTEL:		sprintf(sc->sc_vendor, "Intel");		break;	case PCI_EHCI_VENDORID_NEC:		sprintf(sc->sc_vendor, "NEC");		break;	case PCI_EHCI_VENDORID_OPTI:		sprintf(sc->sc_vendor, "OPTi");		break;	case PCI_EHCI_VENDORID_PHILIPS:		sprintf(sc->sc_vendor, "Philips");		break;	case PCI_EHCI_VENDORID_SIS:		sprintf(sc->sc_vendor, "SiS");//.........这里部分代码省略.........
开发者ID:JabirTech,项目名称:Source,代码行数:101,


示例7: ohci_ec_attach

static intohci_ec_attach(device_t dev){	struct ec_ohci_softc *sc = device_get_softc(dev);	bus_space_handle_t bsh;	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;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_ohci.sc_bus,	    USB_GET_DMA_TAG(dev), &ohci_iterate_hw_softc)) {		return (ENOMEM);	}	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)) {		err = ENOMEM;		goto error;	}	sc->sc_ohci.sc_io_tag = rman_get_bustag(sc->sc_ohci.sc_io_res);	bsh = rman_get_bushandle(sc->sc_ohci.sc_io_res);	/* Undocumented magic initialization */	bus_space_write_4((sc)->sc_ohci.sc_io_tag, bsh,0x04, 0x146);	bus_space_write_4((sc)->sc_ohci.sc_io_tag, bsh,0x44, 0x0200);	DELAY(1000);	sc->sc_ohci.sc_io_size = rman_get_size(sc->sc_ohci.sc_io_res);	if (bus_space_subregion(sc->sc_ohci.sc_io_tag, bsh, 0x4000000,	    sc->sc_ohci.sc_io_size, &sc->sc_ohci.sc_io_hdl) != 0)		panic("%s: unable to subregion USB host registers",		    device_get_name(dev));	rid = 0;	sc->sc_ohci.sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,	    RF_ACTIVE);	if (!(sc->sc_ohci.sc_irq_res)) {		goto error;	}	sc->sc_ohci.sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!(sc->sc_ohci.sc_bus.bdev)) {		goto error;	}	device_set_ivars(sc->sc_ohci.sc_bus.bdev, &sc->sc_ohci.sc_bus);	strlcpy(sc->sc_ohci.sc_vendor, "Cavium",		sizeof(sc->sc_ohci.sc_vendor));#if (__FreeBSD_version >= 700031)	err = bus_setup_intr(dev, sc->sc_ohci.sc_irq_res,	    INTR_TYPE_BIO | INTR_MPSAFE,  NULL,	    (driver_intr_t *)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,	    (driver_intr_t *)ohci_interrupt, sc,	    &sc->sc_ohci.sc_intr_hdl);#endif	if (err) {		sc->sc_ohci.sc_intr_hdl = NULL;		goto error;	}	bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl,	    OHCI_CONTROL, 0);	err = ohci_init(&sc->sc_ohci);	if (!err) {		err = device_probe_and_attach(sc->sc_ohci.sc_bus.bdev);	}	if (err) {		goto error;	}	return (0);error:	ohci_ec_detach(dev);	return (ENXIO);}
开发者ID:Alkzndr,项目名称:freebsd,代码行数:92,


示例8: vybrid_ehci_attach

static intvybrid_ehci_attach(device_t dev){	struct vybrid_ehci_softc *esc;	ehci_softc_t *sc;	bus_space_handle_t bsh;	int err;	int reg;	esc = device_get_softc(dev);	esc->dev = dev;	sc = &esc->base;	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	if (bus_alloc_resources(dev, vybrid_ehci_spec, esc->res)) {		device_printf(dev, "could not allocate resources/n");		return (ENXIO);	}	/* EHCI registers */	sc->sc_io_tag = rman_get_bustag(esc->res[0]);	bsh = rman_get_bushandle(esc->res[0]);	sc->sc_io_size = rman_get_size(esc->res[0]);	esc->bst_usbc = rman_get_bustag(esc->res[1]);	esc->bsh_usbc = rman_get_bushandle(esc->res[1]);	esc->bst_phy = rman_get_bustag(esc->res[2]);	esc->bsh_phy = rman_get_bushandle(esc->res[2]);	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(dev),		&ehci_iterate_hw_softc))		return (ENXIO);#if 0	printf("USBx_HCSPARAMS is 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_HCSPARAMS));	printf("USB_ID == 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_ID));	printf("USB_HWGENERAL == 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_HWGENERAL));	printf("USB_HWHOST == 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_HWHOST));	printf("USB_HWDEVICE == 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_HWDEVICE));	printf("USB_HWTXBUF == 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_HWTXBUF));	printf("USB_HWRXBUF == 0x%08x/n",	    bus_space_read_4(sc->sc_io_tag, bsh, USB_HWRXBUF));#endif	if (phy_init(esc)) {		device_printf(dev, "Could not setup PHY/n");		return (1);	}	/*	 * Set handle to USB related registers subregion used by	 * generic EHCI driver.	 */	err = bus_space_subregion(sc->sc_io_tag, bsh, 0x100,	    sc->sc_io_size, &sc->sc_io_hdl);	if (err != 0)		return (ENXIO);	/* Setup interrupt handler */	err = bus_setup_intr(dev, esc->res[3], INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)ehci_interrupt, sc,	    &sc->sc_intr_hdl);	if (err) {		device_printf(dev, "Could not setup irq, "		    "%d/n", err);		return (1);	}	/* Add USB device */	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(dev, "Could not add USB device/n");		err = bus_teardown_intr(dev, esc->res[5],		    sc->sc_intr_hdl);		if (err)			device_printf(dev, "Could not tear down irq,"			    " %d/n", err);		return (1);	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	strlcpy(sc->sc_vendor, "Freescale", sizeof(sc->sc_vendor));	/* Set host mode */	reg = bus_space_read_4(sc->sc_io_tag, sc->sc_io_hdl, 0xA8);	reg |= 0x3;	bus_space_write_4(sc->sc_io_tag, sc->sc_io_hdl, 0xA8, reg);	/* Set flags *///.........这里部分代码省略.........
开发者ID:MattDooner,项目名称:freebsd-west,代码行数:101,


示例9: ar71xx_ohci_attach

static intar71xx_ohci_attach(device_t dev){	struct ar71xx_ohci_softc *sc = device_get_softc(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.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_ohci.sc_bus,	    USB_GET_DMA_TAG(dev), &ohci_iterate_hw_softc)) {		return (ENOMEM);	}	sc->sc_ohci.sc_dev = dev;	rid = 0;	sc->sc_ohci.sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,	    RF_ACTIVE);	if (sc->sc_ohci.sc_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);	rid = 0;	sc->sc_ohci.sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,	    RF_ACTIVE);	if (sc->sc_ohci.sc_irq_res == NULL) {		err = ENOMEM;		goto error;	}	sc->sc_ohci.sc_bus.bdev = device_add_child(dev, "usbus", -1);	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);	err = bus_setup_intr(dev, sc->sc_ohci.sc_irq_res, 	    INTR_TYPE_BIO | INTR_MPSAFE, NULL, 	    ar71xx_ohci_intr, sc, &sc->sc_ohci.sc_intr_hdl);	if (err) {		err = ENXIO;		goto error;	}	strlcpy(sc->sc_ohci.sc_vendor, "Atheros", sizeof(sc->sc_ohci.sc_vendor));	bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl, OHCI_CONTROL, 0);	err = ohci_init(&sc->sc_ohci);	if (!err)		err = device_probe_and_attach(sc->sc_ohci.sc_bus.bdev);	if (err)		goto error;	return (0);error:	if (err) {		ar71xx_ohci_detach(dev);		return (err);	}	return (err);}
开发者ID:2asoft,项目名称:freebsd,代码行数:73,


示例10: zy7_ehci_attach

static intzy7_ehci_attach(device_t dev){	ehci_softc_t *sc = device_get_softc(dev);	bus_space_handle_t bsh;	int err, rid;		/* initialize some bus fields */	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	sc->sc_bus.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(dev), &ehci_iterate_hw_softc))		return (ENOMEM);	/* Allocate memory. */	rid = 0;	sc->sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,					       &rid, RF_ACTIVE);	if (sc->sc_io_res == NULL) {		device_printf(dev, "Can't allocate memory");		zy7_ehci_detach(dev);		return (ENOMEM);	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	bsh = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = EHCI_REG_SIZE;	if (bus_space_subregion(sc->sc_io_tag, bsh, EHCI_REG_OFFSET,				sc->sc_io_size, &sc->sc_io_hdl) != 0)		panic("%s: unable to subregion USB host registers",		      device_get_name(dev));	/* Allocate IRQ. */	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,						RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(dev, "Can't allocate IRQ/n");		zy7_ehci_detach(dev);		return (ENOMEM);	}	/* Add USB device */	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(dev, "Could not add USB device/n");		zy7_ehci_detach(dev);		return (ENXIO);	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, "Zynq-7000 ehci USB 2.0 controller");	strcpy(sc->sc_vendor, "Xilinx"); /* or IP vendor? */	/* Activate the interrupt */	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,			     NULL, (driver_intr_t *)ehci_interrupt, sc,			     &sc->sc_intr_hdl);	if (err) {		device_printf(dev, "Cannot setup IRQ/n");		zy7_ehci_detach(dev);		return (err);	}	/* Customization. */	sc->sc_flags |= EHCI_SCFLG_TT |	EHCI_SCFLG_NORESTERM;	sc->sc_vendor_post_reset = zy7_ehci_post_reset;	sc->sc_vendor_get_port_speed = ehci_get_port_speed_portsc;	/* Modify FIFO burst threshold from 2 to 8. */	bus_space_write_4(sc->sc_io_tag, bsh,			  ZY7_USB_TXFILLTUNING,			  8 << ZY7_USB_TXFILLTUNING_TXFIFOTHRES_SHFT);	/* Handle PHY options. */	if (zy7_phy_config(dev, sc->sc_io_tag, bsh) < 0) {		device_printf(dev, "Cannot config phy!/n");		zy7_ehci_detach(dev);		return (EIO);	}	/* Init ehci. */	err = ehci_init(sc);	if (!err) {		sc->sc_flags |= EHCI_SCFLG_DONEINIT;		err = device_probe_and_attach(sc->sc_bus.bdev);	}	if (err) {		device_printf(dev, "USB init failed err=%d/n", err);		zy7_ehci_detach(dev);		return (err);	}	return (0);}
开发者ID:kwitaszczyk,项目名称:freebsd,代码行数:100,


示例11: fsl_ehci_attach

static intfsl_ehci_attach(device_t self){	ehci_softc_t *sc;	int rid;	int err;	bus_space_handle_t ioh;	bus_space_tag_t iot;	sc = device_get_softc(self);	rid = 0;	sc->sc_bus.parent = self;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc))		return (ENOMEM);	/* Allocate io resource for EHCI */	sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid,	    RF_ACTIVE);	if (sc->sc_io_res == NULL) {		err = fsl_ehci_detach(self);		if (err) {			device_printf(self,			    "Detach of the driver failed with error %d/n",			    err);		}		return (ENXIO);	}	iot = rman_get_bustag(sc->sc_io_res);	/*	 * Set handle to USB related registers subregion used by generic	 * EHCI driver	 */	ioh = rman_get_bushandle(sc->sc_io_res);	err = bus_space_subregion(iot, ioh, FSL_EHCI_REG_OFF, FSL_EHCI_REG_SIZE,	    &sc->sc_io_hdl);	if (err != 0) {		err = fsl_ehci_detach(self);		if (err) {			device_printf(self,			    "Detach of the driver failed with error %d/n",			    err);		}		return (ENXIO);	}	/* Set little-endian tag for use by the generic EHCI driver */	sc->sc_io_tag = &bs_le_tag;	/* Allocate irq */	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		err = fsl_ehci_detach(self);		if (err) {			device_printf(self,			    "Detach of the driver failed with error %d/n",			    err);		}		return (ENXIO);	}	/* Setup interrupt handler */	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO,	    NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		device_printf(self, "Could not setup irq, %d/n", err);		sc->sc_intr_hdl = NULL;		err = fsl_ehci_detach(self);		if (err) {			device_printf(self,			    "Detach of the driver failed with error %d/n",			    err);		}		return (ENXIO);	}	/* Add USB device */	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		err = fsl_ehci_detach(self);		if (err) {			device_printf(self,			    "Detach of the driver failed with error %d/n",			    err);		}		return (ENOMEM);	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	sc->sc_id_vendor = 0x1234;	strlcpy(sc->sc_vendor, "Freescale", sizeof(sc->sc_vendor));//.........这里部分代码省略.........
开发者ID:ele7enxxh,项目名称:dtrace-pf,代码行数:101,


示例12: bhnd_ehci_attach

static intbhnd_ehci_attach(device_t self){	ehci_softc_t	*sc;	int		 err;	int		 rid;	sc = device_get_softc(self);	/* 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.usbrev = USB_REV_2_0;	sc->sc_bus.dma_bits = 32;	/* get all DMA memory */	if ((err = usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self),	    &ehci_iterate_hw_softc)) != 0) {		BHND_ERROR_DEV(self, "can't allocate DMA memory: %d", err);		return (ENOMEM);	}	rid = 0;	sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, 	    RF_ACTIVE);	if (!sc->sc_io_res) {		BHND_ERROR_DEV(self, "Could not map memory");		goto error;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		BHND_ERROR_DEV(self, "Could not allocate error irq");		bhnd_ehci_detach(self);		return (ENXIO);	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		BHND_ERROR_DEV(self, "Could not add USB device");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR); 	sprintf(sc->sc_vendor, "Broadcom");	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		BHND_ERROR_DEV(self, "Could not setup irq, %d", err);		sc->sc_intr_hdl = NULL;		goto error;	}	sc->sc_flags |= EHCI_SCFLG_LOSTINTRBUG;	sc->sc_vendor_post_reset = bhnd_ehci_post_reset;	err = ehci_init(sc);	if (!err) {		err = device_probe_and_attach(sc->sc_bus.bdev);	}	if (err) {		BHND_ERROR_DEV(self, "USB init failed err=%d", err);		goto error;	}	return (0);error:	bhnd_ehci_detach(self);	return (ENXIO);}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:78,


示例13: uss820_atmelarm_attach

static intuss820_atmelarm_attach(device_t dev){	struct uss820dci_softc *sc = device_get_softc(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);	}	rid = 0;	sc->sc_io_res =	    bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);	if (!sc->sc_io_res) {		goto error;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		goto error;	}	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!(sc->sc_bus.bdev)) {		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);#if (__FreeBSD_version >= 700031)	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)uss820dci_interrupt, sc, &sc->sc_intr_hdl);#else	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    (driver_intr_t *)uss820dci_interrupt, sc, &sc->sc_intr_hdl);#endif	if (err) {		sc->sc_intr_hdl = NULL;		goto error;	}	err = uss820dci_init(sc);	if (err) {		device_printf(dev, "Init failed/n");		goto error;	}	err = device_probe_and_attach(sc->sc_bus.bdev);	if (err) {		device_printf(dev, "USB probe and attach failed/n");		goto error;	}	return (0);error:	uss820_atmelarm_detach(dev);	return (ENXIO);}
开发者ID:OpenKod,项目名称:src,代码行数:67,


示例14: dwc_otg_attach

intdwc_otg_attach(device_t dev){	struct dwc_otg_fdt_softc *sc = device_get_softc(dev);	char usb_mode[24];	int err;	int rid;	/* 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 = DWC_OTG_MAX_DEVICES;	sc->sc_otg.sc_bus.dma_bits = 32;	/* get USB mode, if any */	if (OF_getprop(ofw_bus_get_node(dev), "dr_mode",	    &usb_mode, sizeof(usb_mode)) > 0) {		/* ensure proper zero termination */		usb_mode[sizeof(usb_mode) - 1] = 0;		if (strcasecmp(usb_mode, "host") == 0)			sc->sc_otg.sc_mode = DWC_MODE_HOST;		else if (strcasecmp(usb_mode, "peripheral") == 0)			sc->sc_otg.sc_mode = DWC_MODE_DEVICE;		else if (strcasecmp(usb_mode, "otg") != 0) {			device_printf(dev, "Invalid FDT dr_mode: %s/n",			    usb_mode);		}	}	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_otg.sc_bus,	    USB_GET_DMA_TAG(dev), NULL)) {		return (ENOMEM);	}	rid = 0;	sc->sc_otg.sc_io_res =	    bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);	if (!(sc->sc_otg.sc_io_res)) {		err = ENOMEM;		goto error;	}	sc->sc_otg.sc_io_tag = rman_get_bustag(sc->sc_otg.sc_io_res);	sc->sc_otg.sc_io_hdl = rman_get_bushandle(sc->sc_otg.sc_io_res);	sc->sc_otg.sc_io_size = rman_get_size(sc->sc_otg.sc_io_res);	/*	 * brcm,bcm2708-usb FDT provides two interrupts,	 * we need only second one (VC_USB)	 */	rid = ofw_bus_is_compatible(dev, "brcm,bcm2708-usb") ? 1 : 0;	sc->sc_otg.sc_irq_res =	    bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE);	if (sc->sc_otg.sc_irq_res == NULL)		goto error;	sc->sc_otg.sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (sc->sc_otg.sc_bus.bdev == NULL)		goto error;	device_set_ivars(sc->sc_otg.sc_bus.bdev, &sc->sc_otg.sc_bus);	err = bus_setup_intr(dev, sc->sc_otg.sc_irq_res, INTR_TYPE_TTY | INTR_MPSAFE,	    &dwc_otg_filter_interrupt, &dwc_otg_interrupt, sc, &sc->sc_otg.sc_intr_hdl);	if (err) {		sc->sc_otg.sc_intr_hdl = NULL;		goto error;	}	err = dwc_otg_init(&sc->sc_otg);	if (err == 0) {		err = device_probe_and_attach(sc->sc_otg.sc_bus.bdev);	}	if (err)		goto error;	return (0);error:	dwc_otg_detach(dev);	return (ENXIO);}
开发者ID:jaredmcneill,项目名称:freebsd,代码行数:85,


示例15: saf1761_otg_fdt_attach

static intsaf1761_otg_fdt_attach(device_t dev){	struct saf1761_otg_softc *sc = device_get_softc(dev);	char param[24];	int err;	int rid;	/* get configuration from FDT */	/* get bus-width, if any */	if (OF_getprop(ofw_bus_get_node(dev), "bus-width",	    &param, sizeof(param)) > 0) {		param[sizeof(param) - 1] = 0;		if (strcmp(param, "32") == 0)			sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_DATA_BUS_WIDTH;	} else {		/* assume 32-bit data bus */		sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_DATA_BUS_WIDTH;	}	/* get analog over-current setting */	if (OF_getprop(ofw_bus_get_node(dev), "analog-oc",	    &param, sizeof(param)) > 0) {		sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_ANA_DIGI_OC;	}	/* get DACK polarity */	if (OF_getprop(ofw_bus_get_node(dev), "dack-polarity",	    &param, sizeof(param)) > 0) {		sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_DACK_POL;	}	/* get DREQ polarity */	if (OF_getprop(ofw_bus_get_node(dev), "dreq-polarity",	    &param, sizeof(param)) > 0) {		sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_DREQ_POL;	}	/* get IRQ polarity */	if (OF_getprop(ofw_bus_get_node(dev), "int-polarity",	    &param, sizeof(param)) > 0) {		sc->sc_interrupt_cfg |= SOTG_INTERRUPT_CFG_INTPOL;		sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_INTR_POL;	}	/* get IRQ level triggering */	if (OF_getprop(ofw_bus_get_node(dev), "int-level",	    &param, sizeof(param)) > 0) {		sc->sc_interrupt_cfg |= SOTG_INTERRUPT_CFG_INTLVL;		sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_INTR_LEVEL;	}	/* initialise some bus fields */	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = SOTG_MAX_DEVICES;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(dev), NULL)) {		return (ENOMEM);	}	rid = 0;	sc->sc_io_res =	    bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);	if (sc->sc_io_res == NULL) 		goto error;	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	/* try to allocate the HC interrupt first */	rid = 1;	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		/* try to allocate a common IRQ second */		rid = 0;		sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,		    RF_SHAREABLE | RF_ACTIVE);		if (sc->sc_irq_res == NULL)			goto error;	}	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (sc->sc_bus.bdev == NULL)		goto error;	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_TTY | INTR_MPSAFE,	    &saf1761_otg_filter_interrupt, &saf1761_otg_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		sc->sc_intr_hdl = NULL;		goto error;	}	err = saf1761_otg_init(sc);//.........这里部分代码省略.........
开发者ID:Alkzndr,项目名称:freebsd,代码行数:101,


示例16: ar71xx_ehci_attach

static intar71xx_ehci_attach(device_t self){	struct ar71xx_ehci_softc *isc = device_get_softc(self);	ehci_softc_t *sc = &isc->base;	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.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {		return (ENOMEM);	}	sc->sc_bus.usbrev = USB_REV_2_0;	/* NB: hints fix the memory location and irq */	rid = 0;	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;	}	/*	 * Craft special resource for bus space ops that handle	 * byte-alignment of non-word addresses.  	 */	sc->sc_io_tag = ar71xx_bus_space_reversed;	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_ACTIVE | RF_SHAREABLE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);	sprintf(sc->sc_vendor, "Atheros");	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, ar71xx_ehci_intr, sc, &sc->sc_intr_hdl);	if (err) {		device_printf(self, "Could not setup irq, %d/n", err);		sc->sc_intr_hdl = NULL;		goto error;	}	/*	 * Arrange to force Host mode, select big-endian byte alignment,	 * and arrange to not terminate reset operations (the adapter	 * will ignore it if we do but might as well save a reg write).	 * Also, the controller has an embedded Transaction Translator	 * which means port speed must be read from the Port Status	 * register following a port enable.	 */	sc->sc_flags = EHCI_SCFLG_SETMODE;	switch (ar71xx_soc) {		case AR71XX_SOC_AR7241:		case AR71XX_SOC_AR7242:		case AR71XX_SOC_AR9130:		case AR71XX_SOC_AR9132:		case AR71XX_SOC_AR9330:		case AR71XX_SOC_AR9331:		case AR71XX_SOC_AR9341:		case AR71XX_SOC_AR9342:		case AR71XX_SOC_AR9344:		case AR71XX_SOC_QCA9533:		case AR71XX_SOC_QCA9533_V2:		case AR71XX_SOC_QCA9556:		case AR71XX_SOC_QCA9558:			sc->sc_flags |= EHCI_SCFLG_TT | EHCI_SCFLG_NORESTERM;			break;		default:			/* fallthrough */			break;	}	/*	 * ehci_reset() needs the correct offset to access the host controller	 * registers. The AR724x/AR913x offsets aren't 0.	*/	sc->sc_offs = EHCI_CAPLENGTH(EREAD4(sc, EHCI_CAPLEN_HCIVERSION));//.........这里部分代码省略.........
开发者ID:cyrilmagsuci,项目名称:freebsd,代码行数:101,


示例17: exynos_ehci_attach

static intexynos_ehci_attach(device_t dev){	struct exynos_ehci_softc *esc;	ehci_softc_t *sc;	bus_space_handle_t bsh;	int err;	esc = device_get_softc(dev);	esc->dev = dev;	sc = &esc->base;	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	if (bus_alloc_resources(dev, exynos_ehci_spec, esc->res)) {		device_printf(dev, "could not allocate resources/n");		return (ENXIO);	}	/* EHCI registers */	sc->sc_io_tag = rman_get_bustag(esc->res[0]);	bsh = rman_get_bushandle(esc->res[0]);	sc->sc_io_size = rman_get_size(esc->res[0]);	/* EHCI HOST ctrl registers */	esc->host_bst = rman_get_bustag(esc->res[1]);	esc->host_bsh = rman_get_bushandle(esc->res[1]);	/* PWR registers */	esc->pwr_bst = rman_get_bustag(esc->res[2]);	esc->pwr_bsh = rman_get_bushandle(esc->res[2]);	/* SYSREG */	esc->sysreg_bst = rman_get_bustag(esc->res[3]);	esc->sysreg_bsh = rman_get_bushandle(esc->res[3]);	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(dev),		&ehci_iterate_hw_softc))		return (ENXIO);	/*	 * Set handle to USB related registers subregion used by	 * generic EHCI driver.	 */	err = bus_space_subregion(sc->sc_io_tag, bsh, 0x0,	    sc->sc_io_size, &sc->sc_io_hdl);	if (err != 0)		return (ENXIO);	phy_init(esc);	/* Setup interrupt handler */	err = bus_setup_intr(dev, esc->res[4], INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)ehci_interrupt, sc,	    &sc->sc_intr_hdl);	if (err) {		device_printf(dev, "Could not setup irq, "		    "%d/n", err);		return (1);	}	/* Add USB device */	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(dev, "Could not add USB device/n");		err = bus_teardown_intr(dev, esc->res[4],		    sc->sc_intr_hdl);		if (err)			device_printf(dev, "Could not tear down irq,"			    " %d/n", err);		return (1);	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	strlcpy(sc->sc_vendor, "Samsung", sizeof(sc->sc_vendor));	err = ehci_init(sc);	if (!err) {		sc->sc_flags |= EHCI_SCFLG_DONEINIT;		err = device_probe_and_attach(sc->sc_bus.bdev);	} else {		device_printf(dev, "USB init failed err=%d/n", err);		device_delete_child(dev, sc->sc_bus.bdev);		sc->sc_bus.bdev = NULL;		err = bus_teardown_intr(dev, esc->res[4],		    sc->sc_intr_hdl);		if (err)			device_printf(dev, "Could not tear down irq,"			    " %d/n", err);		return (1);	}	return (0);}
开发者ID:ele7enxxh,项目名称:dtrace-pf,代码行数:97,


示例18: ehci_obio_attach

static intehci_obio_attach(device_t self){	ehci_softc_t *sc = device_get_softc(self);	uint32_t reg;	int err;	int rid;	/* setup controller interface softc */	reg = rt305x_sysctl_get(SYSCTL_SYSCFG1);	reg |= SYSCTL_SYSCFG1_USB0_HOST_MODE;	rt305x_sysctl_set(SYSCTL_SYSCFG1, reg);	reg = rt305x_sysctl_get(SYSCTL_CLKCFG1);	reg |= SYSCTL_CLKCFG1_UPHY0_CLK_EN;#ifdef MT7620	reg |= SYSCTL_CLKCFG1_UPHY1_CLK_EN;#endif	rt305x_sysctl_set(SYSCTL_CLKCFG1, reg);	reg = rt305x_sysctl_get(SYSCTL_RSTCTRL);	reg |= SYSCTL_RSTCTRL_UPHY0 | SYSCTL_RSTCTRL_UPHY1;	rt305x_sysctl_set(SYSCTL_RSTCTRL, reg);	reg &= ~(SYSCTL_RSTCTRL_UPHY0 | SYSCTL_RSTCTRL_UPHY1);	DELAY(100000);	rt305x_sysctl_set(SYSCTL_RSTCTRL, reg);	DELAY(100000);	/* 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.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {		printf("No mem/n");		return (ENOMEM);	}	rid = 0;	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;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,		RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!(sc->sc_bus.bdev)) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);	sprintf(sc->sc_vendor, "Ralink");	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,		NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		device_printf(self, "Could not setup irq, %d/n", err);		sc->sc_intr_hdl = NULL;		goto error;	}	err = ehci_init(sc);	if (!err) {		err = device_probe_and_attach(sc->sc_bus.bdev);	}	if (err) {		device_printf(self, "USB init failed err=%d/n", err);		goto error;	}	return (0);error:	ehci_obio_detach(self);	return (ENXIO);}
开发者ID:2asoft,项目名称:freebsd,代码行数:92,


示例19: ehci_ebus_attach

static intehci_ebus_attach(device_t self){	ehci_softc_t *sc = device_get_softc(self);	bus_space_handle_t bsh;	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;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {		return (ENOMEM);	}	sc->sc_bus.usbrev = USB_REV_2_0;	rid = 0;	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;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	bsh = rman_get_bushandle(sc->sc_io_res);	/*magic, undocumented initialization*/	bus_space_write_4((sc)->sc_io_tag, bsh, 0x04, 0x106);	bus_space_write_4((sc)->sc_io_tag, bsh, 0x40, (3 << 5)|0x2000);	DELAY(1000);	sc->sc_io_size =  4096;	if (bus_space_subregion(sc->sc_io_tag, bsh, 0x4000000,	    sc->sc_io_size, &sc->sc_io_hdl) != 0)		panic("%s: unable to subregion USB host registers",		    device_get_name(self));	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		ehci_ebus_detach(self);		return (ENXIO);	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);	sprintf(sc->sc_vendor, "Cavium");	err = bus_setup_intr(self,sc->sc_irq_res,	    INTR_TYPE_BIO | INTR_MPSAFE, NULL,	    (driver_intr_t *)ehci_interrupt, sc,	    &sc->sc_intr_hdl);	if (err) {		device_printf(self, "Could not setup error irq, %d/n", err);		ih_err = NULL;		goto error;	}	err = ehci_init(sc);	if (!err) {		err = device_probe_and_attach(sc->sc_bus.bdev);	}	if (err) {		device_printf(self, "USB init failed err=%d/n", err);		goto error;	}	return (0);error:	ehci_ebus_detach(self);	return (ENXIO);}
开发者ID:edgar-pek,项目名称:PerspicuOS,代码行数:88,


示例20: a10_ehci_attach

static inta10_ehci_attach(device_t self){	ehci_softc_t *sc = device_get_softc(self);	bus_space_handle_t bsh;	device_t sc_gpio_dev;	int err;	int rid;	uint32_t reg_value = 0;	/* initialise some bus fields */	sc->sc_bus.parent = self;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {		return (ENOMEM);	}	sc->sc_bus.usbrev = USB_REV_2_0;	rid = 0;	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;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	bsh = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	if (bus_space_subregion(sc->sc_io_tag, bsh, 0x00,	    sc->sc_io_size, &sc->sc_io_hdl) != 0)		panic("%s: unable to subregion USB host registers",		    device_get_name(self));	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);	sprintf(sc->sc_vendor, "Allwinner");        /* Get the GPIO device, we need this to give power to USB */	sc_gpio_dev = devclass_get_device(devclass_find("gpio"), 0);	if (sc_gpio_dev == NULL) {		device_printf(self, "Error: failed to get the GPIO device/n");		goto error;	}	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		device_printf(self, "Could not setup irq, %d/n", err);		sc->sc_intr_hdl = NULL;		goto error;	}	sc->sc_flags |= EHCI_SCFLG_DONTRESET;	/* Enable clock for USB */	a10_clk_usb_activate();	/* Give power to USB */	GPIO_PIN_SETFLAGS(sc_gpio_dev, GPIO_USB2_PWR, GPIO_PIN_OUTPUT);	GPIO_PIN_SET(sc_gpio_dev, GPIO_USB2_PWR, GPIO_PIN_HIGH);	/* Give power to USB */	GPIO_PIN_SETFLAGS(sc_gpio_dev, GPIO_USB1_PWR, GPIO_PIN_OUTPUT);	GPIO_PIN_SET(sc_gpio_dev, GPIO_USB1_PWR, GPIO_PIN_HIGH);	/* Enable passby */	reg_value = A10_READ_4(sc, SW_USB_PMU_IRQ_ENABLE);	reg_value |= SW_AHB_INCR8; /* AHB INCR8 enable */	reg_value |= SW_AHB_INCR4; /* AHB burst type INCR4 enable */	reg_value |= SW_AHB_INCRX_ALIGN; /* AHB INCRX align enable */	reg_value |= SW_ULPI_BYPASS; /* ULPI bypass enable */	A10_WRITE_4(sc, SW_USB_PMU_IRQ_ENABLE, reg_value);	/* Configure port */	reg_value = A10_READ_4(sc, SW_SDRAM_REG_HPCR_USB2);	reg_value |= SW_SDRAM_BP_HPCR_ACCESS;	A10_WRITE_4(sc, SW_SDRAM_REG_HPCR_USB2, reg_value);	err = ehci_init(sc);//.........这里部分代码省略.........
开发者ID:MattDooner,项目名称:freebsd-west,代码行数:101,


示例21: ehci_ps3_attach

static intehci_ps3_attach(device_t dev){	ehci_softc_t *sc = device_get_softc(dev);	int rid, err;	sc->sc_bus.parent = dev;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	sc->sc_bus.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(dev), &ehci_iterate_hw_softc))		return (ENOMEM);	rid = 1;	sc->sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,	    &rid, RF_ACTIVE);	if (!sc->sc_io_res) {		device_printf(dev, "Could not map memory/n");		goto error;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	rid = 1;	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(dev, "Could not allocate irq/n");		return (ENXIO);	}	sc->sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(dev, "Could not add USB device/n");		return (ENXIO);	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	sprintf(sc->sc_vendor, "Sony");	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		device_printf(dev, "Could not setup error irq, %d/n", err);		goto error;	}	sc->sc_vendor_post_reset = ehci_ps3_post_reset;	err = ehci_init(sc);	if (err) {		device_printf(dev, "USB init failed err=%d/n", err);		goto error;	}	err = device_probe_and_attach(sc->sc_bus.bdev);	if (err == 0)		return (0);error:	return (ENXIO);}
开发者ID:2asoft,项目名称:freebsd,代码行数:69,


示例22: uhci_pci_attach

static intuhci_pci_attach(device_t self){	uhci_softc_t *sc = device_get_softc(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.dma_bits = 32;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus, USB_GET_DMA_TAG(self),	    &uhci_iterate_hw_softc)) {		return ENOMEM;	}	sc->sc_dev = self;	pci_enable_busmaster(self);	rid = PCI_UHCI_BASE_REG;	sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_IOPORT, &rid,	    RF_ACTIVE);	if (!sc->sc_io_res) {		device_printf(self, "Could not map ports/n");		goto error;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	sc->sc_io_size = rman_get_size(sc->sc_io_res);	/* disable interrupts */	bus_space_write_2(sc->sc_io_tag, sc->sc_io_hdl, UHCI_INTR, 0);	rid = 0;	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,	    RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	/*	 * uhci_pci_match must never return NULL if uhci_pci_probe	 * succeeded	 */	device_set_desc(sc->sc_bus.bdev, uhci_pci_match(self));	switch (pci_get_vendor(self)) {	case PCI_UHCI_VENDORID_INTEL:		sprintf(sc->sc_vendor, "Intel");		break;	case PCI_UHCI_VENDORID_HP:		sprintf(sc->sc_vendor, "HP");		break;	case PCI_UHCI_VENDORID_VIA:		sprintf(sc->sc_vendor, "VIA");		break;	default:		if (bootverbose) {			device_printf(self, "(New UHCI DeviceId=0x%08x)/n",			    pci_get_devid(self));		}		sprintf(sc->sc_vendor, "(0x%04x)", pci_get_vendor(self));	}	switch (pci_read_config(self, PCI_USBREV, 1) & PCI_USB_REV_MASK) {	case PCI_USB_REV_PRE_1_0:		sc->sc_bus.usbrev = USB_REV_PRE_1_0;		break;	case PCI_USB_REV_1_0:		sc->sc_bus.usbrev = USB_REV_1_0;		break;	default:		/* Quirk for Parallels Desktop 4.0 */		device_printf(self, "USB revision is unknown. Assuming v1.1./n");		sc->sc_bus.usbrev = USB_REV_1_1;		break;	}#if (__FreeBSD_version >= 700031)	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)uhci_interrupt, sc, &sc->sc_intr_hdl);#else	err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    (driver_intr_t *)uhci_interrupt, sc, &sc->sc_intr_hdl);#endif	if (err) {		device_printf(self, "Could not setup irq, %d/n", err);		sc->sc_intr_hdl = NULL;		goto error;	}//.........这里部分代码省略.........
开发者ID:cyrilmagsuci,项目名称:freebsd,代码行数:101,


示例23: atmegadci_attach

static intatmegadci_attach(device_t dev){	struct atmegadci_super_softc *sc = device_get_softc(dev);	int err;	int rid;	/* setup MUSB OTG USB controller interface softc */	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);	}	rid = 0;	sc->sc_otg.sc_io_res =	    bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);	if (!(sc->sc_otg.sc_io_res)) {		err = ENOMEM;		goto error;	}	sc->sc_otg.sc_io_tag = rman_get_bustag(sc->sc_otg.sc_io_res);	sc->sc_otg.sc_io_hdl = rman_get_bushandle(sc->sc_otg.sc_io_res);	rid = 0;	sc->sc_otg.sc_irq_res =	    bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE);	if (!(sc->sc_otg.sc_irq_res)) {		goto error;	}	sc->sc_otg.sc_bus.bdev = device_add_child(dev, "usbus", -1);	if (!(sc->sc_otg.sc_bus.bdev)) {		goto error;	}	device_set_ivars(sc->sc_otg.sc_bus.bdev, &sc->sc_otg.sc_bus);	err = bus_setup_intr(dev, sc->sc_otg.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,	    NULL, (driver_intr_t *)atmegadci_interrupt, sc, &sc->sc_otg.sc_intr_hdl);	if (err) {		sc->sc_otg.sc_intr_hdl = NULL;		goto error;	}	err = atmegadci_init(&sc->sc_otg);	if (!err) {		err = device_probe_and_attach(sc->sc_otg.sc_bus.bdev);	}	if (err) {		goto error;	}	return (0);error:	atmegadci_detach(dev);	return (ENXIO);}
开发者ID:ppaeps,项目名称:freebsd-head,代码行数:63,


示例24: ehci_xls_attach

static intehci_xls_attach(device_t self){	ehci_softc_t *sc = device_get_softc(self);	int err;	int rid;	sc->sc_bus.parent = self;	sc->sc_bus.devices = sc->sc_devices;	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;	/* get all DMA memory */	if (usb_bus_mem_alloc_all(&sc->sc_bus,	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {		return (ENOMEM);	}	rid = 0;	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;	}	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);	sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res);	printf("IO Resource tag %lx, hdl %lx, size %lx/n",	       (u_long)sc->sc_io_tag, (u_long)sc->sc_io_hdl, 	       (u_long)sc->sc_io_size);	rid = 0;	sc->sc_irq_res = bus_alloc_resource(self, SYS_RES_IRQ, &rid,	    PIC_USB_IRQ, PIC_USB_IRQ, 1, RF_SHAREABLE | RF_ACTIVE);	if (sc->sc_irq_res == NULL) {		device_printf(self, "Could not allocate irq/n");		goto error;	}	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);	if (!sc->sc_bus.bdev) {		device_printf(self, "Could not add USB device/n");		goto error;	}	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);	device_set_desc(sc->sc_bus.bdev, xlr_usb_dev_desc);	sprintf(sc->sc_vendor, xlr_vendor_desc);	err = bus_setup_intr(self, sc->sc_irq_res,	    INTR_TYPE_BIO | INTR_MPSAFE, NULL,	    (driver_intr_t *) ehci_interrupt, sc, &sc->sc_intr_hdl);	if (err) {		device_printf(self, "Could not setup irq, %d/n", err);		sc->sc_intr_hdl = NULL;		goto error;	}	err = ehci_init(sc);	if (err) {		device_printf(self, "USB init failed err=%d/n", err);		goto error;	}	err = device_probe_and_attach(sc->sc_bus.bdev);	if (err) {		device_printf(self, "USB probe and attach failed err=%d/n", err);		goto error;	}	return (0);error:	ehci_xls_detach(self);	return (ENXIO);}
开发者ID:BillTheBest,项目名称:libuinet,代码行数:75,



注:本文中的usb_bus_mem_alloc_all函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ usb_bus_mem_free_all函数代码示例
C++ usb_bulk_write函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。