usb

来源:互联网 发布:java遍历json数组对象 编辑:程序博客网 时间:2024/04/30 02:34

HCD  : usb host controller devices


uhci(universal host controller interface): Intel用在自家芯片组上的usb 1.1主控制器(host controller)的硬件实例
    ehci(enhanced host controller interface): usb 2.0的主控制器标准接口。
     ohci(open host controller inferface):一个不仅仅是usb用的主控制器接口标准。主要是遵循csr (configuration space register)标准。是其他厂商在设计usb host controller时遵循的标准,如via, nec, ali, 包括nvidia等等。

不同的接口对应不同的桥接器


首先,EHCIUHCI的区别之一就在于探寻她们内心世界的方式不同.甭管EHCI还是UHCI,她们都有自己的内心世界.访问外设的内心世界通常有两种方法,一种是Memory-mapped I/O,一种是Port-mapped I/O.EHCIOHCI都是这种Memory-mapped I/O,UHCI则剑走偏锋,选择了Port-mapped I/O.


int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)中的一段代码

****

    if (driver->flags & HCD_MEMORY) {
        /* EHCI, OHCI */
        hcd->rsrc_start = pci_resource_start(dev, 0);
        hcd->rsrc_len = pci_resource_len(dev, 0);
        if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len,
                driver->description)) {
            dev_dbg(&dev->dev, "controller already in use\n");
            retval = -EBUSY;
            goto clear_companion;
        }
        hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len);
        if (hcd->regs == NULL) {
            dev_dbg(&dev->dev, "error mapping memory\n");
            retval = -EFAULT;
            goto release_mem_region;
        }

    } else {
        /* UHCI */
        int    region;

        for (region = 0; region < PCI_ROM_RESOURCE; region++) {
            if (!(pci_resource_flags(dev, region) &
                    IORESOURCE_IO))
                continue;

            hcd->rsrc_start = pci_resource_start(dev, region);
            hcd->rsrc_len = pci_resource_len(dev, region);
            if (request_region(hcd->rsrc_start, hcd->rsrc_len,
                    driver->description))
                break;
        }
        if (region == PCI_ROM_RESOURCE) {
            dev_dbg(&dev->dev, "no i/o regions available\n");
            retval = -EBUSY;
            goto clear_companion;
        }
    }

*****

0 0