16#define ENA_REGS_BAR PCI_BASE_ADDRESS_0
19#define ENA_REGS_SIZE 16384
22#define ENA_MEM_BAR PCI_BASE_ADDRESS_2
31#define ENA_ACQ_COUNT 2
34#define ENA_AENQ_COUNT 2
37#define ENA_TX_COUNT 32
40#define ENA_RX_COUNT 32
43#define ENA_BASE_LO 0x0
46#define ENA_BASE_HI 0x4
49#define ENA_CAPS( count, size ) ( ( (size) << 16 ) | ( (count) << 0 ) )
52#define ENA_AQ_BASE 0x10
55#define ENA_AQ_CAPS 0x18
58#define ENA_ACQ_BASE 0x20
61#define ENA_ACQ_CAPS 0x28
67#define ENA_ADMIN_MAX_WAIT_MS 5000
70#define ENA_AENQ_CAPS 0x34
73#define ENA_AENQ_BASE 0x38
77#define ENA_CTRL_RESET 0x00000001UL
80#define ENA_RESET_MAX_WAIT_MS 1000
84#define ENA_STAT_RESET 0x00000008UL
99#define ENA_AQ_PHASE 0x01
118#define ENA_ACQ_PHASE 0x01
121#define ENA_DEVICE_ATTRIBUTES 1
146#define ENA_FEATURE_LLQ 0x00000010
149#define ENA_LLQ_CONFIG 4
202#define ENA_AENQ_CONFIG 26
213#define ENA_HOST_ATTRIBUTES 28
263#define ENA_HOST_INFO_TYPE_IPXE 5
284#define ENA_HOST_INFO_VERSION_WTF 0x00000002UL
287#define ENA_HOST_INFO_SPEC_2_0 0x0200
310#define ENA_CREATE_SQ 1
361#define ENA_DESTROY_SQ 2
382#define ENA_CREATE_CQ 3
406#define ENA_MSIX_NONE 0xffffffffUL
425#define ENA_DESTROY_CQ 4
444#define ENA_GET_FEATURE 8
471#define ENA_SET_FEATURE 9
492#define ENA_GET_STATS 11
513#define ENA_STATS_TYPE_BASIC 0
516#define ENA_STATS_SCOPE_ETH 1
519#define ENA_DEVICE_MINE 0xffff
646#define ENA_TX_SQE_META 0x80
665#define ENA_SQE_PHASE 0x01
668#define ENA_SQE_FIRST 0x04
671#define ENA_SQE_LAST 0x08
674#define ENA_SQE_CPL 0x10
691#define ENA_TX_CQE_ID(id) ( (id) >> 2 )
708#define ENA_CQE_PHASE 0x01
unsigned long long uint64_t
uint8_t direction
Direction.
ena_sq_policy
Submission queue policy.
@ ENA_SQ_HOST_MEMORY
Use host memory.
@ ENA_SQ_CONTIGUOUS
Memory is contiguous.
@ ENA_SQ_DEVICE_MEMORY
Use on-device memory (must be used in addition to host memory)
ena_sq_direction
Submission queue direction.
struct ena_tx_sqe sqe
Transmit descriptor.
static unsigned int unsigned int size_t uint8_t * ids
ena_llq_header
Low latency queue header locations.
@ ENA_LLQ_HEADER_INLINE
Headers are placed inline immediately after descriptors.
#define ENA_TX_COUNT
Number of transmit queue entries.
ena_llq_desc
Low latency queue descriptor count.
@ ENA_LLQ_DESC_2
Two descriptors before inline headers.
#define ENA_RX_COUNT
Number of receive queue entries.
ena_llq_size
Low latency queue entry sizes.
@ ENA_LLQ_SIZE_128
Entries are 128 bytes.
uint16_t size
Buffer size.
static unsigned int count
Number of entries.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
enum ena_llq_header __attribute__
unsigned int cons
Consumer counter.
union ena_acq_rsp * rsp
Responses.
Async event notification queue config.
uint32_t supported
Bitmask of supported AENQ groups (device -> host)
uint32_t enabled
Bitmask of enabled AENQ groups (host -> device)
Async event notification queue event.
uint16_t syndrome
ID of event.
uint8_t reserved[3]
Reserved.
uint16_t group
Type of event.
uint8_t data[48]
Additional event data.
uint64_t timestamp
Timestamp.
Async event notification queue.
struct ena_aenq_event * evt
Events.
union ena_aq_req * req
Requests.
unsigned int prod
Producer counter.
unsigned int doorbell
Doorbell register offset.
union ena_cq::@110211317331036231100031277162175350247362043324 cqe
Entries.
uint16_t id
Completion queue identifier.
size_t len
Total length of entries.
uint8_t requested
Requested number of entries.
unsigned int cons
Consumer counter.
struct ena_tx_cqe * tx
Transmit completion queue entries.
uint8_t actual
Actual number of entries.
uint8_t mask
Actual number of entries minus one.
uint8_t size
Entry size (in 32-bit words)
struct ena_rx_cqe * rx
Receive completion queue entries.
Create completion queue request.
uint16_t count
Number of entries.
uint32_t vector
MSI-X vector.
uint8_t size
Entry size (in 32-bit words)
struct ena_aq_header header
Header.
uint64_t address
Base address.
uint8_t intr
Interrupts enabled.
Create completion queue response.
uint32_t intr
Interrupt unmask register offset.
uint16_t id
Completion queue identifier.
uint32_t doorbell
Doorbell register offset.
uint32_t node
NUMA node register offset.
struct ena_acq_header header
Header.
uint16_t count
Actual number of entries.
Create submission queue request.
uint8_t reserved_b[8]
Reserved.
uint64_t writeback
Writeback address.
uint16_t cq_id
Completion queue identifier.
uint8_t direction
Direction.
uint64_t address
Base address.
uint16_t count
Number of entries.
uint8_t reserved_a
Reserved.
struct ena_aq_header header
Header.
Create submission queue response.
uint32_t doorbell
Doorbell register offset.
uint16_t id
Submission queue identifier.
uint32_t llqe
LLQ descriptor ring offset.
uint8_t reserved_b[4]
Reserved.
struct ena_acq_header header
Header.
uint8_t reserved_a[2]
Reserved.
Destroy completion queue request.
uint16_t id
Completion queue identifier.
struct ena_aq_header header
Header.
uint8_t reserved[2]
Reserved.
Destroy completion queue response.
struct ena_acq_header header
Header.
Destroy submission queue request.
uint16_t id
Submission queue identifier.
uint8_t direction
Direction.
uint8_t reserved
Reserved.
struct ena_aq_header header
Header.
Destroy submission queue response.
struct ena_acq_header header
Header.
uint8_t mac[ETH_ALEN]
MAC address.
uint32_t version
Device version.
uint32_t features
Supported features.
uint8_t reserved_a[4]
Reserved.
uint32_t physical
Physical address width.
uint8_t reserved_b[2]
Reserved.
uint32_t implementation
Implementation.
struct ena_aq_header header
Header.
uint8_t reserved[2]
Reserved.
uint8_t id
Feature identifier.
union ena_feature feature
Feature.
struct ena_acq_header header
Header.
uint8_t reserved_b[2]
Reserved.
uint16_t device
Device ID.
struct ena_aq_header header
Header.
uint8_t reserved_a[12]
Reserved.
uint64_t rx_packets
Receive packet count.
uint64_t rx_drops
Receive drop count.
struct ena_acq_header header
Header.
uint64_t tx_bytes
Transmit byte count.
uint64_t rx_bytes
Receive byte count.
uint64_t tx_packets
Transmit packet count.
uint32_t debug_len
Debug area size.
uint64_t info
Host info base address.
uint64_t debug
Debug area base address.
char dist_str[128]
Operating system distribution (string)
uint32_t type
Operating system type.
uint64_t linux_features
Linux network device features.
uint32_t features
Supported features.
uint32_t kernel
Kernel version (numeric)
uint16_t busdevfn
PCI bus:dev.fn address.
uint16_t spec
ENA specification version.
uint16_t cpus
Number of CPUs.
char kernel_str[32]
Kernel version (string)
uint8_t reserved_a[2]
Reserved.
uint32_t version
Driver version.
uint32_t dist
Operating system distribution (numeric)
Low latency queue config.
struct ena_llq_option desc
Descriptor counts.
struct ena_llq_option size
Entry sizes.
struct ena_llq_option header
Header locations.
struct ena_llq_option stride
Descriptor strides.
uint16_t burst
Maximum burst size.
uint8_t reserved_b[4]
Reserved.
uint16_t mode
Acceleration mode.
uint32_t count
Maximum queue depth.
uint8_t reserved_a[4]
Reserved.
uint32_t queues
Maximum number of low latency queues.
A low latency queue option.
uint16_t supported
Bitmask of supported option values.
uint16_t enabled
Single-entry bitmask of the enabled option value.
struct ena_aq aq
Admin queue.
struct io_buffer * rx_iobuf[ENA_RX_COUNT]
Receive I/O buffers, indexed by buffer ID.
uint8_t rx_ids[ENA_RX_COUNT]
Receive buffer IDs.
struct ena_host_info * info
Host info.
uint32_t features
Device features.
struct ena_aenq aenq
Async event notification queue.
struct ena_qp tx
Transmit queue.
struct io_buffer * tx_iobuf[ENA_TX_COUNT]
Transmit I/O buffers, indexed by buffer ID.
struct ena_qp rx
Receive queue.
struct ena_acq acq
Admin completion queue.
uint8_t tx_ids[ENA_TX_COUNT]
Transmit buffer IDs.
void * mem
On-device memory.
struct ena_sq sq
Submission queue.
struct ena_cq cq
Completion queue.
Receive completion queue entry.
uint16_t id
Request identifier.
uint8_t reserved_b[8]
Reserved.
uint8_t reserved_a[3]
Reserved.
Receive submission queue entry.
uint8_t reserved_a
Reserved.
uint8_t reserved_b[2]
Reserved.
uint16_t id
Request identifier.
union ena_feature feature
Feature.
uint8_t reserved[2]
Reserved.
struct ena_aq_header header
Header.
uint8_t id
Feature identifier.
uint8_t count
Number of entries.
struct ena_rx_sqe * rx
Receive submission queue entries.
size_t len
Total length of entries.
unsigned int prod
Producer counter.
struct ena_tx_sqe * tx
Transmit submission queue entries.
uint8_t direction
Direction.
uint16_t id
Submission queue identifier.
uint16_t policy
Queue policy.
struct ena_tx_llqe * llq
Low latency queue bounce buffer.
unsigned int doorbell
Doorbell register offset.
uint8_t inlined
Maximum inline header length.
uint8_t fill
Fill level (limited to completion queue size)
void * llqe
Low latency queue base.
Transmit completion queue entry.
uint16_t cons
Consumer index.
uint8_t reserved[2]
Reserved.
uint16_t id
Request identifier.
Low latency transmit queue bounce buffer.
struct ena_tx_sqe sqe
Transmit descriptor.
struct ena_tx_sqe meta
Pointless metadata descriptor.
uint8_t inlined[96]
Inlined header data.
Transmit submission queue entry.
uint8_t reserved_b[3]
Reserved.
uint8_t meta
Metadata flags.
uint8_t reserved[7]
Reserved.
uint8_t inlined
Inlined length.
uint8_t id
Request identifier.
Admin completion queue response.
struct ena_acq_header header
Header.
struct ena_create_cq_rsp create_cq
Create completion queue.
struct ena_get_stats_rsp get_stats
Get statistics.
struct ena_get_feature_rsp get_feature
Get feature.
struct ena_create_sq_rsp create_sq
Create submission queue.
struct ena_destroy_sq_rsp destroy_sq
Destroy submission queue.
struct ena_destroy_cq_rsp destroy_cq
Destroy completion queue.
struct ena_get_stats_req get_stats
Get statistics.
struct ena_destroy_sq_req destroy_sq
Destroy submission queue.
struct ena_create_sq_req create_sq
Create submission queue.
struct ena_aq_header header
Header.
struct ena_create_cq_req create_cq
Create completion queue.
struct ena_set_feature_req set_feature
Set feature.
struct ena_get_feature_req get_feature
Get feature.
struct ena_destroy_cq_req destroy_cq
Destroy completion queue.
struct ena_llq_config llq
Low latency queue configuration.
struct ena_host_attributes host
Host attributes.
struct ena_device_attributes device
Device attributes.
struct ena_aenq_config aenq
Async event notification queue config.