Usb(8)

usb_hub  有这样一个变量quiescing

 

如果这个值设置成 1,表示这个usb_hub 是静止的,驱动也就不会向所有的port 发送

请求状态的报文。

Hub_events走到这里就可以continue

如果error 被设置了值,那就需要重启了

usb_reset_composite_device

首先需要判断这个设备的状态

如果是suspend 或者是noattach,那么就直接返回失败

我们在reset的过程中,不能进行autosuspend

对于一个usb_device 来说,可能有多个interface

如果这些interface对应的设备已经注册,且有驱动,则调用他们的预重启函数

当然重启后还得调用他们的postreset函数

接下来开始真正的重启这个usb_hub设备

再次检查这个usb_device的状态

先找到这个usb_device 对应的usb_hub ,将对应的port 设置为busy

重启后 端点0 的最大包长度可能会发生改变

 

hub_port_init 重新初始化

这个函数是重启设备使用的,指定设备地址,获取设备描述符

前提是这个设备的连接是稳定的

如果是被一个已经存在的设备调用,那么就需要上锁

Root hub port 重启所使用的时间比较长,超时设置成50ms

如果这个设备是一个低速设备,超时时间设置得更长200ms

发生控制包 获取描述

真正开始重启hubport

管道号的生成

设备号左移8位,端点号左移15

你可能感兴趣的:(interface,events)