DBGC ( gve, "GVE %p supports options %#08x\n", gve, gve->options );
/* Select preferred operating mode */
- gve->mode = GVE_MODE_QPL;
+ if ( gve->options & ( 1 << GVE_OPT_GQI_QPL ) ) {
+ /* GQI-QPL: in-order queues, queue page list addressing */
+ gve->mode = GVE_MODE_QPL;
+ } else if ( gve->options & ( 1 << GVE_OPT_GQI_RDA ) ) {
+ /* GQI-RDA: in-order queues, raw DMA addressing */
+ gve->mode = 0;
+ } else if ( gve->options & ( 1 << GVE_OPT_DQO_QPL ) ) {
+ /* DQO-QPL: out-of-order queues, queue page list addressing */
+ gve->mode = ( GVE_MODE_DQO | GVE_MODE_QPL );
+ } else if ( gve->options & ( 1 << GVE_OPT_DQO_RDA ) ) {
+ /* DQO-RDA: out-of-order queues, raw DMA addressing */
+ gve->mode = GVE_MODE_DQO;
+ } else {
+ /* No options matched: assume the original GQI-QPL mode */
+ gve->mode = GVE_MODE_QPL;
+ }
DBGC ( gve, "GVE %p using %s mode\n",
gve, gve_mode_name ( gve->mode ) );