ENA(4) | Device Drivers Manual | ENA(4) |
ena
— FreeBSD
kernel driver for Elastic Network Adapter (ENA) family
To compile this driver into the kernel, place the following line in the kernel configuration file:
device ena
Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5):
if_ena_load="YES"
The ENA is a networking interface designed to make good use of modern CPU features and system architectures.
The ENA device exposes a lightweight management interface with a minimal set of memory mapped registers and extendable command set through an Admin Queue.
The driver supports a range of ENA devices, is link-speed independent (i.e., the same driver is used for 10GbE, 25GbE, 40GbE, etc.), and has a negotiated and extendable feature set.
Some ENA devices support SR-IOV. This driver is used for both the SR-IOV Physical Function (PF) and Virtual Function (VF) devices.
The ENA devices enable high speed and low overhead network traffic processing by providing multiple Tx/Rx queue pairs (the maximum number is advertised by the device via the Admin Queue), a dedicated MSI-X interrupt vector per Tx/Rx queue pair, and CPU cacheline optimized data placement.
The ena
driver supports industry standard
TCP/IP offload features such as checksum offload and TCP transmit
segmentation offload (TSO). Receive-side scaling (RSS) is supported for
multi-core scaling.
The ena
driver and its corresponding
devices implement health monitoring mechanisms such as watchdog, enabling
the device and driver to recover in a manner transparent to the application,
as well as debug logs.
Some of the ENA devices support a working mode called Low-latency Queue (LLQ), which saves several more microseconds. This feature will be implemented for driver in future releases.
Supported PCI vendor ID/device IDs:
Error occurred during initialization of the mmio register read request.
Device could not be reset.
Device may not be responding or is already during reset.
Version of the controller is too old and it is not supported by the driver.
The controller is able to request dma transaction width.
Device stopped responding or it demanded invalid value.
Initialization of the Admin Queue failed.
Device may not be responding or there was a problem with initialization of
the resources.
Failed to get attributes of the device from the controller.
Errors occurred when trying to configure AENQ groups.
Resource allocation failed when initializing the device.
Driver will not be attached.
Device initialization failed.
Driver will not be attached.
Error occurred when trying to activate interrupt vectors for Admin Queue.
Error occurred when trying to register Admin Queue interrupt handler.
Error occurred during configuration of the Admin Queue interrupts.
Configuration of the MSI-X for Admin Queue failed.
There could be lack of resources or interrupts could not have been
configured.
Driver will not be attached.
VLANs are being used when trying to detach the driver.
VLANs must be detached first and then detach routine have to be called
again.
Error occurred when trying to destroy RX/TX DMA tag.
Error occurred during initialization of one of RSS resources.
The device will work with reduced performance because all RX packets will
be passed to queue 0 and there will be no hash information.
This message appears when trying to change MTU and driver is unable to get attributes from the device.
Requested MTU value is not supported and will not be set.
Device stopped responding and will be reset.
Packet was pushed to the NIC but not sent within given time
limit.
It may be caused by hang of the IO queue.
If too many Tx wasn't completed on time the device is going to
be reset.
It may be caused by hanged queue or device.
Device will be reset.
Reset is triggered either by watchdog or if too many TX packets were not
completed on time.
Link status received from the device in the AENQ handler is invalid.
IO resources initialization failed.
Interface will not be brought up.
Initialization of the LRO for the RX ring failed.
Allocation of resources used on RX path failed.
If happened during initialization of the IO queue, the interface will not
be brought up.
IOCTL request for the device to work in promiscuous/allmulti
mode.
See ifconfig(8) for more details.
Packet with unsupported number of segments was queued for
sending to the device.
Packet will be dropped.
If an issue is identified with the released source code with a supported adapter, please email the specific information related to the issue to <mk@semihalf.com> and <mw@semihalf.com>.
The ena
driver was written by
Semihalf.
August 16, 2017 | Debian |