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] 介紹