usb驱动开发16——设备生命线

本文详细介绍了USB主机控制器(HCD)的struct usb_hcd结构,包括引用计数、产品描述、电源管理、驱动结构、根集线器的相关属性。重点讨论了root hub的生命线,如状态、定时器、中断处理,以及如何通过usb_add_hcd()、register_root_hub()等函数进行初始化和注册。此外,文章还提到了新旧中断轮询机制的差异,以及如何通过DMA池管理DMA缓冲区。
摘要由CSDN通过智能技术生成

回到struct usb_hcd,继续努力的往下看。

kref,usb主机控制器的引用计数。struct usb_hcd也有自己专用的引用计数函数,看hcd.c文件:

static void hcd_release (struct kref *kref)
{
   
	struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);

	kfree(hcd);
}

struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd)
{
   
	if (hcd)
		kref_get (&hcd->kref);
	return hcd;
}
EXPORT_SYMBOL (usb_get_hcd);

void usb_put_hcd (struct usb_hcd *hcd)
{
   
	if (hcd)
		kref_put (&hcd->kref, hcd_release);
}
EXPORT_SYMBOL (usb_put_hcd);

和struct urb差不多,如果不明白就回去看看聊struct urb吧。

product_desc,主机控制器的产品描述字符串,对于UHCI,它为“UHCI Host Controller”,对于EHCI,它为“EHCI Host Controller”。

irq_descr[24],这里边儿保存的是“ehci-hcd:usb1”之类的字符串,也就是驱动名加上总线编号。

CONFIG_PM,电源管理相关,飘过。

driver,每个主机控制器驱动都有一个struct hc_driver结构体。有兴趣的去看看它在hcd.h里的定义。和usb_driver、pci_driver一样,所有的xxx_driver都有一堆函数指针,这里只说下函数指针之外的东西,也就是开头儿的那三个成员。description直白点说就是驱动的大名,比如对于UHCI,它是“uhci_hcd”,对于EHCI,它就是“ehci_hcd”。product_desc和struct usb_hcd里的那个是一个样儿。hcd_priv_size还是有点儿意思的,前面喝那杯茶的时候提到过,每个主机控制器驱动都会有一个私有结构体,藏在struct usb_hcd最后的那个变长数组里,这个变也是相对的,在创建usb_hcd的时候也得知道它能变多长,不然谁知道要申请多少内存啊,这个长度就hcd_priv_size。

flags,属于HCD的一些标志,可用值就在接下来的HCD_FLAG_HW_ACCESSIBLE和HCD_FLAG_SAW_IRQ两行,至于什么作用,用到时候再聊。

rh_timer,status_urb,rh_registered ,poll_pending,poll_rh,poll_pending这几行都是专为root hub服务的。一个host con

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kcyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值