码迷,mamicode.com
首页 > 其他好文 > 详细

UEFI中EHCI驱动的实现框架(二)

时间:2017-11-11 21:33:04      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:div   实现   框架   link   class   strong   pre   monitor   分享   

本文从数据结构的角度看一下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驱动的实现框架(二)

标签:div   实现   框架   link   class   strong   pre   monitor   分享   

原文地址:http://www.cnblogs.com/nju347/p/7819956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!