9.3. 使用 CONFIGFS 配置 PCI 端点

作者:

Kishon Vijay Abraham I <kishon@ti.com>

PCI 端点核心暴露 configfs 条目 (pci_ep) 用于配置 PCI 端点功能并将端点功能与端点控制器绑定。(有关引入其他机制来配置 PCI 端点功能的,请参阅 [1])。

9.3.1. 挂载 configfs

PCI 端点核心层在挂载的 configfs 目录中创建 pci_ep 目录。可以使用以下命令挂载 configfs

mount -t configfs none /sys/kernel/config

9.3.2. 目录结构

pci_ep configfs 在其根目录下有两个目录:controllers 和 functions。系统中存在的每个 EPC 设备在 *controllers* 目录中都会有一个条目,系统中存在的每个 EPF 驱动程序在 *functions* 目录中都会有一个条目。

/sys/kernel/config/pci_ep/
        .. controllers/
        .. functions/

9.3.3. 创建 EPF 设备

每个注册的 EPF 驱动程序都将列在 controllers 目录中。与 EPF 驱动程序对应的条目将由 EPF 核心创建。

/sys/kernel/config/pci_ep/functions/
        .. <EPF Driver1>/
                ... <EPF Device 11>/
                ... <EPF Device 21>/
                ... <EPF Device 31>/
        .. <EPF Driver2>/
                ... <EPF Device 12>/
                ... <EPF Device 22>/

为了创建由 <EPF 驱动程序> 探测的类型的 <EPF 设备>,用户必须在 <EPF 驱动程序N> 内创建一个目录。

每个 <EPF 设备> 目录都包含以下条目,这些条目可用于配置端点功能的标准配置标头。(这些条目在创建任何新的 <EPF 设备> 时由框架创建)

.. <EPF Driver1>/
        ... <EPF Device 11>/
                ... vendorid
                ... deviceid
                ... revid
                ... progif_code
                ... subclass_code
                ... baseclass_code
                ... cache_line_size
                ... subsys_vendor_id
                ... subsys_id
                ... interrupt_pin
                ... <Symlink EPF Device 31>/
                ... primary/
                        ... <Symlink EPC Device1>/
                ... secondary/
                        ... <Symlink EPC Device2>/

如果一个 EPF 设备必须与 2 个 EPC 相关联(例如在非透明桥的情况下),则应在“primary”目录中添加连接到主接口的端点控制器的符号链接,并在“secondary”目录中添加连接到辅助接口的端点控制器的符号链接。

<EPF 设备> 目录可以具有指向其他 <EPF 设备> 的符号链接列表 (<符号链接 EPF 设备 31>)。这些符号链接应由用户创建,以表示绑定到物理功能的虚拟功能。在上面的目录结构中,<EPF 设备 11> 是一个物理功能,<EPF 设备 31> 是一个虚拟功能。一旦 EPF 设备链接到另一个 EPF 设备,它就不能链接到 EPC 设备。

9.3.4. EPC 设备

每个注册的 EPC 设备都将列在 controllers 目录中。与 EPC 设备对应的条目将由 EPC 核心创建。

/sys/kernel/config/pci_ep/controllers/
        .. <EPC Device1>/
                ... <Symlink EPF Device11>/
                ... <Symlink EPF Device12>/
                ... start
        .. <EPC Device2>/
                ... <Symlink EPF Device21>/
                ... <Symlink EPF Device22>/
                ... start

<EPC 设备> 目录将具有指向 <EPF 设备> 的符号链接列表。这些符号链接应由用户创建,以表示端点设备中存在的功能。只有表示物理功能的 <EPF 设备> 才能链接到 EPC 设备。

<EPC 设备> 目录还将具有一个 *start* 字段。一旦将 “1” 写入此字段,端点设备将准备好与主机建立链接。这通常在创建所有 EPF 设备并将其与 EPC 设备链接后完成。

| controllers/
       | <Directory: EPC name>/
               | <Symbolic Link: Function>
               | start
| functions/
       | <Directory: EPF driver>/
               | <Directory: EPF device>/
                       | vendorid
                       | deviceid
                       | revid
                       | progif_code
                       | subclass_code
                       | baseclass_code
                       | cache_line_size
                       | subsys_vendor_id
                       | subsys_id
                       | interrupt_pin
                       | function

[1] 简介