0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 ============================================================
0004 Linux Kernel Driver for Huawei Intelligent NIC(HiNIC) family
0005 ============================================================
0006
0007 Overview:
0008 =========
0009 HiNIC is a network interface card for the Data Center Area.
0010
0011 The driver supports a range of link-speed devices (10GbE, 25GbE, 40GbE, etc.).
0012 The driver supports also a negotiated and extendable feature set.
0013
0014 Some HiNIC devices support SR-IOV. This driver is used for Physical Function
0015 (PF).
0016
0017 HiNIC devices support MSI-X interrupt vector for each Tx/Rx queue and
0018 adaptive interrupt moderation.
0019
0020 HiNIC devices support also various offload features such as checksum offload,
0021 TCP Transmit Segmentation Offload(TSO), Receive-Side Scaling(RSS) and
0022 LRO(Large Receive Offload).
0023
0024
0025 Supported PCI vendor ID/device IDs:
0026 ===================================
0027
0028 19e5:1822 - HiNIC PF
0029
0030
0031 Driver Architecture and Source Code:
0032 ====================================
0033
0034 hinic_dev - Implement a Logical Network device that is independent from
0035 specific HW details about HW data structure formats.
0036
0037 hinic_hwdev - Implement the HW details of the device and include the components
0038 for accessing the PCI NIC.
0039
0040 hinic_hwdev contains the following components:
0041 ===============================================
0042
0043 HW Interface:
0044 =============
0045
0046 The interface for accessing the pci device (DMA memory and PCI BARs).
0047 (hinic_hw_if.c, hinic_hw_if.h)
0048
0049 Configuration Status Registers Area that describes the HW Registers on the
0050 configuration and status BAR0. (hinic_hw_csr.h)
0051
0052 MGMT components:
0053 ================
0054
0055 Asynchronous Event Queues(AEQs) - The event queues for receiving messages from
0056 the MGMT modules on the cards. (hinic_hw_eqs.c, hinic_hw_eqs.h)
0057
0058 Application Programmable Interface commands(API CMD) - Interface for sending
0059 MGMT commands to the card. (hinic_hw_api_cmd.c, hinic_hw_api_cmd.h)
0060
0061 Management (MGMT) - the PF to MGMT channel that uses API CMD for sending MGMT
0062 commands to the card and receives notifications from the MGMT modules on the
0063 card by AEQs. Also set the addresses of the IO CMDQs in HW.
0064 (hinic_hw_mgmt.c, hinic_hw_mgmt.h)
0065
0066 IO components:
0067 ==============
0068
0069 Completion Event Queues(CEQs) - The completion Event Queues that describe IO
0070 tasks that are finished. (hinic_hw_eqs.c, hinic_hw_eqs.h)
0071
0072 Work Queues(WQ) - Contain the memory and operations for use by CMD queues and
0073 the Queue Pairs. The WQ is a Memory Block in a Page. The Block contains
0074 pointers to Memory Areas that are the Memory for the Work Queue Elements(WQEs).
0075 (hinic_hw_wq.c, hinic_hw_wq.h)
0076
0077 Command Queues(CMDQ) - The queues for sending commands for IO management and is
0078 used to set the QPs addresses in HW. The commands completion events are
0079 accumulated on the CEQ that is configured to receive the CMDQ completion events.
0080 (hinic_hw_cmdq.c, hinic_hw_cmdq.h)
0081
0082 Queue Pairs(QPs) - The HW Receive and Send queues for Receiving and Transmitting
0083 Data. (hinic_hw_qp.c, hinic_hw_qp.h, hinic_hw_qp_ctxt.h)
0084
0085 IO - de/constructs all the IO components. (hinic_hw_io.c, hinic_hw_io.h)
0086
0087 HW device:
0088 ==========
0089
0090 HW device - de/constructs the HW Interface, the MGMT components on the
0091 initialization of the driver and the IO components on the case of Interface
0092 UP/DOWN Events. (hinic_hw_dev.c, hinic_hw_dev.h)
0093
0094
0095 hinic_dev contains the following components:
0096 ===============================================
0097
0098 PCI ID table - Contains the supported PCI Vendor/Device IDs.
0099 (hinic_pci_tbl.h)
0100
0101 Port Commands - Send commands to the HW device for port management
0102 (MAC, Vlan, MTU, ...). (hinic_port.c, hinic_port.h)
0103
0104 Tx Queues - Logical Tx Queues that use the HW Send Queues for transmit.
0105 The Logical Tx queue is not dependent on the format of the HW Send Queue.
0106 (hinic_tx.c, hinic_tx.h)
0107
0108 Rx Queues - Logical Rx Queues that use the HW Receive Queues for receive.
0109 The Logical Rx queue is not dependent on the format of the HW Receive Queue.
0110 (hinic_rx.c, hinic_rx.h)
0111
0112 hinic_dev - de/constructs the Logical Tx and Rx Queues.
0113 (hinic_main.c, hinic_dev.h)
0114
0115
0116 Miscellaneous
0117 =============
0118
0119 Common functions that are used by HW and Logical Device.
0120 (hinic_common.c, hinic_common.h)
0121
0122
0123 Support
0124 =======
0125
0126 If an issue is identified with the released source code on the supported kernel
0127 with a supported adapter, email the specific information related to the issue to
0128 aviad.krawczyk@huawei.com.