UEFI中EHCI驱动的实现框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UEFI中EHCI驱动的实现框架相关的知识,希望对你有一定的参考价值。
本文从数据结构的角度看一下EHCI的初始化:
下图是EHCI驱动中涉及的主要数据结构的关系图:
1.Struct USB2_HC_DEV是Host controller的核心数据结构,在初始化过程中创建;QTD、QH的数据结构的定义位于 EHCI spec 3.5/3.6;
2.管理controller和bulk传输:插入Asynchronous Schedule list
//把组装好的Qh插入EHCI主控制器的Asynchronous Schedule List,以便硬件执行传输命令 EhcLinkQhToAsync (Ehc, Urb->Qh); //阻塞式的执行此次controller传输 Status = EhcExecTransfer (Ehc, Urb, TimeOut); //从Asynchronous Schedule List中将其移除 EhcUnlinkQhFromAsync (Ehc, Urb->Qh);
3.管理isochronous和interrupt传输:插入Periodic schedule frame list
//把组装好的Qh插入EHCI主控制器的Periodic schedule frame list,以便硬件执行传输命令 EhcLinkQhToPeriod (Ehc, Urb->Qh); //并把URB插入异步中断传输链表 &Ehc->AsyncIntTransfers InsertHeadList (&Ehc->AsyncIntTransfers, &Urb->UrbList);
4.插入硬件链表的URB,硬件会自动执行发送;
5.链表&Ehc->AsyncIntTransfers是由驱动程序创建并管理的,由EhcMonitorAsyncRequests()管理;
(1)他会循环&Ehc->AsyncIntTransfers上的每个urb;
(2)通过判断QTD.status来判断执行结果(一个urb中包含一个QH和一串QTD);
(3)更新QH,为下一轮异步传输准备;
(4)如果有回调函数,执行回调函数。
6.总结:EHCI驱动初始化完成后,硬件负责维护两个链表(自动发送上面的数据),软件负责维护一个链表(用来周期查询Periodic list中的URB的执行结果,并调用回调函数)。
以上是关于UEFI中EHCI驱动的实现框架的主要内容,如果未能解决你的问题,请参考以下文章