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 Driver> 探测到的 <EPF device> 类型设备,用户必须在 <EPF DriverN> 内部创建一个目录。
每个 <EPF device> 目录都包含以下条目,可用于配置端点功能的标准配置头。(这些条目在创建任何新的 <EPF Device> 时由框架创建)
.. <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 Device> 目录可以包含指向其他 <EPF Device> 的符号链接列表 (<Symlink EPF Device 31>)。这些符号链接应由用户创建,以表示绑定到物理功能的虚拟功能。在上述目录结构中,<EPF Device 11> 是一个物理功能,<EPF Device 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 Device> 目录将包含指向 <EPF Device> 的符号链接列表。这些符号链接应由用户创建,以表示端点设备中存在的功能。只有表示物理功能的 <EPF Device> 才能链接到 EPC 设备。
<EPC Device> 目录还将有一个 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] 介绍