@@ -443,6 +443,7 @@ int gve_adminq_configure_device_resources(struct gve_priv *priv,
443
443
.irq_db_stride = cpu_to_be32 (sizeof (priv -> ntfy_blocks [0 ])),
444
444
.ntfy_blk_msix_base_idx =
445
445
cpu_to_be32 (GVE_NTFY_BLK_BASE_MSIX_IDX ),
446
+ .queue_format = priv -> queue_format ,
446
447
};
447
448
448
449
return gve_adminq_execute_cmd (priv , & cmd );
@@ -462,28 +463,32 @@ static int gve_adminq_create_tx_queue(struct gve_priv *priv, u32 queue_index)
462
463
{
463
464
struct gve_tx_ring * tx = & priv -> tx [queue_index ];
464
465
union gve_adminq_command cmd ;
465
- u32 qpl_id ;
466
- int err ;
467
466
468
- qpl_id = priv -> queue_format == GVE_GQI_RDA_FORMAT ?
469
- GVE_RAW_ADDRESSING_QPL_ID : tx -> tx_fifo .qpl -> id ;
470
467
memset (& cmd , 0 , sizeof (cmd ));
471
468
cmd .opcode = cpu_to_be32 (GVE_ADMINQ_CREATE_TX_QUEUE );
472
469
cmd .create_tx_queue = (struct gve_adminq_create_tx_queue ) {
473
470
.queue_id = cpu_to_be32 (queue_index ),
474
- .reserved = 0 ,
475
471
.queue_resources_addr =
476
472
cpu_to_be64 (tx -> q_resources_bus ),
477
473
.tx_ring_addr = cpu_to_be64 (tx -> bus ),
478
- .queue_page_list_id = cpu_to_be32 (qpl_id ),
479
474
.ntfy_id = cpu_to_be32 (tx -> ntfy_id ),
480
475
};
481
476
482
- err = gve_adminq_issue_cmd ( priv , & cmd );
483
- if ( err )
484
- return err ;
477
+ if ( gve_is_gqi ( priv )) {
478
+ u32 qpl_id = priv -> queue_format == GVE_GQI_RDA_FORMAT ?
479
+ GVE_RAW_ADDRESSING_QPL_ID : tx -> tx_fifo . qpl -> id ;
485
480
486
- return 0 ;
481
+ cmd .create_tx_queue .queue_page_list_id = cpu_to_be32 (qpl_id );
482
+ } else {
483
+ cmd .create_tx_queue .tx_ring_size =
484
+ cpu_to_be16 (priv -> tx_desc_cnt );
485
+ cmd .create_tx_queue .tx_comp_ring_addr =
486
+ cpu_to_be64 (tx -> complq_bus_dqo );
487
+ cmd .create_tx_queue .tx_comp_ring_size =
488
+ cpu_to_be16 (priv -> options_dqo_rda .tx_comp_ring_entries );
489
+ }
490
+
491
+ return gve_adminq_issue_cmd (priv , & cmd );
487
492
}
488
493
489
494
int gve_adminq_create_tx_queues (struct gve_priv * priv , u32 num_queues )
@@ -504,29 +509,41 @@ static int gve_adminq_create_rx_queue(struct gve_priv *priv, u32 queue_index)
504
509
{
505
510
struct gve_rx_ring * rx = & priv -> rx [queue_index ];
506
511
union gve_adminq_command cmd ;
507
- u32 qpl_id ;
508
- int err ;
509
512
510
- qpl_id = priv -> queue_format == GVE_GQI_RDA_FORMAT ?
511
- GVE_RAW_ADDRESSING_QPL_ID : rx -> data .qpl -> id ;
512
513
memset (& cmd , 0 , sizeof (cmd ));
513
514
cmd .opcode = cpu_to_be32 (GVE_ADMINQ_CREATE_RX_QUEUE );
514
515
cmd .create_rx_queue = (struct gve_adminq_create_rx_queue ) {
515
516
.queue_id = cpu_to_be32 (queue_index ),
516
- .index = cpu_to_be32 (queue_index ),
517
- .reserved = 0 ,
518
517
.ntfy_id = cpu_to_be32 (rx -> ntfy_id ),
519
518
.queue_resources_addr = cpu_to_be64 (rx -> q_resources_bus ),
520
- .rx_desc_ring_addr = cpu_to_be64 (rx -> desc .bus ),
521
- .rx_data_ring_addr = cpu_to_be64 (rx -> data .data_bus ),
522
- .queue_page_list_id = cpu_to_be32 (qpl_id ),
523
519
};
524
520
525
- err = gve_adminq_issue_cmd (priv , & cmd );
526
- if (err )
527
- return err ;
521
+ if (gve_is_gqi (priv )) {
522
+ u32 qpl_id = priv -> queue_format == GVE_GQI_RDA_FORMAT ?
523
+ GVE_RAW_ADDRESSING_QPL_ID : rx -> data .qpl -> id ;
524
+
525
+ cmd .create_rx_queue .rx_desc_ring_addr =
526
+ cpu_to_be64 (rx -> desc .bus ),
527
+ cmd .create_rx_queue .rx_data_ring_addr =
528
+ cpu_to_be64 (rx -> data .data_bus ),
529
+ cmd .create_rx_queue .index = cpu_to_be32 (queue_index );
530
+ cmd .create_rx_queue .queue_page_list_id = cpu_to_be32 (qpl_id );
531
+ } else {
532
+ cmd .create_rx_queue .rx_ring_size =
533
+ cpu_to_be16 (priv -> rx_desc_cnt );
534
+ cmd .create_rx_queue .rx_desc_ring_addr =
535
+ cpu_to_be64 (rx -> dqo .complq .bus );
536
+ cmd .create_rx_queue .rx_data_ring_addr =
537
+ cpu_to_be64 (rx -> dqo .bufq .bus );
538
+ cmd .create_rx_queue .packet_buffer_size =
539
+ cpu_to_be16 (priv -> data_buffer_size_dqo );
540
+ cmd .create_rx_queue .rx_buff_ring_size =
541
+ cpu_to_be16 (priv -> options_dqo_rda .rx_buff_ring_entries );
542
+ cmd .create_rx_queue .enable_rsc =
543
+ !!(priv -> dev -> features & NETIF_F_LRO );
544
+ }
528
545
529
- return 0 ;
546
+ return gve_adminq_issue_cmd ( priv , & cmd ) ;
530
547
}
531
548
532
549
int gve_adminq_create_rx_queues (struct gve_priv * priv , u32 num_queues )
0 commit comments