USB驱动 hub.c相关代码流程梳理

USB Hub 驱动概览

初始化和注册
  1. 初始化 (usb_hub_init):

    • 注册 USB hub 驱动使用 usb_register
    • 分配一个工作队列来处理 hub 事件。
  2. 驱动注册 (hub_driver):

    • 定义 probe、disconnect、suspend、resume 和其他回调函数。
    • 定义 ID 表以匹配特定的 hub 设备。
Hub 处理流程
  1. Reset 处理 (hub_pre_resethub_post_reset):

    • hub_pre_reset: 在 hub 进入重置之前执行必要的准备动作。
      • 设置 hub->in_reset 标记。
      • 为所有端口设置电源管理屏障。
    • hub_post_reset: 在 hub 重置后执行恢复动作。
      • 清除 hub->in_reset 标记。
      • 为所有端口设置电源管理屏障。
      • 激活 hub。
  2. Hub 配置 (hub_configure):

    • 分配内存以存储 hub 描述符、状态等信息。
    • 读取 hub 描述符。
    • 计算延迟。
    • 创建端口数组。
  3. 端口状态处理 (port_event):

    • 解析端口状态和变化。
    • 清除状态标志。
    • 如果连接状态改变,则重新验证连接或者发起连接过程。
    • 处理过流事件通知。
  4. 设备重置和验证 (usb_reset_and_verify_device):

    • 禁用 USB2 硬件 LPM。
    • 禁用 LPM。
    • 重新初始化端点0。
    • 调用 hub_port_init 来初始化端口。
    • 检查设备描述符是否发生改变。
    • 恢复设备的先前配置。
    • 分配带宽资源。
    • 设置配置。
    • 设置接口。
  5. 端口连接状态改变处理 (hub_port_connect_change):

    • 如果连接状态改变并且有已连接的设备,则尝试重新验证连接。
    • 如果设备处于挂起状态并且允许持久启用,则触发远程唤醒事件。
    • 如果需要进一步处理,则调用 hub_port_connect 函数处理连接。
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值