1Linux Kernel Driver for Huawei Intelligent NIC(HiNIC) family 2============================================================ 3 4Overview: 5========= 6HiNIC is a network interface card for the Data Center Area. 7 8The driver supports a range of link-speed devices (10GbE, 25GbE, 40GbE, etc.). 9The driver supports also a negotiated and extendable feature set. 10 11Some HiNIC devices support SR-IOV. This driver is used for Physical Function 12(PF). 13 14HiNIC devices support MSI-X interrupt vector for each Tx/Rx queue and 15adaptive interrupt moderation. 16 17HiNIC devices support also various offload features such as checksum offload, 18TCP Transmit Segmentation Offload(TSO), Receive-Side Scaling(RSS) and 19LRO(Large Receive Offload). 20 21 22Supported PCI vendor ID/device IDs: 23=================================== 24 2519e5:1822 - HiNIC PF 26 27 28Driver Architecture and Source Code: 29==================================== 30 31hinic_dev - Implement a Logical Network device that is independent from 32specific HW details about HW data structure formats. 33 34hinic_hwdev - Implement the HW details of the device and include the components 35for accessing the PCI NIC. 36 37hinic_hwdev contains the following components: 38=============================================== 39 40HW Interface: 41============= 42 43The interface for accessing the pci device (DMA memory and PCI BARs). 44(hinic_hw_if.c, hinic_hw_if.h) 45 46Configuration Status Registers Area that describes the HW Registers on the 47configuration and status BAR0. (hinic_hw_csr.h) 48 49MGMT components: 50================ 51 52Asynchronous Event Queues(AEQs) - The event queues for receiving messages from 53the MGMT modules on the cards. (hinic_hw_eqs.c, hinic_hw_eqs.h) 54 55Application Programmable Interface commands(API CMD) - Interface for sending 56MGMT commands to the card. (hinic_hw_api_cmd.c, hinic_hw_api_cmd.h) 57 58Management (MGMT) - the PF to MGMT channel that uses API CMD for sending MGMT 59commands to the card and receives notifications from the MGMT modules on the 60card by AEQs. Also set the addresses of the IO CMDQs in HW. 61(hinic_hw_mgmt.c, hinic_hw_mgmt.h) 62 63IO components: 64============== 65 66Completion Event Queues(CEQs) - The completion Event Queues that describe IO 67tasks that are finished. (hinic_hw_eqs.c, hinic_hw_eqs.h) 68 69Work Queues(WQ) - Contain the memory and operations for use by CMD queues and 70the Queue Pairs. The WQ is a Memory Block in a Page. The Block contains 71pointers to Memory Areas that are the Memory for the Work Queue Elements(WQEs). 72(hinic_hw_wq.c, hinic_hw_wq.h) 73 74Command Queues(CMDQ) - The queues for sending commands for IO management and is 75used to set the QPs addresses in HW. The commands completion events are 76accumulated on the CEQ that is configured to receive the CMDQ completion events. 77(hinic_hw_cmdq.c, hinic_hw_cmdq.h) 78 79Queue Pairs(QPs) - The HW Receive and Send queues for Receiving and Transmitting 80Data. (hinic_hw_qp.c, hinic_hw_qp.h, hinic_hw_qp_ctxt.h) 81 82IO - de/constructs all the IO components. (hinic_hw_io.c, hinic_hw_io.h) 83 84HW device: 85========== 86 87HW device - de/constructs the HW Interface, the MGMT components on the 88initialization of the driver and the IO components on the case of Interface 89UP/DOWN Events. (hinic_hw_dev.c, hinic_hw_dev.h) 90 91 92hinic_dev contains the following components: 93=============================================== 94 95PCI ID table - Contains the supported PCI Vendor/Device IDs. 96(hinic_pci_tbl.h) 97 98Port Commands - Send commands to the HW device for port management 99(MAC, Vlan, MTU, ...). (hinic_port.c, hinic_port.h) 100 101Tx Queues - Logical Tx Queues that use the HW Send Queues for transmit. 102The Logical Tx queue is not dependent on the format of the HW Send Queue. 103(hinic_tx.c, hinic_tx.h) 104 105Rx Queues - Logical Rx Queues that use the HW Receive Queues for receive. 106The Logical Rx queue is not dependent on the format of the HW Receive Queue. 107(hinic_rx.c, hinic_rx.h) 108 109hinic_dev - de/constructs the Logical Tx and Rx Queues. 110(hinic_main.c, hinic_dev.h) 111 112 113Miscellaneous: 114============= 115 116Common functions that are used by HW and Logical Device. 117(hinic_common.c, hinic_common.h) 118 119 120Support 121======= 122 123If an issue is identified with the released source code on the supported kernel 124with a supported adapter, email the specific information related to the issue to 125aviad.krawczyk@huawei.com. 126