Linux那些事儿之我是EHCI 引子

来源:互联网 发布:郑州百知 编辑:程序博客网 时间:2024/04/29 20:07

转眼之间,到了2008年,先祝大家新年快乐,希望新的一年里好运连连,工资猛涨。好久没有写了,一个原因在于,作为一个PHD学生,难免要做一些读paper写paper的琐事,另一个原因就是自己太懒了。大哥甲一如既往,坚持的写作,着实让人钦佩。此时此刻,我情不自禁,作诗一首,北飘奇男子,江南大丈夫。海上常常生明月,江湖就此一枝花。不服不行。

这里主要就linux ehci host controller这部分的代码,谈谈我自己理解。不当之处,请多指正。参考资料,ehci spec和linux-2.6.22.1内核。我尽量少贴代码,把问题讨论清楚。

现在开说,要进行usb传输,得有一个usb host controller, usb主控制器。它与插入系统的USB 设备进行相互操作,并负责处理USB 设备与系统其它部分通信所必需的所有低层次细节。

一个usb2.0主控器如图所示

usb 2.0定义了低速(ls),全速(fs),高速(hs)传输。EHCI仅仅支持高速传输,所以它必须还要有一个companion HC,如(UHCI)来支持低速和全速设备,情况时这样的:

1), fs/ls 设备插入到root hub port,会由companion HC(uhci/ohci)发现并管理设备;

2),fs/ls 设备插入到usb 2.0 hub(not root hub),那么由ehci 通过split transaction和transanction translation(tt)支持fs/ls 设备。

比如,当一个usb设备插入root hub port时,先要做一件routing的事情。所有的root hub port默认是被EHCI占有的,所以,EHCI和插入的usb设备通信,看是不是hs设备,如果是好说。如果不是,EHCI就放弃这个port的占有权,让给companion HC(uhci/ohci)去管理。