aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/net/ena.c6
-rw-r--r--src/drivers/net/ena.h11
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;
}