diff options
-rw-r--r-- | src/drivers/net/ena.c | 6 | ||||
-rw-r--r-- | src/drivers/net/ena.h | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/src/drivers/net/ena.c b/src/drivers/net/ena.c index c2a48a27d..400ae44fa 100644 --- a/src/drivers/net/ena.c +++ b/src/drivers/net/ena.c @@ -395,7 +395,7 @@ static int ena_create_sq ( struct ena_nic *ena, struct ena_sq *sq, sq->phase = ENA_SQE_PHASE; /* Calculate fill level */ - sq->fill = sq->count; + sq->fill = sq->max; if ( sq->fill > cq->actual ) sq->fill = cq->actual; @@ -1010,11 +1010,11 @@ static int ena_probe ( struct pci_device *pci ) { ena->acq.phase = ENA_ACQ_PHASE; ena_cq_init ( &ena->tx.cq, ENA_TX_COUNT, sizeof ( ena->tx.cq.cqe.tx[0] ) ); - ena_sq_init ( &ena->tx.sq, ENA_SQ_TX, ENA_TX_COUNT, + ena_sq_init ( &ena->tx.sq, ENA_SQ_TX, ENA_TX_COUNT, ENA_TX_COUNT, sizeof ( ena->tx.sq.sqe.tx[0] ), ena->tx_ids ); ena_cq_init ( &ena->rx.cq, ENA_RX_COUNT, sizeof ( ena->rx.cq.cqe.rx[0] ) ); - ena_sq_init ( &ena->rx.sq, ENA_SQ_RX, ENA_RX_COUNT, + ena_sq_init ( &ena->rx.sq, ENA_SQ_RX, ENA_RX_COUNT, ENA_RX_FILL, sizeof ( ena->rx.sq.sqe.rx[0] ), ena->rx_ids ); /* Fix up PCI device */ diff --git a/src/drivers/net/ena.h b/src/drivers/net/ena.h index cbee1e768..4e1896e86 100644 --- a/src/drivers/net/ena.h +++ b/src/drivers/net/ena.h @@ -28,7 +28,10 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define ENA_TX_COUNT 16 /** Number of receive queue entries */ -#define ENA_RX_COUNT 16 +#define ENA_RX_COUNT 128 + +/** Receive queue maximum fill level */ +#define ENA_RX_FILL 16 /** Base address low register offset */ #define ENA_BASE_LO 0x0 @@ -608,6 +611,8 @@ struct ena_sq { uint8_t direction; /** Number of entries */ uint8_t count; + /** Maximum fill level */ + uint8_t max; /** Fill level (limited to completion queue size) */ uint8_t fill; }; @@ -618,16 +623,18 @@ struct ena_sq { * @v sq Submission queue * @v direction Direction * @v count Number of entries + * @v max Maximum fill level * @v size Size of each entry * @v ids Buffer IDs */ static inline __attribute__ (( always_inline )) void ena_sq_init ( struct ena_sq *sq, unsigned int direction, unsigned int count, - size_t size, uint8_t *ids ) { + unsigned int max, size_t size, uint8_t *ids ) { sq->len = ( count * size ); sq->direction = direction; sq->count = count; + sq->max = max; sq->ids = ids; } |