USB驱动之主机控制器驱动

本文介绍了USB主机控制器驱动的结构,包括OHCI、UHCI和EHCI。OHCI适用于非PC系统和特定芯片组,UHCI常见于多数PC主板,而EHCI是USB 2.0提出的,兼容OHCI和UHCI。Linux内核中的usb_hcd结构体描述了USB主机控制器,其hc_driver成员包含操作控制器的函数。OHCI驱动通过ohci_hcd结构体实现,文章还详细阐述了如何初始化和管理OHCI控制器。
摘要由CSDN通过智能技术生成

USB 主机驱动的整体结构:
USB 主机控制器有 34种规格:OHCI (Open Host Controller Interface)、UHCI(Universal Host ControllerInterface) 和 EHCI (Enhanced Host Controller Interface)。OHCI 驱动程序用来为非 PC 系统上以及带有 SiS 和 ALi 芯片组的 PC 主板上的 USB芯片提供支持。UHCI 驱动程序多用来为大多数其他 PC 主板(包括 Intel 和 Via)上的 USB 芯片提供支持。 EHCI 由 USB 2.0 规范所提出, 它兼容于 OHCI 和 UHCI。 UHCI的硬件线路比 OHCI 简单,所以成本较低,但需要较复杂的驱动程序,CPU 负荷稍重。XHCI,即可拓展主机控制器接口是Intel公司开发的一个USB主机控制器接口,它目前主要面向USB3.0,也支持USB 2.0及以下设备。

1.主机控制器驱动
在 Linux 内核中,用 usb_hcd 结构体描述 USB 主机控制器驱动,它包含 USB 主机控制器的“家务”信息、硬件资源、状态描述和用于操作主机控制器的 hc_driver等
usb_hcd结构体

1 struct usb_hcd
2 {
3 /* 管理“家务” */
4 struct usb_bus self;
5 const char *product_desc; /* 产品/厂商字符串 */
6 char irq_descr[24]; /* 驱动 + 总线 # */
7
8 struct timer_list rh_timer; /* 根 Hub 轮询 */
9 struct urb *status_urb; /* 目前的状态 urb */
10
11 /* 硬件信息/状态 */
12 const struct hc_driver *driver; /* 硬件特定的钩子函数 */
13
14 /* 需要维护的标志 */
15 unsigned long flags;
16 #define HCD_FLAG_HW_ACCESSIBLE 0x00000001
17 #define HCD_FLAG_SAW_IRQ 0x00000002
18
19 unsigned rh_registered: 1; /* 根 Hub 注册? */
20
21 /* 下一个标志的采用只是“权益之计”,当所有 HCDs 支持新的根 Hub 轮询机制后将
移除 */
22 unsigned uses_new_polling: 1;
23 unsigned poll_rh: 1; /* 轮询根 Hub 状态? */
24 unsigned poll_pending: 1; /* 状态已经改变? */
25
26 int irq; /* 被分配的 irq */
27 void _ _iomem *regs; /* 设备内存和 I/O */
28 u64 rsrc_start; /* 内存和 I/O 资源开始位置 */
29 u64 rsrc_len; /* 内存和 I/O 资源长度 */
30 unsigned power_budget; /* mA, 0 = 无限制 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值