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