fxhci.md 3.9 KB

FXHCI 驱动程序

1. 概述

XHCI,即可扩展的主机控制器接口,是英特尔公司开发的一个USB主机控制器接口,它主要是面向USB 3.0的,同时它也支持USB 2.0及以下的设备,包括所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed),是UHCI/OHCI/EHCI等接口标准的升级版本

XHCI接口架构主要包括三大部分,

  1. 主机配置空间(Host Configuration Space)
  • 每个xHC实现都应包括一种通过系统软件识别和枚举主机控制器的方法。本规范提供了一个主机配置空间的PCI示例,它被称为PCI配置空间。PCI配置空间定义提供了一个关于系统xHC枚举和资源(中断、电源、虚拟化等)的配置空间使用的工作示例
  1. 寄存器空间(MMIO Space)
  • 寄存器空间表示xHC向驻留在内存地址空间中的系统软件提供的硬件寄存器。寄存器空间提供了在xHCI正常和扩展功能寄存器中定义的实现特定参数、操作和运行时控制和状态寄存器,以及用于标记对单个USB设备的访问的门钟阵列。该空间,通常被称为I/O空间,被实现为内存映射的I/O(MMIO)空间
  1. 主机空间(Host Memory)
  • 主机空间由控制数据结构(设备上下文基地址阵列、设备上下文、传输环等)定义。以及由xHC驱动程序分配和管理的数据缓冲区,以启用单个设备的端点流量。此空间将在内存地址空间的内核和用户区域中分配

2. 功能

  • 驱动相关的源文件如下,

    drivers/usb/fxhci
    ├── fxhci.c
    ├── fxhci.h
    ├── fxhci_cmd.c
    ├── fxhci_debug.c
    ├── fxhci_dev.c
    ├── fxhci_evt.c
    ├── fxhci_hw.c
    ├── fxhci_hw.h
    ├── fxhci_private.h
    └── fxhci_roothub.c
    

3. 配置方法

  • 1. 通过 PCIe 总线连接或者板载外设, 连接 XHCI 控制器
  • 2. 如果使用 PCIe 总线连接的 XHCI 控制器,先调用 FPCIE 驱动完成设备枚举和 PCIe 配置
  • 3. 初始化 FUSB 驱动,通过 FUSB 驱动框架,初始化 FXHCI 控制器驱动
  • 4. 通过 FUSB 驱动完成控制器和设备初始化
  • 5. 调用 FUSB 轮询接口更新设备状态

4 应用示例

5. API参考

5.1. 用户数据结构

5.2 错误码定义

  • [1] FXHCI_CC_SUCCESS : success
  • [-65] FXHCI_CC_TIMEOUT : wait transfer timeout
  • [-66] FXHCI_CC_CONTROLLER_ERROR : usb controller in wrong state
  • [-67] FXHCI_CC_COMMUNICATION_ERROR : communication error
  • [-68] FXHCI_CC_OUT_OF_MEMORY : memory used up
  • [-69] FXHCI_CC_DRIVER_ERROR : driver in wrong state
  • [-1] FXHCI_CC_GENERAL_ERROR : general error
  • [0] FXHCI_CC_ZERO_BYTES : failed, transfer zero bytes

下列错误码来自XHCI标准

  • [5] FXHCI_CC_TRB_ERROR : TRB error (XHCI spec.)
  • [6] FXHCI_CC_STALL_ERROR : stall error (XHCI spec.)
  • [7] FXHCI_CC_RESOURCE_ERROR : resource error (XHCI spec.)
  • [8] FXHCI_CC_BANDWIDTH_ERROR : bandwidth error (XHCI spec.)
  • [9] FXHCI_CC_NO_SLOTS_AVAILABLE : No available slot error (XHCI spec.)
  • [13] FXHCI_CC_SHORT_PACKET : short packet error (XHCI spec.)
  • [21] FXHCI_CC_EVENT_RING_FULL_ERROR : event ring full error (XHCI spec.)
  • [24] FXHCI_CC_COMMAND_RING_STOPPED : command ring stopped error (XHCI spec.)
  • [25] FXHCI_CC_STOPPED : command abort error (XHCI spec.)
  • [26] FXHCI_CC_TRB_ERROR : stopped error (XHCI spec.)
  • [27] FXHCI_CC_STOPPED_LENGTH_INVALID : stopped invalid length error (XHCI spec.)

5.3. 用户API接口

FXhciHcInit

FUsbHc *FXhciHcInit (FUsb *instance, uintptr base_addr)

Note:

  • 创建XHCI USB 控制器实例,完成初始化

Input:

  • {FUsb} *instance, USB实例
  • {uintptr} base_addr, XHCI控制器基地址

Return:

  • {FUsbHc *} 类型为XHCI的USB控制器实例