华为智能网卡 (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 地址。命令完成事件累积在 CEQ 上,CEQ 配置为接收 CMDQ 完成事件。(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