内容¶
支持的 PCI 供应商 ID/设备 ID
Hinic3 驱动程序的源代码结构
管理接口
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 驱动程序的源代码结构
管理接口
19e5:0222 - hinic3 PF/PPF 19e5:375F - hinic3 VF
主物理功能 (PPF) 负责整个网卡的管理。例如,NIC 和主机之间的时钟同步。任何 PF 都可以用作 PPF。 PPF 是动态选择的。
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 通过描述符队列接收来自硬件的高优先级事件。每个描述符的大小固定为 64 字节。 AEQ 可以接收请求的或非请求的事件。每个设备、VF 或 PF 最多可以有 4 个 AEQ。每个 AEQ 都与一个专用的 IRQ 相关联。 AEQ 可以接收多种类型的事件,但实际上 hinic3 驱动程序忽略除 2 个邮箱相关事件之外的所有事件。
邮箱是 hinic3 驱动程序和硬件之间的通信机制。每个设备都有一个独立的邮箱。驱动程序可以使用邮箱向管理发送请求。驱动程序通过 AEQ(使用事件 HINIC3_AEQ_FOR_MBOX)接收邮箱消息,例如对请求的响应。由于邮箱数据寄存器的大小有限,因此邮箱消息是分段发送的。
每个设备都可以使用其邮箱将请求发布到固件。邮箱也可以用于在 PF 和其 VF 之间发布请求和响应。
CEQ 的实现与 AEQ 相同。它通过 32 位的固定大小描述符接收来自硬件的完成事件。每个设备最多可以有 32 个 CEQ。每个 CEQ 都有一个专用的 IRQ。 CEQ 仅接收请求的事件,这些事件是对来自驱动程序的请求的响应。 CEQ 可以接收多种类型的事件,但实际上 hinic3 驱动程序忽略除 HINIC3_CMDQ 之外的所有事件,该事件表示先前在 cmdq 上发布的命令已完成。
每个 cmdq 都有一个专用的工作队列,命令发布在该队列上。工作队列上的命令是大小为 64 字节的固定大小描述符。命令的完成将使用携带该命令的描述符中的 ctrl 位来指示。命令完成的通知也将通过 CEQ 上的事件提供。每个设备都有 4 个命令队列,它们被初始化为一个集合(称为 cmdqs),每个队列都有自己的类型。 Hinic3 驱动程序仅使用 HINIC3_CMDQ_SYNC 类型。
工作队列是固定大小 WQE 的逻辑数组。该数组可以使用间接表分布在多个非连续页面上。工作队列由 I/O 队列和命令队列使用。
每个函数(PF 或 VF)在设备中都有一个唯一的序号标识。许多管理命令(mbox 或 cmdq)都包含此 ID,以便硬件可以将命令效果应用于正确的函数。
PF 允许通过指定 VF 的 ID 将管理命令发布到从属 VF。 VF 必须提供自己的 ID。如果来自 VF 的命令包含错误的 ID,则硬件中的反欺骗会导致命令失败。