中止待处理事务会导致EHCI松散dt同步 [英] aborting pending transaction causes EHCI to loose dt synchronization

查看:104
本文介绍了中止待处理事务会导致EHCI松散dt同步的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在实现一个类驱动程序,有时我需要在BULK-IN管道上中止事务。每当我这样做时(隐含地通过挂起事务的ClosingTranferHandle()),BULK-IN管道将变得无效。所有以下交易
都在线路上进行,但控制器似乎永远不会完成它们(即USB堆栈永远不会得到通知)。我们已将此追溯到EHCI控制器推进"dt"。虽然没有转移实际发生了
,但是在中止的交易上有点位(所有转移请求都被设备NACK)。我们认为在"dt"之后中止后EHCI控制器与设备不同步并且忽略所有后续转移。 

I am implementing a class driver in which sometimes I need to abort a transaction on a BULK-IN pipe. Whenever I do this (implicitly by ClosingTranferHandle() of pending transaction) the BULK-IN pipe will become nonfunctional. All following transactions are conducted on the wire but the controller never seems to complete them (ie. USB stack sw never gets notified). We have traced this to the EHCI controller advancing the "dt" bit on the aborted transaction despite no transfers actually occurred (all transfer requests were NACKed by device). We think after "dt" is flipped after abort the EHCI controller is out of synch with device and ignores all following transfers. 

在实验中,我们注意到当我们手动清除覆盖中的有效位时队列头中待处理事务的区域然后执行正常的"中止事务" (如在EHCI CQPipe类中),系统继续正常工作。然而,不是USB b $ b专家我不确定这是一个理智的解决方案。

In experiments, we noticed that when we manually clear the active bit in overlay area of pending transaction in queue head and then perform normal "abort transaction" (as in EHCI CQPipe class), the system continues to work normally. However, not being an expert in USB I am not sure this is a sane solution.

 

任何遗嘱或评论欢迎。

 

问候,

Michal

 

 

推荐答案

正在中止事务可以暂停usb端点。如果暂停,则类驱动程序可以重置管道以清除暂停状态。
Aborting a ongoing transaction can halt the usb endpoint. If halted then the class driver can reset the pipe to clear the halt status.


这篇关于中止待处理事务会导致EHCI松散dt同步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