華為乙太網裝置驅動 (hinic3) 系列的 Linux 核心驅動

概述

hinic3 是用於資料中心的網路介面卡 (NIC)。它支援一系列鏈路速度裝置(10GE、25GE、100GE 等)。hinic3 裝置可以具有多種物理形式:LOM(主機板上區域網)NIC、PCIe 標準 NIC、OCP(開放計算專案)NIC 等。

hinic3 驅動程式支援以下功能:- IPv4/IPv6 TCP/UDP 校驗和解除安裝 - TSO(TCP 分段解除安裝)、LRO(大接收解除安裝)- RSS(接收端縮放)- MSI-X 中斷聚合配置和中斷適配。- SR-IOV(單根 I/O 虛擬化)。

內容

  • 支援的 PCI 供應商 ID/裝置 ID

  • Hinic3 驅動程式的原始碼結構

  • 管理介面

支援的 PCI 供應商 ID/裝置 ID

19e5:0222 - hinic3 PF/PPF 19e5:375F - hinic3 VF

主物理功能 (PPF) 負責整個網絡卡的管理。例如,NIC 和主機之間的時鐘同步。任何 PF 都可以用作 PPF。 PPF 是動態選擇的。

Hinic3 驅動程式的原始碼結構

hinic3_pci_id_tbl.h

支援的裝置 ID

hinic3_hw_intf.h

硬體和驅動程式之間的介面

hinic3_queue_common.[ch]

NIC 佇列的通用結構和方法

hinic3_common.[ch]

Linux 中記憶體操作的封裝

hinic3_csr.h

BAR 中的暫存器定義

hinic3_hwif.[ch]

BAR 的介面

hinic3_eqs.[ch]

AEQ 和 CEQ 的介面

hinic3_mbox.[ch]

郵箱的介面

hinic3_mgmt.[ch]

基於郵箱和 AEQ 的管理介面

hinic3_wq.[ch]

工作佇列資料結構和介面

hinic3_cmdq.[ch]

命令佇列用於將命令釋出到硬體

hinic3_hwdev.[ch]

硬體結構和方法抽象

hinic3_lld.[ch]

輔助驅動程式適配層

hinic3_hw_comm.[ch]

通用硬體操作的介面

hinic3_mgmt_interface.h

韌體和驅動程式之間的介面

hinic3_hw_cfg.[ch]

硬體配置的介面

hinic3_irq.c

中斷請求

hinic3_netdev_ops.c

註冊到 Linux 核心棧的操作

hinic3_nic_dev.h

NIC 結構和方法抽象

hinic3_main.c

主 Linux 核心驅動程式

hinic3_nic_cfg.[ch]

NIC 服務配置

hinic3_nic_io.[ch]

TX 和 RX 的管理平面介面

hinic3_rss.[ch]

接收端縮放 (RSS) 的介面

hinic3_rx.[ch]

傳送介面

hinic3_tx.[ch]

接收介面

hinic3_ethtool.c

ethtool 操作 (ops) 的介面

hinic3_filter.c

MAC 地址的介面

管理介面

非同步事件佇列 (AEQ)

AEQ 透過描述符佇列接收來自硬體的高優先順序事件。每個描述符的大小固定為 64 位元組。 AEQ 可以接收請求的或非請求的事件。每個裝置、VF 或 PF 最多可以有 4 個 AEQ。每個 AEQ 都與一個專用的 IRQ 相關聯。 AEQ 可以接收多種型別的事件,但實際上 hinic3 驅動程式忽略除 2 個郵箱相關事件之外的所有事件。

郵箱

郵箱是 hinic3 驅動程式和硬體之間的通訊機制。每個裝置都有一個獨立的郵箱。驅動程式可以使用郵箱向管理傳送請求。驅動程式透過 AEQ(使用事件 HINIC3_AEQ_FOR_MBOX)接收郵箱訊息,例如對請求的響應。由於郵箱資料暫存器的大小有限,因此郵箱訊息是分段傳送的。

每個裝置都可以使用其郵箱將請求釋出到韌體。郵箱也可以用於在 PF 和其 VF 之間釋出請求和響應。

完成事件佇列 (CEQ)

CEQ 的實現與 AEQ 相同。它透過 32 位的固定大小描述符接收來自硬體的完成事件。每個裝置最多可以有 32 個 CEQ。每個 CEQ 都有一個專用的 IRQ。 CEQ 僅接收請求的事件,這些事件是對來自驅動程式的請求的響應。 CEQ 可以接收多種型別的事件,但實際上 hinic3 驅動程式忽略除 HINIC3_CMDQ 之外的所有事件,該事件表示先前在 cmdq 上釋出的命令已完成。

命令佇列 (cmdq)

每個 cmdq 都有一個專用的工作佇列,命令釋出在該佇列上。工作佇列上的命令是大小為 64 位元組的固定大小描述符。命令的完成將使用攜帶該命令的描述符中的 ctrl 位來指示。命令完成的通知也將透過 CEQ 上的事件提供。每個裝置都有 4 個命令佇列,它們被初始化為一個集合(稱為 cmdqs),每個佇列都有自己的型別。 Hinic3 驅動程式僅使用 HINIC3_CMDQ_SYNC 型別。

工作佇列 (WQ)

工作佇列是固定大小 WQE 的邏輯陣列。該陣列可以使用間接表分佈在多個非連續頁面上。工作佇列由 I/O 佇列和命令佇列使用。

全域性函式 ID

每個函式(PF 或 VF)在裝置中都有一個唯一的序號標識。許多管理命令(mbox 或 cmdq)都包含此 ID,以便硬體可以將命令效果應用於正確的函式。

PF 允許透過指定 VF 的 ID 將管理命令釋出到從屬 VF。 VF 必須提供自己的 ID。如果來自 VF 的命令包含錯誤的 ID,則硬體中的反欺騙會導致命令失敗。