diff --git a/src/drivers/net/gve.c b/src/drivers/net/gve.c index 4ac8d2a8a..62e02f050 100644 --- a/src/drivers/net/gve.c +++ b/src/drivers/net/gve.c @@ -639,9 +639,15 @@ static void gve_create_tx_param ( struct gve_queue *queue, /* Construct request parameters */ create->res = cpu_to_be64 ( dma ( &queue->res_map, queue->res ) ); create->desc = - cpu_to_be64 ( dma ( &queue->desc_map, queue->desc.tx ) ); + cpu_to_be64 ( dma ( &queue->desc_map, queue->desc.raw ) ); create->qpl_id = cpu_to_be32 ( type->qpl ); create->notify_id = cpu_to_be32 ( type->irq ); + create->desc_count = cpu_to_be16 ( queue->count ); + if ( queue->cmplt.raw ) { + create->cmplt = cpu_to_be64 ( dma ( &queue->cmplt_map, + queue->cmplt.raw ) ); + create->cmplt_count = cpu_to_be16 ( queue->count ); + } } /** @@ -659,11 +665,13 @@ static void gve_create_rx_param ( struct gve_queue *queue, create->notify_id = cpu_to_be32 ( type->irq ); create->res = cpu_to_be64 ( dma ( &queue->res_map, queue->res ) ); create->desc = - cpu_to_be64 ( dma ( &queue->desc_map, queue->desc.rx ) ); + cpu_to_be64 ( dma ( &queue->desc_map, queue->desc.raw ) ); create->cmplt = - cpu_to_be64 ( dma ( &queue->cmplt_map, queue->cmplt.rx ) ); + cpu_to_be64 ( dma ( &queue->cmplt_map, queue->cmplt.raw ) ); create->qpl_id = cpu_to_be32 ( type->qpl ); + create->desc_count = cpu_to_be16 ( queue->count ); create->bufsz = cpu_to_be16 ( GVE_BUF_SIZE ); + create->cmplt_count = cpu_to_be16 ( queue->count ); } /** diff --git a/src/drivers/net/gve.h b/src/drivers/net/gve.h index 78f085671..333839be6 100644 --- a/src/drivers/net/gve.h +++ b/src/drivers/net/gve.h @@ -278,6 +278,14 @@ struct gve_admin_create_tx { uint32_t qpl_id; /** Notification channel ID */ uint32_t notify_id; + /** Completion ring address */ + uint64_t cmplt; + /** Number of descriptor ring entries */ + uint16_t desc_count; + /** Number of completion ring entries */ + uint16_t cmplt_count; + /** Reserved */ + uint8_t reserved_b[4]; } __attribute__ (( packed )); /** Create receive queue command */ @@ -303,10 +311,14 @@ struct gve_admin_create_rx { uint64_t desc; /** Queue page list ID */ uint32_t qpl_id; - /** Reserved */ - uint8_t reserved_b[2]; + /** Number of descriptor ring entries */ + uint16_t desc_count; /** Packet buffer size */ uint16_t bufsz; + /** Number of completion ring entries */ + uint16_t cmplt_count; + /** Reserved */ + uint8_t reserved[6]; } __attribute__ (( packed )); /** Destroy transmit queue command */