195298d63SJakub Kicinski.. SPDX-License-Identifier: GPL-2.0 295298d63SJakub Kicinski 395298d63SJakub Kicinski============================================================ 495298d63SJakub KicinskiLinux Kernel Driver for Huawei Intelligent NIC(HiNIC) family 595298d63SJakub Kicinski============================================================ 695298d63SJakub Kicinski 795298d63SJakub KicinskiOverview: 895298d63SJakub Kicinski========= 995298d63SJakub KicinskiHiNIC is a network interface card for the Data Center Area. 1095298d63SJakub Kicinski 1195298d63SJakub KicinskiThe driver supports a range of link-speed devices (10GbE, 25GbE, 40GbE, etc.). 1295298d63SJakub KicinskiThe driver supports also a negotiated and extendable feature set. 1395298d63SJakub Kicinski 1495298d63SJakub KicinskiSome HiNIC devices support SR-IOV. This driver is used for Physical Function 1595298d63SJakub Kicinski(PF). 1695298d63SJakub Kicinski 1795298d63SJakub KicinskiHiNIC devices support MSI-X interrupt vector for each Tx/Rx queue and 1895298d63SJakub Kicinskiadaptive interrupt moderation. 1995298d63SJakub Kicinski 2095298d63SJakub KicinskiHiNIC devices support also various offload features such as checksum offload, 2195298d63SJakub KicinskiTCP Transmit Segmentation Offload(TSO), Receive-Side Scaling(RSS) and 2295298d63SJakub KicinskiLRO(Large Receive Offload). 2395298d63SJakub Kicinski 2495298d63SJakub Kicinski 2595298d63SJakub KicinskiSupported PCI vendor ID/device IDs: 2695298d63SJakub Kicinski=================================== 2795298d63SJakub Kicinski 2895298d63SJakub Kicinski19e5:1822 - HiNIC PF 2995298d63SJakub Kicinski 3095298d63SJakub Kicinski 3195298d63SJakub KicinskiDriver Architecture and Source Code: 3295298d63SJakub Kicinski==================================== 3395298d63SJakub Kicinski 3495298d63SJakub Kicinskihinic_dev - Implement a Logical Network device that is independent from 3595298d63SJakub Kicinskispecific HW details about HW data structure formats. 3695298d63SJakub Kicinski 3795298d63SJakub Kicinskihinic_hwdev - Implement the HW details of the device and include the components 3895298d63SJakub Kicinskifor accessing the PCI NIC. 3995298d63SJakub Kicinski 4095298d63SJakub Kicinskihinic_hwdev contains the following components: 4195298d63SJakub Kicinski=============================================== 4295298d63SJakub Kicinski 4395298d63SJakub KicinskiHW Interface: 4495298d63SJakub Kicinski============= 4595298d63SJakub Kicinski 4695298d63SJakub KicinskiThe interface for accessing the pci device (DMA memory and PCI BARs). 4795298d63SJakub Kicinski(hinic_hw_if.c, hinic_hw_if.h) 4895298d63SJakub Kicinski 4995298d63SJakub KicinskiConfiguration Status Registers Area that describes the HW Registers on the 5095298d63SJakub Kicinskiconfiguration and status BAR0. (hinic_hw_csr.h) 5195298d63SJakub Kicinski 5295298d63SJakub KicinskiMGMT components: 5395298d63SJakub Kicinski================ 5495298d63SJakub Kicinski 5595298d63SJakub KicinskiAsynchronous Event Queues(AEQs) - The event queues for receiving messages from 5695298d63SJakub Kicinskithe MGMT modules on the cards. (hinic_hw_eqs.c, hinic_hw_eqs.h) 5795298d63SJakub Kicinski 5895298d63SJakub KicinskiApplication Programmable Interface commands(API CMD) - Interface for sending 5995298d63SJakub KicinskiMGMT commands to the card. (hinic_hw_api_cmd.c, hinic_hw_api_cmd.h) 6095298d63SJakub Kicinski 6195298d63SJakub KicinskiManagement (MGMT) - the PF to MGMT channel that uses API CMD for sending MGMT 6295298d63SJakub Kicinskicommands to the card and receives notifications from the MGMT modules on the 6395298d63SJakub Kicinskicard by AEQs. Also set the addresses of the IO CMDQs in HW. 6495298d63SJakub Kicinski(hinic_hw_mgmt.c, hinic_hw_mgmt.h) 6595298d63SJakub Kicinski 6695298d63SJakub KicinskiIO components: 6795298d63SJakub Kicinski============== 6895298d63SJakub Kicinski 6995298d63SJakub KicinskiCompletion Event Queues(CEQs) - The completion Event Queues that describe IO 7095298d63SJakub Kicinskitasks that are finished. (hinic_hw_eqs.c, hinic_hw_eqs.h) 7195298d63SJakub Kicinski 7295298d63SJakub KicinskiWork Queues(WQ) - Contain the memory and operations for use by CMD queues and 7395298d63SJakub Kicinskithe Queue Pairs. The WQ is a Memory Block in a Page. The Block contains 7495298d63SJakub Kicinskipointers to Memory Areas that are the Memory for the Work Queue Elements(WQEs). 7595298d63SJakub Kicinski(hinic_hw_wq.c, hinic_hw_wq.h) 7695298d63SJakub Kicinski 7795298d63SJakub KicinskiCommand Queues(CMDQ) - The queues for sending commands for IO management and is 7895298d63SJakub Kicinskiused to set the QPs addresses in HW. The commands completion events are 7995298d63SJakub Kicinskiaccumulated on the CEQ that is configured to receive the CMDQ completion events. 8095298d63SJakub Kicinski(hinic_hw_cmdq.c, hinic_hw_cmdq.h) 8195298d63SJakub Kicinski 8295298d63SJakub KicinskiQueue Pairs(QPs) - The HW Receive and Send queues for Receiving and Transmitting 8395298d63SJakub KicinskiData. (hinic_hw_qp.c, hinic_hw_qp.h, hinic_hw_qp_ctxt.h) 8495298d63SJakub Kicinski 8595298d63SJakub KicinskiIO - de/constructs all the IO components. (hinic_hw_io.c, hinic_hw_io.h) 8695298d63SJakub Kicinski 8795298d63SJakub KicinskiHW device: 8895298d63SJakub Kicinski========== 8995298d63SJakub Kicinski 9095298d63SJakub KicinskiHW device - de/constructs the HW Interface, the MGMT components on the 9195298d63SJakub Kicinskiinitialization of the driver and the IO components on the case of Interface 9295298d63SJakub KicinskiUP/DOWN Events. (hinic_hw_dev.c, hinic_hw_dev.h) 9395298d63SJakub Kicinski 9495298d63SJakub Kicinski 9595298d63SJakub Kicinskihinic_dev contains the following components: 9695298d63SJakub Kicinski=============================================== 9795298d63SJakub Kicinski 9895298d63SJakub KicinskiPCI ID table - Contains the supported PCI Vendor/Device IDs. 9995298d63SJakub Kicinski(hinic_pci_tbl.h) 10095298d63SJakub Kicinski 10195298d63SJakub KicinskiPort Commands - Send commands to the HW device for port management 10295298d63SJakub Kicinski(MAC, Vlan, MTU, ...). (hinic_port.c, hinic_port.h) 10395298d63SJakub Kicinski 10495298d63SJakub KicinskiTx Queues - Logical Tx Queues that use the HW Send Queues for transmit. 10595298d63SJakub KicinskiThe Logical Tx queue is not dependent on the format of the HW Send Queue. 10695298d63SJakub Kicinski(hinic_tx.c, hinic_tx.h) 10795298d63SJakub Kicinski 10895298d63SJakub KicinskiRx Queues - Logical Rx Queues that use the HW Receive Queues for receive. 10995298d63SJakub KicinskiThe Logical Rx queue is not dependent on the format of the HW Receive Queue. 11095298d63SJakub Kicinski(hinic_rx.c, hinic_rx.h) 11195298d63SJakub Kicinski 11295298d63SJakub Kicinskihinic_dev - de/constructs the Logical Tx and Rx Queues. 11395298d63SJakub Kicinski(hinic_main.c, hinic_dev.h) 11495298d63SJakub Kicinski 11595298d63SJakub Kicinski 11695298d63SJakub KicinskiMiscellaneous 11795298d63SJakub Kicinski============= 11895298d63SJakub Kicinski 11995298d63SJakub KicinskiCommon functions that are used by HW and Logical Device. 12095298d63SJakub Kicinski(hinic_common.c, hinic_common.h) 12195298d63SJakub Kicinski 12295298d63SJakub Kicinski 12395298d63SJakub KicinskiSupport 12495298d63SJakub Kicinski======= 12595298d63SJakub Kicinski 12695298d63SJakub KicinskiIf an issue is identified with the released source code on the supported kernel 12795298d63SJakub Kicinskiwith a supported adapter, email the specific information related to the issue to 12895298d63SJakub Kicinskiaviad.krawczyk@huawei.com. 129