net/sfc/base: add function to create packed stream RxQ
[dpdk.git] / drivers / net / sfc / base / ef10_rx.c
index 661caa8..17b1652 100644 (file)
@@ -38,7 +38,7 @@
 static __checkReturn   efx_rc_t
 efx_mcdi_init_rxq(
        __in            efx_nic_t *enp,
-       __in            uint32_t size,
+       __in            uint32_t ndescs,
        __in            uint32_t target_evq,
        __in            uint32_t label,
        __in            uint32_t instance,
@@ -46,25 +46,44 @@ efx_mcdi_init_rxq(
        __in            boolean_t disable_scatter,
        __in            uint32_t ps_bufsize)
 {
+       efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
        efx_mcdi_req_t req;
        uint8_t payload[MAX(MC_CMD_INIT_RXQ_EXT_IN_LEN,
                            MC_CMD_INIT_RXQ_EXT_OUT_LEN)];
-       int npages = EFX_RXQ_NBUFS(size);
+       int npages = EFX_RXQ_NBUFS(ndescs);
        int i;
        efx_qword_t *dma_addr;
        uint64_t addr;
        efx_rc_t rc;
        uint32_t dma_mode;
+       boolean_t want_outer_classes;
 
-       /* If this changes, then the payload size might need to change. */
-       EFSYS_ASSERT3U(MC_CMD_INIT_RXQ_OUT_LEN, ==, 0);
-       EFSYS_ASSERT3U(size, <=, EFX_RXQ_MAXNDESCS);
+       EFSYS_ASSERT3U(ndescs, <=, EFX_RXQ_MAXNDESCS);
 
        if (ps_bufsize > 0)
                dma_mode = MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM;
        else
                dma_mode = MC_CMD_INIT_RXQ_EXT_IN_SINGLE_PACKET;
 
+       if (encp->enc_tunnel_encapsulations_supported != 0) {
+               /*
+                * WANT_OUTER_CLASSES can only be specified on hardware which
+                * supports tunnel encapsulation offloads, even though it is
+                * effectively the behaviour the hardware gives.
+                *
+                * Also, on hardware which does support such offloads, older
+                * firmware rejects the flag if the offloads are not supported
+                * by the current firmware variant, which means this may fail if
+                * the capabilities are not updated when the firmware variant
+                * changes. This is not an issue on newer firmware, as it was
+                * changed in bug 69842 (v6.4.2.1007) to permit this flag to be
+                * specified on all firmware variants.
+                */
+               want_outer_classes = B_TRUE;
+       } else {
+               want_outer_classes = B_FALSE;
+       }
+
        (void) memset(payload, 0, sizeof (payload));
        req.emr_cmd = MC_CMD_INIT_RXQ;
        req.emr_in_buf = payload;
@@ -72,11 +91,11 @@ efx_mcdi_init_rxq(
        req.emr_out_buf = payload;
        req.emr_out_length = MC_CMD_INIT_RXQ_EXT_OUT_LEN;
 
-       MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_SIZE, size);
+       MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_SIZE, ndescs);
        MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_TARGET_EVQ, target_evq);
        MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_LABEL, label);
        MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_INSTANCE, instance);
-       MCDI_IN_POPULATE_DWORD_8(req, INIT_RXQ_EXT_IN_FLAGS,
+       MCDI_IN_POPULATE_DWORD_9(req, INIT_RXQ_EXT_IN_FLAGS,
            INIT_RXQ_EXT_IN_FLAG_BUFF_MODE, 0,
            INIT_RXQ_EXT_IN_FLAG_HDR_SPLIT, 0,
            INIT_RXQ_EXT_IN_FLAG_TIMESTAMP, 0,
@@ -85,7 +104,8 @@ efx_mcdi_init_rxq(
            INIT_RXQ_EXT_IN_FLAG_DISABLE_SCATTER, disable_scatter,
            INIT_RXQ_EXT_IN_DMA_MODE,
            dma_mode,
-           INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE, ps_bufsize);
+           INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE, ps_bufsize,
+           INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES, want_outer_classes);
        MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_OWNER_ID, 0);
        MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_PORT_ID, EVB_PORT_ID_ASSIGNED);
 
