华为智能网卡 (HiNIC) 系列的 Linux 内核驱动程序

概述:

HiNIC 是一种用于数据中心领域的网络接口卡。

该驱动程序支持一系列链路速度设备 (10GbE、25GbE、40GbE 等)。该驱动程序还支持协商和可扩展的功能集。

一些 HiNIC 设备支持 SR-IOV。此驱动程序用于物理功能 (PF)。

HiNIC 设备为每个 Tx/Rx 队列和自适应中断调节支持 MSI-X 中断向量。

HiNIC 设备还支持各种卸载功能,例如校验和卸载、TCP 发送分段卸载 (TSO)、接收端缩放 (RSS) 和 LRO (大型接收卸载)。

支持的 PCI 供应商 ID/设备 ID:

19e5:1822 - HiNIC PF

驱动程序架构和源代码:

hinic_dev - 实现一个逻辑网络设备,该设备独立于有关硬件数据结构格式的特定硬件细节。

hinic_hwdev - 实现设备的硬件细节,并包括用于访问 PCI NIC 的组件。

hinic_hwdev 包含以下组件:

硬件接口:

用于访问 PCI 设备(DMA 内存和 PCI BAR)的接口。(hinic_hw_if.c, hinic_hw_if.h)

配置状态寄存器区域,描述配置和状态 BAR0 上的硬件寄存器。(hinic_hw_csr.h)

MGMT 组件:

异步事件队列 (AEQ) - 用于接收来自卡上 MGMT 模块的消息的事件队列。(hinic_hw_eqs.c, hinic_hw_eqs.h)

应用程序可编程接口命令 (API CMD) - 用于向卡发送 MGMT 命令的接口。(hinic_hw_api_cmd.c, hinic_hw_api_cmd.h)

管理 (MGMT) - PF 到 MGMT 通道,使用 API CMD 向卡发送 MGMT 命令,并通过 AEQ 接收来自卡上 MGMT 模块的通知。还在硬件中设置 IO CMDQ 的地址。(hinic_hw_mgmt.c, hinic_hw_mgmt.h)

IO 组件:

完成事件队列 (CEQ) - 描述已完成的 IO 任务的完成事件队列。(hinic_hw_eqs.c, hinic_hw_eqs.h)

工作队列 (WQ) - 包含 CMD 队列和队列对使用的内存和操作。WQ 是页面中的内存块。该块包含指向内存区域的指针,这些区域是工作队列元素 (WQE) 的内存。(hinic_hw_wq.c, hinic_hw_wq.h)

命令队列 (CMDQ) - 用于发送 IO 管理命令的队列,用于在硬件中设置 QP 地址。命令完成事件累积在配置为接收 CMDQ 完成事件的 CEQ 上。(hinic_hw_cmdq.c, hinic_hw_cmdq.h)

队列对 (QP) - 用于接收和传输数据的硬件接收和发送队列。(hinic_hw_qp.c, hinic_hw_qp.h, hinic_hw_qp_ctxt.h)

IO - 构造/解构所有 IO 组件。(hinic_hw_io.c, hinic_hw_io.h)

硬件设备:

硬件设备 - 在驱动程序初始化时构造/解构硬件接口和 MGMT 组件,并在接口 UP/DOWN 事件的情况下构造/解构 IO 组件。(hinic_hw_dev.c, hinic_hw_dev.h)

hinic_dev 包含以下组件:

PCI ID 表 - 包含支持的 PCI 供应商/设备 ID。(hinic_pci_tbl.h)

端口命令 - 向硬件设备发送端口管理命令(MAC、Vlan、MTU 等)。(hinic_port.c, hinic_port.h)

Tx 队列 - 使用硬件发送队列进行传输的逻辑 Tx 队列。逻辑 Tx 队列不依赖于硬件发送队列的格式。(hinic_tx.c, hinic_tx.h)

Rx 队列 - 使用硬件接收队列进行接收的逻辑 Rx 队列。逻辑 Rx 队列不依赖于硬件接收队列的格式。(hinic_rx.c, hinic_rx.h)

hinic_dev - 构造/解构逻辑 Tx 和 Rx 队列。(hinic_main.c, hinic_dev.h)

其他

硬件和逻辑设备使用的通用函数。(hinic_common.c, hinic_common.h)

支持

如果在支持的内核上使用支持的适配器,在发布的源代码中发现问题,请将与该问题相关的具体信息发送电子邮件至 aviad.krawczyk@huawei.com