iPXE
ena.h
Go to the documentation of this file.
1#ifndef _ENA_H
2#define _ENA_H
4/** @file
5 *
6 * Amazon ENA network driver
7 *
8 */
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
12#include <stdint.h>
14
15/** Register BAR */
16#define ENA_REGS_BAR PCI_BASE_ADDRESS_0
18/** Register BAR size */
19#define ENA_REGS_SIZE 16384
20
21/** On-device memory BAR */
22#define ENA_MEM_BAR PCI_BASE_ADDRESS_2
23
24/** Queue alignment */
25#define ENA_ALIGN 4096
26
27/** Number of admin queue entries */
28#define ENA_AQ_COUNT 2
29
30/** Number of admin completion queue entries */
31#define ENA_ACQ_COUNT 2
32
33/** Number of async event notification queue entries */
34#define ENA_AENQ_COUNT 2
35
36/** Number of transmit queue entries */
37#define ENA_TX_COUNT 32
38
39/** Number of receive queue entries */
40#define ENA_RX_COUNT 32
41
42/** Base address low register offset */
43#define ENA_BASE_LO 0x0
44
45/** Base address high register offset */
46#define ENA_BASE_HI 0x4
47
48/** Capability register value */
49#define ENA_CAPS( count, size ) ( ( (size) << 16 ) | ( (count) << 0 ) )
50
51/** Admin queue base address register */
52#define ENA_AQ_BASE 0x10
53
54/** Admin queue capabilities register */
55#define ENA_AQ_CAPS 0x18
56
57/** Admin completion queue base address register */
58#define ENA_ACQ_BASE 0x20
59
60/** Admin completion queue capabilities register */
61#define ENA_ACQ_CAPS 0x28
62
63/** Admin queue doorbell register */
64#define ENA_AQ_DB 0x2c
65
66/** Maximum time to wait for admin requests */
67#define ENA_ADMIN_MAX_WAIT_MS 5000
68
69/** Async event notification queue capabilities register */
70#define ENA_AENQ_CAPS 0x34
71
72/** Async event notification queue base address register */
73#define ENA_AENQ_BASE 0x38
74
75/** Device control register */
76#define ENA_CTRL 0x54
77#define ENA_CTRL_RESET 0x00000001UL /**< Reset */
78
79/** Maximum time to wait for reset */
80#define ENA_RESET_MAX_WAIT_MS 1000
81
82/** Device status register */
83#define ENA_STAT 0x58
84#define ENA_STAT_RESET 0x00000008UL /**< Reset in progress */
85
86/** Admin queue entry header */
88 /** Request identifier */
90 /** Reserved */
92 /** Opcode */
94 /** Flags */
96} __attribute__ (( packed ));
97
98/** Admin queue ownership phase flag */
99#define ENA_AQ_PHASE 0x01
100
101/** Admin completion queue entry header */
103 /** Request identifier */
105 /** Reserved */
107 /** Status */
109 /** Flags */
111 /** Extended status */
113 /** Consumer index */
115} __attribute__ (( packed ));
116
117/** Admin completion queue ownership phase flag */
118#define ENA_ACQ_PHASE 0x01
119
120/** Device attributes */
121#define ENA_DEVICE_ATTRIBUTES 1
122
123/** Device attributes */
125 /** Implementation */
127 /** Device version */
129 /** Supported features */
131 /** Reserved */
133 /** Physical address width */
135 /** Virtual address width */
136 uint32_t virtual;
137 /** MAC address */
139 /** Reserved */
141 /** Maximum MTU */
143} __attribute__ (( packed ));
144
145/** Device supports low latency queues */
146#define ENA_FEATURE_LLQ 0x00000010
147
148/** Low latency queue config */
149#define ENA_LLQ_CONFIG 4
150
151/** A low latency queue option */
153 /** Bitmask of supported option values */
155 /** Single-entry bitmask of the enabled option value */
157} __attribute__ (( packed ));
158
159/** Low latency queue config */
161 /** Maximum number of low latency queues */
163 /** Maximum queue depth */
165 /** Header locations */
167 /** Entry sizes */
169 /** Descriptor counts */
171 /** Descriptor strides */
173 /** Reserved */
175 /** Acceleration mode */
177 /** Maximum burst size */
179 /** Reserved */
181} __attribute__ (( packed ));
182
183/** Low latency queue header locations */
185 /** Headers are placed inline immediately after descriptors */
188
189/** Low latency queue entry sizes */
191 /** Entries are 128 bytes */
193};
194
195/** Low latency queue descriptor count */
197 /** Two descriptors before inline headers */
199};
200
201/** Async event notification queue config */
202#define ENA_AENQ_CONFIG 26
203
204/** Async event notification queue config */
206 /** Bitmask of supported AENQ groups (device -> host) */
208 /** Bitmask of enabled AENQ groups (host -> device) */
210} __attribute__ (( packed ));
211
212/** Host attributes */
213#define ENA_HOST_ATTRIBUTES 28
214
215/** Host attributes */
217 /** Host info base address */
219 /** Debug area base address */
221 /** Debug area size */
223} __attribute__ (( packed ));
224
225/** Host information */
227 /** Operating system type */
229 /** Operating system distribution (string) */
230 char dist_str[128];
231 /** Operating system distribution (numeric) */
233 /** Kernel version (string) */
234 char kernel_str[32];
235 /** Kernel version (numeric) */
237 /** Driver version */
239 /** Linux network device features */
241 /** ENA specification version */
243 /** PCI bus:dev.fn address */
245 /** Number of CPUs */
247 /** Reserved */
249 /** Supported features */
251} __attribute__ (( packed ));
252
253/** Operating system type
254 *
255 * Some very broken older versions of the ENA firmware will refuse to
256 * allow a completion queue to be created if "iPXE" (type 5) is used,
257 * and require us to pretend that we are "Linux" (type 1) instead.
258 *
259 * The ENA team at AWS assures us that the entire AWS fleet has been
260 * upgraded to fix this bug, and that we are now safe to use the
261 * correct operating system type value.
262 */
263#define ENA_HOST_INFO_TYPE_IPXE 5
264
265/** Driver version
266 *
267 * The driver version field is nominally used to report a version
268 * number outside of the VM for consumption by humans (and potentially
269 * by automated monitoring tools that could e.g. check for outdated
270 * versions with known security flaws).
271 *
272 * However, at some point in the development of the ENA firmware, some
273 * unknown person at AWS thought it would be sensible to apply a
274 * machine interpretation to this field and adjust the behaviour of
275 * the firmware based on its value, thereby creating a maintenance and
276 * debugging nightmare for all existing and future drivers.
277 *
278 * Hint to engineers: if you ever find yourself writing code of the
279 * form "if (version == SOME_MAGIC_NUMBER)" then something has gone
280 * very, very wrong. This *always* indicates that something is
281 * broken, either in your own code or in the code with which you are
282 * forced to interact.
283 */
284#define ENA_HOST_INFO_VERSION_WTF 0x00000002UL
285
286/** ENA specification version */
287#define ENA_HOST_INFO_SPEC_2_0 0x0200
288
289/** Feature */
291 /** Device attributes */
293 /** Low latency queue configuration */
295 /** Async event notification queue config */
297 /** Host attributes */
299};
300
301/** Submission queue direction */
303 /** Transmit */
304 ENA_SQ_TX = 0x20,
305 /** Receive */
306 ENA_SQ_RX = 0x40,
307};
308
309/** Create submission queue */
310#define ENA_CREATE_SQ 1
311
312/** Create submission queue request */
314 /** Header */
316 /** Direction */
318 /** Reserved */
320 /** Policy */
322 /** Completion queue identifier */
324 /** Number of entries */
326 /** Base address */
328 /** Writeback address */
330 /** Reserved */
332} __attribute__ (( packed ));
333
334/** Submission queue policy */
336 /** Use host memory */
338 /** Use on-device memory (must be used in addition to host memory) */
340 /** Memory is contiguous */
342};
343
344/** Create submission queue response */
346 /** Header */
348 /** Submission queue identifier */
350 /** Reserved */
352 /** Doorbell register offset */
354 /** LLQ descriptor ring offset */
356 /** Reserved */
358} __attribute__ (( packed ));
359
360/** Destroy submission queue */
361#define ENA_DESTROY_SQ 2
362
363/** Destroy submission queue request */
365 /** Header */
367 /** Submission queue identifier */
369 /** Direction */
371 /** Reserved */
373} __attribute__ (( packed ));
374
375/** Destroy submission queue response */
377 /** Header */
379} __attribute__ (( packed ));
380
381/** Create completion queue */
382#define ENA_CREATE_CQ 3
383
384/** Create completion queue request */
386 /** Header */
388 /** Interrupts enabled */
390 /** Entry size (in 32-bit words) */
392 /** Number of entries */
394 /** MSI-X vector */
396 /** Base address */
398} __attribute__ (( packed ));
399
400/** Empty MSI-X vector
401 *
402 * Some versions of the ENA firmware will complain if the completion
403 * queue's MSI-X vector field is left empty, even though the queue
404 * configuration specifies that interrupts are not used.
405 */
406#define ENA_MSIX_NONE 0xffffffffUL
407
408/** Create completion queue response */
410 /** Header */
412 /** Completion queue identifier */
414 /** Actual number of entries */
416 /** NUMA node register offset */
418 /** Doorbell register offset */
420 /** Interrupt unmask register offset */
422} __attribute__ (( packed ));
423
424/** Destroy completion queue */
425#define ENA_DESTROY_CQ 4
426
427/** Destroy completion queue request */
429 /** Header */
431 /** Completion queue identifier */
433 /** Reserved */
435} __attribute__ (( packed ));
436
437/** Destroy completion queue response */
439 /** Header */
441} __attribute__ (( packed ));
442
443/** Get feature */
444#define ENA_GET_FEATURE 8
445
446/** Get feature request */
448 /** Header */
450 /** Length */
452 /** Address */
454 /** Flags */
456 /** Feature identifier */
458 /** Reserved */
460} __attribute__ (( packed ));
461
462/** Get feature response */
464 /** Header */
466 /** Feature */
468} __attribute__ (( packed ));
469
470/** Set feature */
471#define ENA_SET_FEATURE 9
472
473/** Set feature request */
475 /** Header */
477 /** Length */
479 /** Address */
481 /** Flags */
483 /** Feature identifier */
485 /** Reserved */
487 /** Feature */
489} __attribute__ (( packed ));
490
491/** Get statistics */
492#define ENA_GET_STATS 11
493
494/** Get statistics request */
496 /** Header */
498 /** Reserved */
500 /** Type */
502 /** Scope */
504 /** Reserved */
506 /** Queue ID */
508 /** Device ID */
510} __attribute__ (( packed ));
511
512/** Basic statistics */
513#define ENA_STATS_TYPE_BASIC 0
514
515/** Ethernet statistics */
516#define ENA_STATS_SCOPE_ETH 1
517
518/** My device */
519#define ENA_DEVICE_MINE 0xffff
520
521/** Get statistics response */
523 /** Header */
525 /** Transmit byte count */
527 /** Transmit packet count */
529 /** Receive byte count */
531 /** Receive packet count */
533 /** Receive drop count */
535} __attribute__ (( packed ));
536
537/** Admin queue request */
539 /** Header */
541 /** Create submission queue */
543 /** Destroy submission queue */
545 /** Create completion queue */
547 /** Destroy completion queue */
549 /** Get feature */
551 /** Set feature */
553 /** Get statistics */
555 /** Padding */
557};
558
559/** Admin completion queue response */
561 /** Header */
563 /** Create submission queue */
565 /** Destroy submission queue */
567 /** Create completion queue */
569 /** Destroy completion queue */
571 /** Get feature */
573 /** Get statistics */
575 /** Padding */
577};
578
579/** Admin queue */
580struct ena_aq {
581 /** Requests */
583 /** Producer counter */
584 unsigned int prod;
585};
586
587/** Admin completion queue */
588struct ena_acq {
589 /** Responses */
591 /** Consumer counter */
592 unsigned int cons;
593 /** Phase */
594 unsigned int phase;
595};
596
597/** Async event notification queue event */
599 /** Type of event */
601 /** ID of event */
603 /** Phase */
605 /** Reserved */
607 /** Timestamp */
609 /** Additional event data */
611} __attribute__ (( packed ));
612
613/** Async event notification queue */
614struct ena_aenq {
615 /** Events */
617};
618
619/** Transmit submission queue entry */
621 /** Length */
623 /** Metadata flags */
625 /** Flags */
627 /** Reserved */
629 /** Request identifier */
631 /** Address and inlined length */
632 union {
633 /** Address */
635 /** Inlined length */
636 struct {
637 /** Reserved */
639 /** Inlined length */
641 } __attribute__ (( packed ));
642 } __attribute__ (( packed ));
643} __attribute__ (( packed ));
644
645/** This is a metadata entry */
646#define ENA_TX_SQE_META 0x80
647
648/** Receive submission queue entry */
650 /** Length */
652 /** Reserved */
654 /** Flags */
656 /** Request identifier */
658 /** Reserved */
660 /** Address */
662} __attribute__ (( packed ));
663
664/** Submission queue ownership phase flag */
665#define ENA_SQE_PHASE 0x01
666
667/** This is the first descriptor */
668#define ENA_SQE_FIRST 0x04
669
670/** This is the last descriptor */
671#define ENA_SQE_LAST 0x08
672
673/** Request completion */
674#define ENA_SQE_CPL 0x10
675
676/** Transmit completion queue entry */
678 /** Request identifier */
680 /** Status */
682 /** Flags */
684 /** Reserved */
686 /** Consumer index */
688} __attribute__ (( packed ));
689
690/** Transmit completion request identifier */
691#define ENA_TX_CQE_ID(id) ( (id) >> 2 )
692
693/** Receive completion queue entry */
695 /** Reserved */
697 /** Flags */
699 /** Length */
701 /** Request identifier */
703 /** Reserved */
705} __attribute__ (( packed ));
706
707/** Completion queue ownership phase flag */
708#define ENA_CQE_PHASE 0x01
709
710/** Low latency transmit queue bounce buffer */
712 /** Pointless metadata descriptor */
714 /** Transmit descriptor */
716 /** Inlined header data */
718} __attribute__ (( packed ));
719
720/** Submission queue */
721struct ena_sq {
722 /** Entries */
723 union {
724 /** Transmit submission queue entries */
725 struct ena_tx_sqe *tx;
726 /** Receive submission queue entries */
727 struct ena_rx_sqe *rx;
728 /** Low latency queue bounce buffer */
730 /** Raw data */
731 void *raw;
733 /** Buffer IDs */
735 /** Low latency queue base */
736 void *llqe;
737 /** Doorbell register offset */
738 unsigned int doorbell;
739 /** Total length of entries */
740 size_t len;
741 /** Producer counter */
742 unsigned int prod;
743 /** Phase */
744 unsigned int phase;
745 /** Queue policy */
747 /** Submission queue identifier */
749 /** Direction */
751 /** Number of entries */
753 /** Fill level (limited to completion queue size) */
755 /** Maximum inline header length */
757};
758
759/**
760 * Initialise submission queue
761 *
762 * @v sq Submission queue
763 * @v direction Direction
764 * @v count Number of entries
765 * @v size Size of each entry
766 * @v ids Buffer IDs
767 */
768static inline __attribute__ (( always_inline )) void
769ena_sq_init ( struct ena_sq *sq, unsigned int direction, unsigned int count,
770 size_t size, uint8_t *ids ) {
771
772 sq->len = ( count * size );
774 sq->direction = direction;
775 sq->count = count;
776 sq->ids = ids;
777}
778
779/** Completion queue */
780struct ena_cq {
781 /** Entries */
782 union {
783 /** Transmit completion queue entries */
784 struct ena_tx_cqe *tx;
785 /** Receive completion queue entries */
786 struct ena_rx_cqe *rx;
787 /** Raw data */
788 void *raw;
790 /** Doorbell register offset */
791 unsigned int doorbell;
792 /** Total length of entries */
793 size_t len;
794 /** Consumer counter */
795 unsigned int cons;
796 /** Phase */
797 unsigned int phase;
798 /** Completion queue identifier */
800 /** Entry size (in 32-bit words) */
802 /** Requested number of entries */
804 /** Actual number of entries */
806 /** Actual number of entries minus one */
808};
809
810/**
811 * Initialise completion queue
812 *
813 * @v cq Completion queue
814 * @v count Number of entries
815 * @v size Size of each entry
816 */
817static inline __attribute__ (( always_inline )) void
818ena_cq_init ( struct ena_cq *cq, unsigned int count, size_t size ) {
819
820 cq->len = ( count * size );
821 cq->size = ( size / sizeof ( uint32_t ) );
823}
824
825/** Queue pair */
826struct ena_qp {
827 /** Submission queue */
828 struct ena_sq sq;
829 /** Completion queue */
830 struct ena_cq cq;
831};
832
833/** An ENA network card */
834struct ena_nic {
835 /** Registers */
836 void *regs;
837 /** On-device memory */
838 void *mem;
839 /** Device features */
841 /** Host info */
843 /** Admin queue */
844 struct ena_aq aq;
845 /** Admin completion queue */
846 struct ena_acq acq;
847 /** Async event notification queue */
849 /** Transmit queue */
850 struct ena_qp tx;
851 /** Receive queue */
852 struct ena_qp rx;
853 /** Transmit buffer IDs */
855 /** Transmit I/O buffers, indexed by buffer ID */
857 /** Receive buffer IDs */
859 /** Receive I/O buffers, indexed by buffer ID */
861};
862
863#endif /* _ENA_H */
unsigned short uint16_t
Definition stdint.h:11
unsigned int uint32_t
Definition stdint.h:12
unsigned long long uint64_t
Definition stdint.h:13
unsigned char uint8_t
Definition stdint.h:10
uint8_t direction
Direction.
Definition ena.h:3
ena_sq_policy
Submission queue policy.
Definition ena.h:335
@ ENA_SQ_HOST_MEMORY
Use host memory.
Definition ena.h:337
@ ENA_SQ_CONTIGUOUS
Memory is contiguous.
Definition ena.h:341
@ ENA_SQ_DEVICE_MEMORY
Use on-device memory (must be used in addition to host memory)
Definition ena.h:339
ena_sq_direction
Submission queue direction.
Definition ena.h:302
@ ENA_SQ_TX
Transmit.
Definition ena.h:304
@ ENA_SQ_RX
Receive.
Definition ena.h:306
struct ena_tx_sqe sqe
Transmit descriptor.
Definition ena.h:3
static unsigned int unsigned int size_t uint8_t * ids
Definition ena.h:770
ena_llq_header
Low latency queue header locations.
Definition ena.h:184
@ ENA_LLQ_HEADER_INLINE
Headers are placed inline immediately after descriptors.
Definition ena.h:186
#define ENA_TX_COUNT
Number of transmit queue entries.
Definition ena.h:37
ena_llq_desc
Low latency queue descriptor count.
Definition ena.h:196
@ ENA_LLQ_DESC_2
Two descriptors before inline headers.
Definition ena.h:198
#define ENA_RX_COUNT
Number of receive queue entries.
Definition ena.h:40
ena_llq_size
Low latency queue entry sizes.
Definition ena.h:190
@ ENA_LLQ_SIZE_128
Entries are 128 bytes.
Definition ena.h:192
uint16_t size
Buffer size.
Definition dwmac.h:3
static unsigned int count
Number of entries.
Definition dwmac.h:220
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
enum ena_llq_header __attribute__
#define ETH_ALEN
Definition if_ether.h:9
Admin completion queue entry header.
Definition ena.h:102
uint8_t flags
Flags.
Definition ena.h:110
uint16_t cons
Consumer index.
Definition ena.h:114
uint8_t status
Status.
Definition ena.h:108
uint8_t reserved
Reserved.
Definition ena.h:106
uint16_t ext
Extended status.
Definition ena.h:112
uint8_t id
Request identifier.
Definition ena.h:104
Admin completion queue.
Definition ena.h:588
unsigned int cons
Consumer counter.
Definition ena.h:592
union ena_acq_rsp * rsp
Responses.
Definition ena.h:590
unsigned int phase
Phase.
Definition ena.h:594
Async event notification queue config.
Definition ena.h:205
uint32_t supported
Bitmask of supported AENQ groups (device -> host)
Definition ena.h:207
uint32_t enabled
Bitmask of enabled AENQ groups (host -> device)
Definition ena.h:209
Async event notification queue event.
Definition ena.h:598
uint16_t syndrome
ID of event.
Definition ena.h:602
uint8_t reserved[3]
Reserved.
Definition ena.h:606
uint16_t group
Type of event.
Definition ena.h:600
uint8_t flags
Phase.
Definition ena.h:604
uint8_t data[48]
Additional event data.
Definition ena.h:610
uint64_t timestamp
Timestamp.
Definition ena.h:608
Async event notification queue.
Definition ena.h:614
struct ena_aenq_event * evt
Events.
Definition ena.h:616
Admin queue entry header.
Definition ena.h:87
uint8_t id
Request identifier.
Definition ena.h:89
uint8_t flags
Flags.
Definition ena.h:95
uint8_t reserved
Reserved.
Definition ena.h:91
uint8_t opcode
Opcode.
Definition ena.h:93
Admin queue.
Definition ena.h:580
union ena_aq_req * req
Requests.
Definition ena.h:582
unsigned int prod
Producer counter.
Definition ena.h:584
Completion queue.
Definition ena.h:780
unsigned int doorbell
Doorbell register offset.
Definition ena.h:791
unsigned int phase
Phase.
Definition ena.h:797
union ena_cq::@110211317331036231100031277162175350247362043324 cqe
Entries.
uint16_t id
Completion queue identifier.
Definition ena.h:799
size_t len
Total length of entries.
Definition ena.h:793
uint8_t requested
Requested number of entries.
Definition ena.h:803
unsigned int cons
Consumer counter.
Definition ena.h:795
struct ena_tx_cqe * tx
Transmit completion queue entries.
Definition ena.h:784
uint8_t actual
Actual number of entries.
Definition ena.h:805
uint8_t mask
Actual number of entries minus one.
Definition ena.h:807
uint8_t size
Entry size (in 32-bit words)
Definition ena.h:801
struct ena_rx_cqe * rx
Receive completion queue entries.
Definition ena.h:786
void * raw
Raw data.
Definition ena.h:788
Create completion queue request.
Definition ena.h:385
uint16_t count
Number of entries.
Definition ena.h:393
uint32_t vector
MSI-X vector.
Definition ena.h:395
uint8_t size
Entry size (in 32-bit words)
Definition ena.h:391
struct ena_aq_header header
Header.
Definition ena.h:387
uint64_t address
Base address.
Definition ena.h:397
uint8_t intr
Interrupts enabled.
Definition ena.h:389
Create completion queue response.
Definition ena.h:409
uint32_t intr
Interrupt unmask register offset.
Definition ena.h:421
uint16_t id
Completion queue identifier.
Definition ena.h:413
uint32_t doorbell
Doorbell register offset.
Definition ena.h:419
uint32_t node
NUMA node register offset.
Definition ena.h:417
struct ena_acq_header header
Header.
Definition ena.h:411
uint16_t count
Actual number of entries.
Definition ena.h:415
Create submission queue request.
Definition ena.h:313
uint8_t reserved_b[8]
Reserved.
Definition ena.h:331
uint64_t writeback
Writeback address.
Definition ena.h:329
uint16_t cq_id
Completion queue identifier.
Definition ena.h:323
uint8_t direction
Direction.
Definition ena.h:317
uint64_t address
Base address.
Definition ena.h:327
uint16_t count
Number of entries.
Definition ena.h:325
uint8_t reserved_a
Reserved.
Definition ena.h:319
uint16_t policy
Policy.
Definition ena.h:321
struct ena_aq_header header
Header.
Definition ena.h:315
Create submission queue response.
Definition ena.h:345
uint32_t doorbell
Doorbell register offset.
Definition ena.h:353
uint16_t id
Submission queue identifier.
Definition ena.h:349
uint32_t llqe
LLQ descriptor ring offset.
Definition ena.h:355
uint8_t reserved_b[4]
Reserved.
Definition ena.h:357
struct ena_acq_header header
Header.
Definition ena.h:347
uint8_t reserved_a[2]
Reserved.
Definition ena.h:351
Destroy completion queue request.
Definition ena.h:428
uint16_t id
Completion queue identifier.
Definition ena.h:432
struct ena_aq_header header
Header.
Definition ena.h:430
uint8_t reserved[2]
Reserved.
Definition ena.h:434
Destroy completion queue response.
Definition ena.h:438
struct ena_acq_header header
Header.
Definition ena.h:440
Destroy submission queue request.
Definition ena.h:364
uint16_t id
Submission queue identifier.
Definition ena.h:368
uint8_t direction
Direction.
Definition ena.h:370
uint8_t reserved
Reserved.
Definition ena.h:372
struct ena_aq_header header
Header.
Definition ena.h:366
Destroy submission queue response.
Definition ena.h:376
struct ena_acq_header header
Header.
Definition ena.h:378
Device attributes.
Definition ena.h:124
uint8_t mac[ETH_ALEN]
MAC address.
Definition ena.h:138
uint32_t version
Device version.
Definition ena.h:128
uint32_t features
Supported features.
Definition ena.h:130
uint8_t reserved_a[4]
Reserved.
Definition ena.h:132
uint32_t mtu
Maximum MTU.
Definition ena.h:142
uint32_t physical
Physical address width.
Definition ena.h:134
uint8_t reserved_b[2]
Reserved.
Definition ena.h:140
uint32_t implementation
Implementation.
Definition ena.h:126
Get feature request.
Definition ena.h:447
uint64_t address
Address.
Definition ena.h:453
struct ena_aq_header header
Header.
Definition ena.h:449
uint8_t reserved[2]
Reserved.
Definition ena.h:459
uint8_t flags
Flags.
Definition ena.h:455
uint8_t id
Feature identifier.
Definition ena.h:457
uint32_t len
Length.
Definition ena.h:451
Get feature response.
Definition ena.h:463
union ena_feature feature
Feature.
Definition ena.h:467
struct ena_acq_header header
Header.
Definition ena.h:465
Get statistics request.
Definition ena.h:495
uint8_t reserved_b[2]
Reserved.
Definition ena.h:505
uint16_t device
Device ID.
Definition ena.h:509
uint8_t type
Type.
Definition ena.h:501
struct ena_aq_header header
Header.
Definition ena.h:497
uint16_t queue
Queue ID.
Definition ena.h:507
uint8_t reserved_a[12]
Reserved.
Definition ena.h:499
uint8_t scope
Scope.
Definition ena.h:503
Get statistics response.
Definition ena.h:522
uint64_t rx_packets
Receive packet count.
Definition ena.h:532
uint64_t rx_drops
Receive drop count.
Definition ena.h:534
struct ena_acq_header header
Header.
Definition ena.h:524
uint64_t tx_bytes
Transmit byte count.
Definition ena.h:526
uint64_t rx_bytes
Receive byte count.
Definition ena.h:530
uint64_t tx_packets
Transmit packet count.
Definition ena.h:528
Host attributes.
Definition ena.h:216
uint32_t debug_len
Debug area size.
Definition ena.h:222
uint64_t info
Host info base address.
Definition ena.h:218
uint64_t debug
Debug area base address.
Definition ena.h:220
Host information.
Definition ena.h:226
char dist_str[128]
Operating system distribution (string)
Definition ena.h:230
uint32_t type
Operating system type.
Definition ena.h:228
uint64_t linux_features
Linux network device features.
Definition ena.h:240
uint32_t features
Supported features.
Definition ena.h:250
uint32_t kernel
Kernel version (numeric)
Definition ena.h:236
uint16_t busdevfn
PCI bus:dev.fn address.
Definition ena.h:244
uint16_t spec
ENA specification version.
Definition ena.h:242
uint16_t cpus
Number of CPUs.
Definition ena.h:246
char kernel_str[32]
Kernel version (string)
Definition ena.h:234
uint8_t reserved_a[2]
Reserved.
Definition ena.h:248
uint32_t version
Driver version.
Definition ena.h:238
uint32_t dist
Operating system distribution (numeric)
Definition ena.h:232
Low latency queue config.
Definition ena.h:160
struct ena_llq_option desc
Descriptor counts.
Definition ena.h:170
struct ena_llq_option size
Entry sizes.
Definition ena.h:168
struct ena_llq_option header
Header locations.
Definition ena.h:166
struct ena_llq_option stride
Descriptor strides.
Definition ena.h:172
uint16_t burst
Maximum burst size.
Definition ena.h:178
uint8_t reserved_b[4]
Reserved.
Definition ena.h:180
uint16_t mode
Acceleration mode.
Definition ena.h:176
uint32_t count
Maximum queue depth.
Definition ena.h:164
uint8_t reserved_a[4]
Reserved.
Definition ena.h:174
uint32_t queues
Maximum number of low latency queues.
Definition ena.h:162
A low latency queue option.
Definition ena.h:152
uint16_t supported
Bitmask of supported option values.
Definition ena.h:154
uint16_t enabled
Single-entry bitmask of the enabled option value.
Definition ena.h:156
An ENA network card.
Definition ena.h:834
void * regs
Registers.
Definition ena.h:836
struct ena_aq aq
Admin queue.
Definition ena.h:844
struct io_buffer * rx_iobuf[ENA_RX_COUNT]
Receive I/O buffers, indexed by buffer ID.
Definition ena.h:860
uint8_t rx_ids[ENA_RX_COUNT]
Receive buffer IDs.
Definition ena.h:858
struct ena_host_info * info
Host info.
Definition ena.h:842
uint32_t features
Device features.
Definition ena.h:840
struct ena_aenq aenq
Async event notification queue.
Definition ena.h:848
struct ena_qp tx
Transmit queue.
Definition ena.h:850
struct io_buffer * tx_iobuf[ENA_TX_COUNT]
Transmit I/O buffers, indexed by buffer ID.
Definition ena.h:856
struct ena_qp rx
Receive queue.
Definition ena.h:852
struct ena_acq acq
Admin completion queue.
Definition ena.h:846
uint8_t tx_ids[ENA_TX_COUNT]
Transmit buffer IDs.
Definition ena.h:854
void * mem
On-device memory.
Definition ena.h:838
Queue pair.
Definition ena.h:826
struct ena_sq sq
Submission queue.
Definition ena.h:828
struct ena_cq cq
Completion queue.
Definition ena.h:830
Receive completion queue entry.
Definition ena.h:694
uint16_t id
Request identifier.
Definition ena.h:702
uint8_t flags
Flags.
Definition ena.h:698
uint16_t len
Length.
Definition ena.h:700
uint8_t reserved_b[8]
Reserved.
Definition ena.h:704
uint8_t reserved_a[3]
Reserved.
Definition ena.h:696
Receive submission queue entry.
Definition ena.h:649
uint64_t address
Address.
Definition ena.h:661
uint8_t reserved_a
Reserved.
Definition ena.h:653
uint8_t flags
Flags.
Definition ena.h:655
uint8_t reserved_b[2]
Reserved.
Definition ena.h:659
uint16_t len
Length.
Definition ena.h:651
uint16_t id
Request identifier.
Definition ena.h:657
Set feature request.
Definition ena.h:474
union ena_feature feature
Feature.
Definition ena.h:488
uint64_t address
Address.
Definition ena.h:480
uint8_t reserved[2]
Reserved.
Definition ena.h:486
uint8_t flags
Flags.
Definition ena.h:482
struct ena_aq_header header
Header.
Definition ena.h:476
uint8_t id
Feature identifier.
Definition ena.h:484
uint32_t len
Length.
Definition ena.h:478
Submission queue.
Definition ena.h:721
uint8_t * ids
Buffer IDs.
Definition ena.h:734
uint8_t count
Number of entries.
Definition ena.h:752
struct ena_rx_sqe * rx
Receive submission queue entries.
Definition ena.h:727
size_t len
Total length of entries.
Definition ena.h:740
unsigned int prod
Producer counter.
Definition ena.h:742
struct ena_tx_sqe * tx
Transmit submission queue entries.
Definition ena.h:725
uint8_t direction
Direction.
Definition ena.h:750
uint16_t id
Submission queue identifier.
Definition ena.h:748
uint16_t policy
Queue policy.
Definition ena.h:746
void * raw
Raw data.
Definition ena.h:731
struct ena_tx_llqe * llq
Low latency queue bounce buffer.
Definition ena.h:729
unsigned int doorbell
Doorbell register offset.
Definition ena.h:738
uint8_t inlined
Maximum inline header length.
Definition ena.h:756
unsigned int phase
Phase.
Definition ena.h:744
uint8_t fill
Fill level (limited to completion queue size)
Definition ena.h:754
void * llqe
Low latency queue base.
Definition ena.h:736
Transmit completion queue entry.
Definition ena.h:677
uint8_t status
Status.
Definition ena.h:681
uint16_t cons
Consumer index.
Definition ena.h:687
uint8_t reserved[2]
Reserved.
Definition ena.h:685
uint8_t flags
Flags.
Definition ena.h:683
uint16_t id
Request identifier.
Definition ena.h:679
Low latency transmit queue bounce buffer.
Definition ena.h:711
struct ena_tx_sqe sqe
Transmit descriptor.
Definition ena.h:715
struct ena_tx_sqe meta
Pointless metadata descriptor.
Definition ena.h:713
uint8_t inlined[96]
Inlined header data.
Definition ena.h:717
Transmit submission queue entry.
Definition ena.h:620
uint8_t flags
Flags.
Definition ena.h:626
uint8_t reserved_b[3]
Reserved.
Definition ena.h:628
uint8_t meta
Metadata flags.
Definition ena.h:624
uint8_t reserved[7]
Reserved.
Definition ena.h:638
uint8_t inlined
Inlined length.
Definition ena.h:640
uint8_t id
Request identifier.
Definition ena.h:630
uint64_t address
Address.
Definition ena.h:634
uint16_t len
Length.
Definition ena.h:622
A persistent I/O buffer.
Definition iobuf.h:38
Admin completion queue response.
Definition ena.h:560
struct ena_acq_header header
Header.
Definition ena.h:562
uint8_t pad[64]
Padding.
Definition ena.h:576
struct ena_create_cq_rsp create_cq
Create completion queue.
Definition ena.h:568
struct ena_get_stats_rsp get_stats
Get statistics.
Definition ena.h:574
struct ena_get_feature_rsp get_feature
Get feature.
Definition ena.h:572
struct ena_create_sq_rsp create_sq
Create submission queue.
Definition ena.h:564
struct ena_destroy_sq_rsp destroy_sq
Destroy submission queue.
Definition ena.h:566
struct ena_destroy_cq_rsp destroy_cq
Destroy completion queue.
Definition ena.h:570
Admin queue request.
Definition ena.h:538
struct ena_get_stats_req get_stats
Get statistics.
Definition ena.h:554
struct ena_destroy_sq_req destroy_sq
Destroy submission queue.
Definition ena.h:544
uint8_t pad[64]
Padding.
Definition ena.h:556
struct ena_create_sq_req create_sq
Create submission queue.
Definition ena.h:542
struct ena_aq_header header
Header.
Definition ena.h:540
struct ena_create_cq_req create_cq
Create completion queue.
Definition ena.h:546
struct ena_set_feature_req set_feature
Set feature.
Definition ena.h:552
struct ena_get_feature_req get_feature
Get feature.
Definition ena.h:550
struct ena_destroy_cq_req destroy_cq
Destroy completion queue.
Definition ena.h:548
Feature.
Definition ena.h:290
struct ena_llq_config llq
Low latency queue configuration.
Definition ena.h:294
struct ena_host_attributes host
Host attributes.
Definition ena.h:298
struct ena_device_attributes device
Device attributes.
Definition ena.h:292
struct ena_aenq_config aenq
Async event notification queue config.
Definition ena.h:296