@@ -159,7 +179,7 @@ fail1:
 static __checkReturn   efx_rc_t
 efx_mcdi_rss_context_alloc(
        __in            efx_nic_t *enp,
-       __in            efx_rx_scale_support_t scale_support,
+       __in            efx_rx_scale_context_type_t type,
        __in            uint32_t num_queues,
        __out           uint32_t *rss_contextp)
 {
@@ -175,7 +195,7 @@ efx_mcdi_rss_context_alloc(
                goto fail1;
        }
 
-       switch (scale_support) {
+       switch (type) {
        case EFX_RX_SCALE_EXCLUSIVE:
                context_type = MC_CMD_RSS_CONTEXT_ALLOC_IN_TYPE_EXCLUSIVE;
                break;
@@ -197,7 +217,13 @@ efx_mcdi_rss_context_alloc(
        MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_UPSTREAM_PORT_ID,
            EVB_PORT_ID_ASSIGNED);
        MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_TYPE, context_type);
-       /* NUM_QUEUES is only used to validate indirection table offsets */
+
+       /*
+        * For exclusive contexts, NUM_QUEUES is only used to validate
+        * indirection table offsets.
+        * For shared contexts, the provided context will spread traffic over
+        * NUM_QUEUES many queues.
+        */
        MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_NUM_QUEUES, num_queues);
 
        efx_mcdi_execute(enp, &req);
@@ -461,7 +487,7 @@ ef10_rx_init(
                 * Allocated an exclusive RSS context, which allows both the
                 * indirection table and key to be modified.
                 */
-               enp->en_rss_support = EFX_RX_SCALE_EXCLUSIVE;
+               enp->en_rss_context_type = EFX_RX_SCALE_EXCLUSIVE;
                enp->en_hash_support = EFX_RX_HASH_AVAILABLE;
        } else {
                /*
@@ -469,7 +495,7 @@ ef10_rx_init(
                 * operation without support for RSS. The pseudo-header in
                 * received packets will not contain a Toeplitz hash value.
                 */
-               enp->en_rss_support = EFX_RX_SCALE_UNAVAILABLE;
+               enp->en_rss_context_type = EFX_RX_SCALE_UNAVAILABLE;
                enp->en_hash_support = EFX_RX_HASH_UNAVAILABLE;
        }
 
@@ -489,10 +515,53 @@ ef10_rx_scatter_enable(
 }
 #endif /* EFSYS_OPT_RX_SCATTER */
 
+#if EFSYS_OPT_RX_SCALE
+       __checkReturn   efx_rc_t
+ef10_rx_scale_context_alloc(
+       __in            efx_nic_t *enp,
+       __in            efx_rx_scale_context_type_t type,
+       __in            uint32_t num_queues,
+       __out           uint32_t *rss_contextp)
+{
+       efx_rc_t rc;
+
+       rc = efx_mcdi_rss_context_alloc(enp, type, num_queues, rss_contextp);
+       if (rc != 0)
+               goto fail1;
+
+       return (0);
+
+fail1:
+       EFSYS_PROBE1(fail1, efx_rc_t, rc);
+       return (rc);
+}
+#endif /* EFSYS_OPT_RX_SCALE */
+
+#if EFSYS_OPT_RX_SCALE
+       __checkReturn   efx_rc_t
+ef10_rx_scale_context_free(
+       __in            efx_nic_t *enp,
+       __in            uint32_t rss_context)
+{
+       efx_rc_t rc;
+
+       rc = efx_mcdi_rss_context_free(enp, rss_context);
+       if (rc != 0)
+               goto fail1;
+
+       return (0);
+
+fail1:
+       EFSYS_PROBE1(fail1, efx_rc_t, rc);
+       return (rc);
+}
+#endif /* EFSYS_OPT_RX_SCALE */
+
 #if EFSYS_OPT_RX_SCALE
        __checkReturn   efx_rc_t
 ef10_rx_scale_mode_set(
        __in            efx_nic_t *enp,
+       __in            uint32_t rss_context,
        __in            efx_rx_hash_alg_t alg,
        __in            efx_rx_hash_type_t type,
        __in            boolean_t insert)
@@ -507,13 +576,16 @@ ef10_rx_scale_mode_set(
                goto fail1;
        }
 
-       if (enp->en_rss_support == EFX_RX_SCALE_UNAVAILABLE) {
-               rc = ENOTSUP;
-               goto fail2;
+       if (rss_context == EFX_RSS_CONTEXT_DEFAULT) {
+               if (enp->en_rss_context_type == EFX_RX_SCALE_UNAVAILABLE) {
+                       rc = ENOTSUP;
+                       goto fail2;
+               }
+               rss_context = enp->en_rss_context;
        }
 
        if ((rc = efx_mcdi_rss_context_set_flags(enp,
-                   enp->en_rss_context, type)) != 0)
+                   rss_context, type)) != 0)
                goto fail3;
 
        return (0);
