xHC简介

xHC是eXtensible Host Controller for USB,当年由microsoft为了统一USB host的硬件接口提出的。
简单来讲,xHC定义了底层硬件的配置接口,数据请求接口和中断接口。
1. 配置接口:
为了兼容不同vendor的底层硬件接口,xHC要求其寄存器配置接口是地址映射(memory mapped)的。不同于传统的硬件实现,xHC要求硬件的寄存器地址空间映射是按照xHCI规定的布局存放,每个部分的偏移地址和有效条目是从capability register中读出的。
xHCI要求的寄存器布组包括:
capability register:表明本硬件支持的物理特性,标志其余寄存器的偏移地址和有效条目
operational resister:用于控制并监视controller的传输状态和传输方式等连接层以下的特性
runtime register:用于连接层以上的配置和数据请求,比如传输层的数据包,会话层的连接等
Doorbell array:通知寄存器,以slot为单位通知controller有任务下发

2. 上下文接口:
简单来讲,上下文接口是为每个device的状态和配置准备的,基本分为Input Context 和Output Context(又叫Device Context),其中Input Context用于驱动对controller的配置,Output Context用于controller更新当前状态。两者基本的数据结构类似。
Input Context在Output Context的基础上增加了Input Control Context项。基本的数据结构如下:

-------------------------
Input Control Context
-------------------------
Slot Context
-------------------------
EP0 Context
-------------------------
EP1 Context
-------------------------
......
-------------------------
具体的数据结构参考xHCI标准。

xHC以slot为单位,每当host检测到有设备插入时,驱动向controller申请一个slot,用于标识对应本设备的所有传输和配置,用Slot ID唯一标示。所有有关该设备的统一配置信息都使用Input Context的Slot Context来传输,端点相关的配置信息使用Input Context里的EP Context来传输。

2. 数据请求接口:
总体来讲,xHC的其余接口都是以TRB为基本操作接口的,只是TRB类型不同,对应的数据结构有所差异。基本上,TRB是一个存储于normal memory的数据结构,里面携带某次传输的配置信息,数据地址信息,中断状态信息等。
一般来讲,某种TRB有固定的传输方向,比如驱动生产,controller消费或者controller生产,驱动消费。但对于某些特殊的域,驱动和controller可以同时修改。
常用的TRB包括以下几种
a. Transfer TRB:简单的数据buffer描述符,包含信息包括本次传输的相关配置,待传输数据地址,待传输数据,待传输数据大小等。对于每一次传输,驱动都需要为controller分配对应的传输描述符。具体Transfer TRB的数据结构描述见xHCI标准。
b. Event TRB:中断事件TRB,xHC更新该TRB用于汇报当前中断的状态信息。对于每一个interrupter(详见下节),都需要分配一个Event TRB。
c. Command TRB:指令TRB,主要用于驱动向controller下发指令,包括端点配置指令,传输配置指令,设备配置指令等

3. 中断接口:
xHC支持MSI和MSI-X,对于不适用MSI和MSI-X的系统,xHC也支持多个interrupt pin。当多个interrupter使能时,interrupter0成为默认中断,所有对xHC的配置,通用指令等中断都route到中断0,对于Slot和EP相关的中断,可以在Slot Context和TRB里配置使用哪个interrupter。
  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值