`
javatome
  • 浏览: 824638 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux那些事儿之我是EHCI(3) pci match 和 probe

 
阅读更多

pci_bus_type 定义如下,

structbus_typepci_bus_type=...{
.name
="pci",
.match
=pci_bus_match,
.uevent
=pci_uevent,
.probe
=pci_device_probe,
.remove
=pci_device_remove,
.suspend
=pci_device_suspend,
.suspend_late
=pci_device_suspend_late,
.resume_early
=pci_device_resume_early,
.resume
=pci_device_resume,
.shutdown
=pci_device_shutdown,
.dev_attrs
=pci_dev_attrs,
}
;
staticintpci_bus_match(structdevice*dev,structdevice_driver*drv)
...{
structpci_dev*pci_dev=to_pci_dev(dev);
structpci_driver*pci_drv=to_pci_driver(drv);
conststructpci_device_id*found_id;

found_id
=pci_match_device(pci_drv,pci_dev);
if(found_id)
return1;

return0;
}

总的来说,判断一个设备和驱动是否匹配,是看设备的描述符是否和驱动所支持的一样。pci_match_device()分别在driver->dynid,driver->id_table这两个列表(由一系列的pci_device_id构成)里面查找。找到则返回这个设备的pci_device_id。(不妨比较一下pci_bus_type->match 和 usb_bus_type->match)

structpci_device_id...{
__u32vendor,device;
/**//*VendoranddeviceIDorPCI_ANY_ID*/
__u32subvendor,subdevice;
/**//*SubsystemID'sorPCI_ANY_ID*/
__u32
class,class_mask;/**//*(class,subclass,prog-if)triplet*/
kernel_ulong_tdriver_data;
/**//*Dataprivatetothedriver*/
}
;

注意,pci_device_id->driver_data指向了每个pci设备驱动所特有的数据结构,比如ehci来说:.driver_data =(unsigned long) &ehci_pci_hc_driver。

另外就是,

staticintpci_device_probe(structdevice*dev)
...{
interror=0;
structpci_driver*drv;
structpci_dev*pci_dev;

drv
=to_pci_driver(dev->driver);
pci_dev
=to_pci_dev(dev);
pci_dev_get(pci_dev);
error
=__pci_device_probe(drv,pci_dev);
if(error)
pci_dev_put(pci_dev);

returnerror;
}

pci_device_probe()---> __pci_device_probe() ---> pci_call_probe() ---> ( pci_driver->probe() )

而ehci_pci_driver->probe = usb_hcd_pci_probe()。像pci_device_probe的外包函数,就是一种面向对象的设计。不管怎样,经历了千辛万苦,咱终于绕到usb了。

分享到:
评论

相关推荐

    Linux那些事儿之我是EHCI主机控制器.pdf

    Linux那些事儿之 系列 之 我是EHCI主机控制器 很不错的教程。通俗易懂。 全系列: Linux那些事儿 系列之2 Block+EHCI+PCI+SCSI http://download.csdn.net/source/1369471

    Linux那些事儿 系列之2 Block+EHCI+PCI+SCSI

    Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是PCI.pdf Linux那些事儿之我是SCSI硬盘.pdf 注: 之前有人已经上传了《Linux那些事儿 系列》,其已经包含了:hub,sysfs,UHCI,usb core,U盘,此处,先...

    linux那些事儿(EHCI Block SCSI Sysfs PCI USB U 盘 UHCI Hub)

    Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是Block层.pdf Linux那些事儿之我是SCSI硬盘.pdf Linux那些事儿之我是Sysfs.pdf Linux那些事儿之我是PCI.pdf Linux那些事儿之我是USB core.pdf Linux 那些...

    Linux那些事儿

    Linux那些事儿之我是EHCI控制器 Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Block层 Linux那些事儿之我是Sysfs 今天本人将9个单独的文档整理出来,做成了一个单独的文档,配有书签,...

    Linux那些事儿1-9合集

    由复旦fudan_abc写的,风趣的文笔,深入浅出地讲解了Linux内核相关...Linux那些事儿之我是EHCI主机控制器 Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Block层 linux那些事儿之我是Sysfs

    Linux那些事儿之全集

    导读.doc Linux那些事儿之我是Block层.pdf Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是Hub.pdf Linux那些事儿之我是USB_core.pdf Linux那些事儿之我是U盘.pdf等等 Linux那些事儿系列全在这里了

    linux的那些事儿全集

    Linux那些事儿之我是EHCI主机控制器 Linux那些事儿之我是Hub Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Sysfs Linux那些事儿之我是UHCI Linux那些事儿之我是USB core Linux那些事儿之...

    linux那些事全集

    Linux那些事儿之我是U盘 Linux那些事儿之我是USB_core Linux那些事儿之我是UHCI ...Linux那些事儿之我是PCI Linux那些事儿之我是Hub Linux那些事儿之我是EHCI主机控制器 Linux那些事儿之我是Block层

    Linux那些事儿.rar

    包括:Linux那些Linux那些事儿之我是SCSI硬盘,Linux那些事儿之我是Block层,Linux那些事儿之我是EHCI主机控制器,Linux那些事儿之我是HUB,Linux那些事儿之我是PCI,Linux那些事儿之我是Sysfs,Linux那些事儿之我是...

    Linux那些事儿之我是XXX全集.rar

    Linux那些事儿之我是XXX全集 包含USB core U盘 UHCI PCI SCSI硬盘 Block Hub EHCI 。 想学驱动的童鞋,不妨看看。该书主要是进行源代码的分析

    微信生活缴费商业项目标准版

    包括:Linux那些Linux那些事儿之我是SCSI硬盘,Linux那些事儿之我是Block层,Linux那些事儿之我是EHCI主机控制器,Linux那些事儿之我是HUB,Linux那些事儿之我是PCI,Linux那些事儿之我是Sysfs,Linux那些事儿之我是...

    usb那些事的全集

    2 Linux那些事儿之我是EHCI主机控制器 3 Linux那些事儿之我是HUB 4 Linux那些事儿之我是PCI 5 Linux那些事儿之我是SCSI硬盘 6 Linux那些事儿之我是Sysfs 7 Linux那些事儿之我是UHCI 8 Linux那些事儿之我是USB+core 9...

    Linux那些事儿[完整版]自己整理

    我是U盘 说的是2.6.10的内核 我是Sysfs 说的是2.6.10的内核 戏说USB 说的是2.6.22的内核 我是Hub/UHCI/EHCI 说的是2.6.22.1的内核

    linux那些事儿.rar

    linux那些事儿,Block层,EHCI主机控制器,Hub,PCI,SCSI硬盘,Sysfs,UHCI,USB core,U盘等文档。

    ehci-pci.zip_ehci

    linux系统上,EHCI主控制器USB驱动程序。

    LINUX那些事儿 linux经典之作

    我是Hub/UHCI/EHCI 说的是2.6.22.1的内核 其中我是U盘属于基础性的.这一阶段会遇到一些问题.比如urb提交之后究竟怎么处理的?用户空间究竟是如何访问U盘的?DMA究竟怎么回事. 这之后可以开始看Hub.这一阶段你会明白一...

    ehci文档,较全,linux驱动

    ehci文档,较全,linux驱动,详细的讲解

    Linux那些事系列合集pdf

    本文是Linux那些事系列的合集,包括USB,EHCI,PCI,EHCI,BLOCK,U盘等,是非常好的参考资料

    Linux那些事儿系列

    通俗易懂的设备驱动程序资料,总共有9个PDF文件 U盘、USB、HUB、EHCI、PCI、UHCI、block、SCSI、sysfs

Global site tag (gtag.js) - Google Analytics