@@ -533,18 +605,24 @@ fail1:
        __checkReturn   efx_rc_t
 ef10_rx_scale_key_set(
        __in            efx_nic_t *enp,
+       __in            uint32_t rss_context,
        __in_ecount(n)  uint8_t *key,
        __in            size_t n)
 {
        efx_rc_t rc;
 
-       if (enp->en_rss_support == EFX_RX_SCALE_UNAVAILABLE) {
-               rc = ENOTSUP;
-               goto fail1;
+       EFX_STATIC_ASSERT(EFX_RSS_KEY_SIZE ==
+           MC_CMD_RSS_CONTEXT_SET_KEY_IN_TOEPLITZ_KEY_LEN);
+
+       if (rss_context == EFX_RSS_CONTEXT_DEFAULT) {
+               if (enp->en_rss_context_type == EFX_RX_SCALE_UNAVAILABLE) {
+                       rc = ENOTSUP;
+                       goto fail1;
+               }
+               rss_context = enp->en_rss_context;
        }
 
-       if ((rc = efx_mcdi_rss_context_set_key(enp,
-           enp->en_rss_context, key, n)) != 0)
+       if ((rc = efx_mcdi_rss_context_set_key(enp, rss_context, key, n)) != 0)
                goto fail2;
 
        return (0);
@@ -562,18 +640,23 @@ fail1:
        __checkReturn   efx_rc_t
 ef10_rx_scale_tbl_set(
        __in            efx_nic_t *enp,
+       __in            uint32_t rss_context,
        __in_ecount(n)  unsigned int *table,
        __in            size_t n)
 {
        efx_rc_t rc;
 
-       if (enp->en_rss_support == EFX_RX_SCALE_UNAVAILABLE) {
-               rc = ENOTSUP;
-               goto fail1;
+
+       if (rss_context == EFX_RSS_CONTEXT_DEFAULT) {
+               if (enp->en_rss_context_type == EFX_RX_SCALE_UNAVAILABLE) {
+                       rc = ENOTSUP;
+                       goto fail1;
+               }
+               rss_context = enp->en_rss_context;
        }
 
        if ((rc = efx_mcdi_rss_context_set_table(enp,
-           enp->en_rss_context, table, n)) != 0)
+                   rss_context, table, n)) != 0)
                goto fail2;
 
        return (0);
@@ -650,26 +733,45 @@ ef10_rx_prefix_hash(
 }
 #endif /* EFSYS_OPT_RX_SCALE */
 
-                       void
+#if EFSYS_OPT_RX_PACKED_STREAM
+/*
+ * Fake length for RXQ descriptors in packed stream mode
+ * to make hardware happy
+ */
+#define        EFX_RXQ_PACKED_STREAM_FAKE_BUF_SIZE 32
+#endif
+
+                               void
 ef10_rx_qpost(
-       __in            efx_rxq_t *erp,
-       __in_ecount(n)  efsys_dma_addr_t *addrp,
-       __in            size_t size,
-       __in            unsigned int n,
-       __in            unsigned int completed,
-       __in            unsigned int added)
+       __in                    efx_rxq_t *erp,
+       __in_ecount(ndescs)     efsys_dma_addr_t *addrp,
+       __in                    size_t size,
+       __in                    unsigned int ndescs,
+       __in                    unsigned int completed,
+       __in                    unsigned int added)
 {
        efx_qword_t qword;
        unsigned int i;
        unsigned int offset;
        unsigned int id;
 
+       _NOTE(ARGUNUSED(completed))
+
+#if EFSYS_OPT_RX_PACKED_STREAM
+       /*
+        * Real size of the buffer does not fit into ESF_DZ_RX_KER_BYTE_CNT
+        * and equal to 0 after applying mask. Hardware does not like it.
+        */
+       if (erp->er_ev_qstate->eers_rx_packed_stream)
+               size = EFX_RXQ_PACKED_STREAM_FAKE_BUF_SIZE;
+#endif
+
        /* The client driver must not overfill the queue */
-       EFSYS_ASSERT3U(added - completed + n, <=,
+       EFSYS_ASSERT3U(added - completed + ndescs, <=,
            EFX_RXQ_LIMIT(erp->er_mask + 1));
 
        id = added & (erp->er_mask);
-       for (i = 0; i < n; i++) {
+       for (i = 0; i < ndescs; i++) {
                EFSYS_PROBE4(rx_post, unsigned int, erp->er_index,
                    unsigned int, id, efsys_dma_addr_t, addrp[i],
                    size_t, size);
@@ -722,31 +824,47 @@ ef10_rx_qpush(
 #if EFSYS_OPT_RX_PACKED_STREAM
 
                        void
-ef10_rx_qps_update_credits(
-       __in    efx_rxq_t *erp)
+ef10_rx_qpush_ps_credits(
+       __in            efx_rxq_t *erp)
 {
        efx_nic_t *enp = erp->er_enp;
        efx_dword_t dword;
-       efx_evq_rxq_state_t *rxq_state =
-               &erp->er_eep->ee_rxq_state[erp->er_label];
+       efx_evq_rxq_state_t *rxq_state = erp->er_ev_qstate;
+       uint32_t credits;
 
        EFSYS_ASSERT(rxq_state->eers_rx_packed_stream);
 
        if (rxq_state->eers_rx_packed_stream_credits == 0)
                return;
 
+       /*
+        * It is a bug if we think that FW has utilized more
+        * credits than it is allowed to have (maximum). However,
+        * make sure that we do not credit more than maximum anyway.
+        */
+       credits = MIN(rxq_state->eers_rx_packed_stream_credits,
+           EFX_RX_PACKED_STREAM_MAX_CREDITS);
        EFX_POPULATE_DWORD_3(dword,
            ERF_DZ_RX_DESC_MAGIC_DOORBELL, 1,
            ERF_DZ_RX_DESC_MAGIC_CMD,
            ERE_DZ_RX_DESC_MAGIC_CMD_PS_CREDITS,
-           ERF_DZ_RX_DESC_MAGIC_DATA,
-           rxq_state->eers_rx_packed_stream_credits);
+           ERF_DZ_RX_DESC_MAGIC_DATA, credits);
        EFX_BAR_TBL_WRITED(enp, ER_DZ_RX_DESC_UPD_REG,
            erp->er_index, &dword, B_FALSE);
 
        rxq_state->eers_rx_packed_stream_credits = 0;
 }
 
+/*
+ * In accordance with SF-112241-TC the received data has the following layout:
+ *  - 8 byte pseudo-header which consist of:
+ *    - 4 byte little-endian timestamp
+ *    - 2 byte little-endian captured length in bytes
+ *    - 2 byte little-endian original packet length in bytes
+ *  - captured packet bytes
+ *  - optional padding to align to 64 bytes boundary
+ *  - 64 bytes scratch space for the host software
+ */
        __checkReturn   uint8_t *
 ef10_rx_qps_packet_info(
        __in            efx_rxq_t *erp,
@@ -760,8 +878,7 @@ ef10_rx_qps_packet_info(
        uint16_t buf_len;
        uint8_t *pkt_start;
        efx_qword_t *qwordp;
-       efx_evq_rxq_state_t *rxq_state =
-               &erp->er_eep->ee_rxq_state[erp->er_label];
+       efx_evq_rxq_state_t *rxq_state = erp->er_ev_qstate;
 
        EFSYS_ASSERT(rxq_state->eers_rx_packed_stream);
 
@@ -782,11 +899,8 @@ ef10_rx_qps_packet_info(
        EFSYS_ASSERT3U(current_offset + *lengthp, <, *next_offsetp);
 
        if ((*next_offsetp ^ current_offset) &
-           EFX_RX_PACKED_STREAM_MEM_PER_CREDIT) {
-               if (rxq_state->eers_rx_packed_stream_credits <
-                   EFX_RX_PACKED_STREAM_MAX_CREDITS)
-                       rxq_state->eers_rx_packed_stream_credits++;
-       }
+           EFX_RX_PACKED_STREAM_MEM_PER_CREDIT)
+               rxq_state->eers_rx_packed_stream_credits++;
 
        return (pkt_start);
 }
@@ -834,9 +948,11 @@ ef10_rx_qcreate(
        __in            unsigned int index,
        __in            unsigned int label,
        __in            efx_rxq_type_t type,
+       __in            uint32_t type_data,
        __in            efsys_mem_t *esmp,
-       __in            size_t n,
+       __in            size_t ndescs,
        __in            uint32_t id,
+       __in            unsigned int flags,
        __in            efx_evq_t *eep,
        __in            efx_rxq_t *erp)
 {
@@ -854,7 +970,8 @@ ef10_rx_qcreate(
        EFX_STATIC_ASSERT(ISP2(EFX_RXQ_MAXNDESCS));
        EFX_STATIC_ASSERT(ISP2(EFX_RXQ_MINNDESCS));
 
-       if (!ISP2(n) || (n < EFX_RXQ_MINNDESCS) || (n > EFX_RXQ_MAXNDESCS)) {
+       if (!ISP2(ndescs) ||
+           (ndescs < EFX_RXQ_MINNDESCS) || (ndescs > EFX_RXQ_MAXNDESCS)) {
                rc = EINVAL;
                goto fail1;
        }
@@ -865,29 +982,35 @@ ef10_rx_qcreate(
 
        switch (type) {
        case EFX_RXQ_TYPE_DEFAULT:
-       case EFX_RXQ_TYPE_SCATTER:
                ps_buf_size = 0;
                break;
 #if EFSYS_OPT_RX_PACKED_STREAM
-       case EFX_RXQ_TYPE_PACKED_STREAM_1M:
-               ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M;
-               break;
-       case EFX_RXQ_TYPE_PACKED_STREAM_512K:
-               ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_512K;
-               break;
-       case EFX_RXQ_TYPE_PACKED_STREAM_256K:
-               ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_256K;
-               break;
-       case EFX_RXQ_TYPE_PACKED_STREAM_128K:
-               ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_128K;
-               break;
-       case EFX_RXQ_TYPE_PACKED_STREAM_64K:
-               ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_64K;
+       case EFX_RXQ_TYPE_PACKED_STREAM:
+               switch (type_data) {
+               case EFX_RXQ_PACKED_STREAM_BUF_SIZE_1M:
+                       ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M;
+                       break;
+               case EFX_RXQ_PACKED_STREAM_BUF_SIZE_512K:
+                       ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_512K;
+                       break;
+               case EFX_RXQ_PACKED_STREAM_BUF_SIZE_256K:
+                       ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_256K;
+                       break;
+               case EFX_RXQ_PACKED_STREAM_BUF_SIZE_128K:
+                       ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_128K;
+                       break;
+               case EFX_RXQ_PACKED_STREAM_BUF_SIZE_64K:
+                       ps_buf_size = MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_64K;
+                       break;
+               default:
+                       rc = ENOTSUP;
+                       goto fail3;
+               }
                break;
 #endif /* EFSYS_OPT_RX_PACKED_STREAM */
        default:
                rc = ENOTSUP;
-               goto fail3;
+               goto fail4;
        }
 
 #if EFSYS_OPT_RX_PACKED_STREAM
@@ -895,13 +1018,13 @@ ef10_rx_qcreate(
                /* Check if datapath firmware supports packed stream mode */
                if (encp->enc_rx_packed_stream_supported == B_FALSE) {
                        rc = ENOTSUP;
-                       goto fail4;
+                       goto fail5;
                }
                /* Check if packed stream allows configurable buffer sizes */
-               if ((type != EFX_RXQ_TYPE_PACKED_STREAM_1M) &&
+               if ((ps_buf_size != MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M) &&
                    (encp->enc_rx_var_packed_stream_supported == B_FALSE)) {
                        rc = ENOTSUP;
-                       goto fail5;
+                       goto fail6;
                }
        }
 #else /* EFSYS_OPT_RX_PACKED_STREAM */
@@ -909,32 +1032,38 @@ ef10_rx_qcreate(
 #endif /* EFSYS_OPT_RX_PACKED_STREAM */
 
        /* Scatter can only be disabled if the firmware supports doing so */
-       if (type == EFX_RXQ_TYPE_SCATTER)
+       if (flags & EFX_RXQ_FLAG_SCATTER)
                disable_scatter = B_FALSE;
        else
                disable_scatter = encp->enc_rx_disable_scatter_supported;
 
-       if ((rc = efx_mcdi_init_rxq(enp, n, eep->ee_index, label, index,
+       if ((rc = efx_mcdi_init_rxq(enp, ndescs, eep->ee_index, label, index,
                    esmp, disable_scatter, ps_buf_size)) != 0)
-               goto fail6;
+               goto fail7;
 
        erp->er_eep = eep;
        erp->er_label = label;
 
-       ef10_ev_rxlabel_init(eep, erp, label, ps_buf_size != 0);
+       ef10_ev_rxlabel_init(eep, erp, label, type);
+
+       erp->er_ev_qstate = &erp->er_eep->ee_rxq_state[label];
 
        return (0);
 
+fail7:
+       EFSYS_PROBE(fail7);
+#if EFSYS_OPT_RX_PACKED_STREAM
 fail6:
        EFSYS_PROBE(fail6);
-#if EFSYS_OPT_RX_PACKED_STREAM
 fail5:
        EFSYS_PROBE(fail5);
+#endif /* EFSYS_OPT_RX_PACKED_STREAM */
 fail4:
        EFSYS_PROBE(fail4);
-#endif /* EFSYS_OPT_RX_PACKED_STREAM */
+#if EFSYS_OPT_RX_PACKED_STREAM
 fail3:
        EFSYS_PROBE(fail3);
+#endif /* EFSYS_OPT_RX_PACKED_STREAM */
 fail2:
        EFSYS_PROBE(fail2);
 fail1:
@@ -964,11 +1093,10 @@ ef10_rx_fini(
        __in    efx_nic_t *enp)
 {
 #if EFSYS_OPT_RX_SCALE
-       if (enp->en_rss_support != EFX_RX_SCALE_UNAVAILABLE) {
+       if (enp->en_rss_context_type != EFX_RX_SCALE_UNAVAILABLE)
                (void) efx_mcdi_rss_context_free(enp, enp->en_rss_context);
-       }
        enp->en_rss_context = 0;
-       enp->en_rss_support = EFX_RX_SCALE_UNAVAILABLE;
+       enp->en_rss_context_type = EFX_RX_SCALE_UNAVAILABLE;
 #else
        _NOTE(ARGUNUSED(enp))
 #endif /* EFSYS_OPT_RX_SCALE */