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