rsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftargetD/translations/zh_CN/networking/device_drivers/ethernet/huawei/hinic3modnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetD/translations/zh_TW/networking/device_drivers/ethernet/huawei/hinic3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetD/translations/it_IT/networking/device_drivers/ethernet/huawei/hinic3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetD/translations/ja_JP/networking/device_drivers/ethernet/huawei/hinic3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetD/translations/ko_KR/networking/device_drivers/ethernet/huawei/hinic3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetD/translations/sp_SP/networking/device_drivers/ethernet/huawei/hinic3modnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh^/var/lib/git/docbuild/linux/Documentation/networking/device_drivers/ethernet/huawei/hinic3.rsthKubhsection)}(hhh](htitle)}(hELinux kernel driver for Huawei Ethernet Device Driver (hinic3) familyh]hELinux kernel driver for Huawei Ethernet Device Driver (hinic3) family}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOverviewh]hOverview}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX The hinic3 is a network interface card (NIC) for Data Center. It supports a range of link-speed devices (10GE, 25GE, 100GE, etc.). The hinic3 devices can have multiple physical forms: LOM (Lan on Motherboard) NIC, PCIe standard NIC, OCP (Open Compute Project) NIC, etc.h]hX The hinic3 is a network interface card (NIC) for Data Center. It supports a range of link-speed devices (10GE, 25GE, 100GE, etc.). The hinic3 devices can have multiple physical forms: LOM (Lan on Motherboard) NIC, PCIe standard NIC, OCP (Open Compute Project) NIC, etc.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX#The hinic3 driver supports the following features: - IPv4/IPv6 TCP/UDP checksum offload - TSO (TCP Segmentation Offload), LRO (Large Receive Offload) - RSS (Receive Side Scaling) - MSI-X interrupt aggregation configuration and interrupt adaptation. - SR-IOV (Single Root I/O Virtualization).h]hX#The hinic3 driver supports the following features: - IPv4/IPv6 TCP/UDP checksum offload - TSO (TCP Segmentation Offload), LRO (Large Receive Offload) - RSS (Receive Side Scaling) - MSI-X interrupt aggregation configuration and interrupt adaptation. - SR-IOV (Single Root I/O Virtualization).}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hContenth]hContent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh bullet_list)}(hhh](h list_item)}(h"Supported PCI vendor ID/device IDsh]h)}(hjh]h"Supported PCI vendor ID/device IDs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h&Source Code Structure of Hinic3 Driverh]h)}(hj1h]h&Source Code Structure of Hinic3 Driver}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hManagement Interface h]h)}(hManagement Interfaceh]hManagement Interface}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjhhubeh}(h]contentah ]h"]contentah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h"Supported PCI vendor ID/device IDsh]h"Supported PCI vendor ID/device IDs}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhhhhhKubh)}(h/19e5:0222 - hinic3 PF/PPF 19e5:375F - hinic3 VFh]h/19e5:0222 - hinic3 PF/PPF 19e5:375F - hinic3 VF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjnhhubh)}(hPrime Physical Function (PPF) is responsible for the management of the whole NIC card. For example, clock synchronization between the NIC and the host. Any PF may serve as a PPF. The PPF is selected dynamically.h]hPrime Physical Function (PPF) is responsible for the management of the whole NIC card. For example, clock synchronization between the NIC and the host. Any PF may serve as a PPF. The PPF is selected dynamically.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjnhhubeh}(h]"supported-pci-vendor-id-device-idsah ]h"]"supported pci vendor id/device idsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h&Source Code Structure of Hinic3 Driverh]h&Source Code Structure of Hinic3 Driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK(ubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK0uh1jhjubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(hhinic3_pci_id_tbl.hh]hhinic3_pci_id_tbl.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hSupported device IDsh]hSupported device IDs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_hw_intf.hh]hhinic3_hw_intf.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hInterface between HW and driverh]hInterface between HW and driver}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_queue_common.[ch]h]hhinic3_queue_common.[ch]}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjNubah}(h]h ]h"]h$]h&]uh1jhjKubj)}(hhh]h)}(h,Common structures and methods for NIC queuesh]h,Common structures and methods for NIC queues}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjeubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_common.[ch]h]hhinic3_common.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h+Encapsulation of memory operations in Linuxh]h+Encapsulation of memory operations in Linux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h hinic3_csr.hh]h hinic3_csr.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hRegister definitions in the BARh]hRegister definitions in the BAR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_hwif.[ch]h]hhinic3_hwif.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hInterface for BARh]hInterface for BAR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_eqs.[ch]h]hhinic3_eqs.[ch]}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hj*ubah}(h]h ]h"]h$]h&]uh1jhj'ubj)}(hhh]h)}(hInterface for AEQs and CEQsh]hInterface for AEQs and CEQs}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjAubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_mbox.[ch]h]hhinic3_mbox.[ch]}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjaubah}(h]h ]h"]h$]h&]uh1jhj^ubj)}(hhh]h)}(hInterface for mailboxh]hInterface for mailbox}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjxubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_mgmt.[ch]h]hhinic3_mgmt.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h-Management interface based on mailbox and AEQh]h-Management interface based on mailbox and AEQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_wq.[ch]h]hhinic3_wq.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h(Work queue data structures and interfaceh]h(Work queue data structures and interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_cmdq.[ch]h]hhinic3_cmdq.[ch]}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h+Command queue is used to post command to HWh]h+Command queue is used to post command to HW}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_hwdev.[ch]h]hhinic3_hwdev.[ch]}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj=ubah}(h]h ]h"]h$]h&]uh1jhj:ubj)}(hhh]h)}(h&HW structures and methods abstractionsh]h&HW structures and methods abstractions}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjTubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_lld.[ch]h]hhinic3_lld.[ch]}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjtubah}(h]h ]h"]h$]h&]uh1jhjqubj)}(hhh]h)}(h!Auxiliary driver adaptation layerh]h!Auxiliary driver adaptation layer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_hw_comm.[ch]h]hhinic3_hw_comm.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h"Interface for common HW operationsh]h"Interface for common HW operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_mgmt_interface.hh]hhinic3_mgmt_interface.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h%Interface between firmware and driverh]h%Interface between firmware and driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_hw_cfg.[ch]h]hhinic3_hw_cfg.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hInterface for HW configurationh]hInterface for HW configuration}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(h hinic3_irq.ch]h hinic3_irq.c}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjPubah}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh]h)}(hInterrupt requesth]hInterrupt request}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjgubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_netdev_ops.ch]hhinic3_netdev_ops.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hMain Linux kernel driverh]hMain Linux kernel driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_nic_cfg.[ch]h]hhinic3_nic_cfg.[ch]}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hj,ubah}(h]h ]h"]h$]h&]uh1jhj)ubj)}(hhh]h)}(hNIC service configurationh]hNIC service configuration}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjCubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_nic_io.[ch]h]hhinic3_nic_io.[ch]}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjcubah}(h]h ]h"]h$]h&]uh1jhj`ubj)}(hhh]h)}(h(Management plane interface for TX and RXh]h(Management plane interface for TX and RX}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjzubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_rss.[ch]h]hhinic3_rss.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h(Interface for Receive Side Scaling (RSS)h]h(Interface for Receive Side Scaling (RSS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_rx.[ch]h]hhinic3_rx.[ch]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hInterface for transmith]hInterface for transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_tx.[ch]h]hhinic3_tx.[ch]}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hInterface for receiveh]hInterface for receive}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_ethtool.ch]hhinic3_ethtool.c}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhj?ubah}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hhh]h)}(h&Interface for ethtool operations (ops)h]h&Interface for ethtool operations (ops)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjVubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hhinic3_filter.ch]hhinic3_filter.c}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjvubah}(h]h ]h"]h$]h&]uh1jhjsubj)}(hhh]h)}(hInterface for MAC addressh]hInterface for MAC address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]&source-code-structure-of-hinic3-driverah ]h"]&source code structure of hinic3 driverah$]h&]uh1hhhhhhhhK(ubh)}(hhh](h)}(hManagement Interfaceh]hManagement Interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKIubh)}(hhh](h)}(hAsynchronous Event Queue (AEQ)h]hAsynchronous Event Queue (AEQ)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKLubh)}(hXAEQ receives high priority events from the HW over a descriptor queue. Every descriptor is a fixed size of 64 bytes. AEQ can receive solicited or unsolicited events. Every device, VF or PF, can have up to 4 AEQs. Every AEQ is associated to a dedicated IRQ. AEQ can receive multiple types of events, but in practice the hinic3 driver ignores all events except for 2 mailbox related events.h]hXAEQ receives high priority events from the HW over a descriptor queue. Every descriptor is a fixed size of 64 bytes. AEQ can receive solicited or unsolicited events. Every device, VF or PF, can have up to 4 AEQs. Every AEQ is associated to a dedicated IRQ. AEQ can receive multiple types of events, but in practice the hinic3 driver ignores all events except for 2 mailbox related events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjhhubeh}(h]asynchronous-event-queue-aeqah ]h"]asynchronous event queue (aeq)ah$]h&]uh1hhjhhhhhKLubh)}(hhh](h)}(hMailboxh]hMailbox}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKVubh)}(hX~Mailbox is a communication mechanism between the hinic3 driver and the HW. Each device has an independent mailbox. Driver can use the mailbox to send requests to management. Driver receives mailbox messages, such as responses to requests, over the AEQ (using event HINIC3_AEQ_FOR_MBOX). Due to the limited size of mailbox data register, mailbox messages are sent segment-by-segment.h]hX~Mailbox is a communication mechanism between the hinic3 driver and the HW. Each device has an independent mailbox. Driver can use the mailbox to send requests to management. Driver receives mailbox messages, such as responses to requests, over the AEQ (using event HINIC3_AEQ_FOR_MBOX). Due to the limited size of mailbox data register, mailbox messages are sent segment-by-segment.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjhhubh)}(hEvery device can use its mailbox to post request to firmware. The mailbox can also be used to post requests and responses between the PF and its VFs.h]hEvery device can use its mailbox to post request to firmware. The mailbox can also be used to post requests and responses between the PF and its VFs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjhhubeh}(h]mailboxah ]h"]mailboxah$]h&]uh1hhjhhhhhKVubh)}(hhh](h)}(hCompletion Event Queue (CEQ)h]hCompletion Event Queue (CEQ)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hhhhhKcubh)}(hXThe implementation of CEQ is the same as AEQ. It receives completion events from HW over a fixed size descriptor of 32 bits. Every device can have up to 32 CEQs. Every CEQ has a dedicated IRQ. CEQ only receives solicited events that are responses to requests from the driver. CEQ can receive multiple types of events, but in practice the hinic3 driver ignores all events except for HINIC3_CMDQ that represents completion of previously posted commands on a cmdq.h]hXThe implementation of CEQ is the same as AEQ. It receives completion events from HW over a fixed size descriptor of 32 bits. Every device can have up to 32 CEQs. Every CEQ has a dedicated IRQ. CEQ only receives solicited events that are responses to requests from the driver. CEQ can receive multiple types of events, but in practice the hinic3 driver ignores all events except for HINIC3_CMDQ that represents completion of previously posted commands on a cmdq.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehj2hhubeh}(h]completion-event-queue-ceqah ]h"]completion event queue (ceq)ah$]h&]uh1hhjhhhhhKcubh)}(hhh](h)}(hCommand Queue (cmdq)h]hCommand Queue (cmdq)}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhhhhhKnubh)}(hXEvery cmdq has a dedicated work queue on which commands are posted. Commands on the work queue are fixed size descriptor of size 64 bytes. Completion of a command will be indicated using ctrl bits in the descriptor that carried the command. Notification of command completions will also be provided via event on CEQ. Every device has 4 command queues that are initialized as a set (called cmdqs), each with its own type. Hinic3 driver only uses type HINIC3_CMDQ_SYNC.h]hXEvery cmdq has a dedicated work queue on which commands are posted. Commands on the work queue are fixed size descriptor of size 64 bytes. Completion of a command will be indicated using ctrl bits in the descriptor that carried the command. Notification of command completions will also be provided via event on CEQ. Every device has 4 command queues that are initialized as a set (called cmdqs), each with its own type. Hinic3 driver only uses type HINIC3_CMDQ_SYNC.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjYhhubeh}(h]command-queue-cmdqah ]h"]command queue (cmdq)ah$]h&]uh1hhjhhhhhKnubh)}(hhh](h)}(hWork Queues(WQ)h]hWork Queues(WQ)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKyubh)}(hWork queues are logical arrays of fixed size WQEs. The array may be spread over multiple non-contiguous pages using indirection table. Work queues are used by I/O queues and command queues.h]hWork queues are logical arrays of fixed size WQEs. The array may be spread over multiple non-contiguous pages using indirection table. Work queues are used by I/O queues and command queues.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hjhhubeh}(h]work-queues-wqah ]h"]work queues(wq)ah$]h&]uh1hhjhhhhhKyubh)}(hhh](h)}(hGlobal function IDh]hGlobal function ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hEvery function, PF or VF, has a unique ordinal identification within the device. Many management commands (mbox or cmdq) contain this ID so HW can apply the command effect to the right function.h]hEvery function, PF or VF, has a unique ordinal identification within the device. Many management commands (mbox or cmdq) contain this ID so HW can apply the command effect to the right function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hPF is allowed to post management commands to a subordinate VF by specifying the VFs ID. A VF must provide its own ID. Anti-spoofing in the HW will cause command from a VF to fail if it contains the wrong ID.h]hPF is allowed to post management commands to a subordinate VF by specifying the VFs ID. A VF must provide its own ID. Anti-spoofing in the HW will cause command from a VF to fail if it contains the wrong ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]global-function-idah ]h"]global function idah$]h&]uh1hhjhhhhhKubeh}(h]management-interfaceah ]h"]management interfaceah$]h&]uh1hhhhhhhhKIubeh}(h]Clinux-kernel-driver-for-huawei-ethernet-device-driver-hinic3-familyah ]h"]Elinux kernel driver for huawei ethernet device driver (hinic3) familyah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjhhjkjhjjjjjjjjj/j,jVjSj}jzjjjju nametypes}(jhjkjjjjj/jVj}jjuh}(jhhhjhjjjnjjjjjjj,jjSj2jzjYjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.