[v7,4/5] common/sfc_efx/base: add RxQ flag to use Rx prefix user flag
Checks
Commit Message
Add an RxQ flag to request support for user flag field of Rx
prefix. The feature is supported only on EF100 and EF10 ESSB.
Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/common/sfc_efx/base/ef10_rx.c | 54 ++++++++++++++++----------
drivers/common/sfc_efx/base/efx.h | 4 ++
drivers/common/sfc_efx/base/rhead_rx.c | 3 ++
3 files changed, 40 insertions(+), 21 deletions(-)
@@ -930,6 +930,10 @@ ef10_rx_qcreate(
rc = ENOTSUP;
goto fail2;
}
+ if (flags & EFX_RXQ_FLAG_USER_FLAG) {
+ rc = ENOTSUP;
+ goto fail3;
+ }
/*
* Ignore EFX_RXQ_FLAG_RSS_HASH since if RSS hash is calculated
* it is always delivered from HW in the pseudo-header.
@@ -940,7 +944,7 @@ ef10_rx_qcreate(
erpl = &ef10_packed_stream_rx_prefix_layout;
if (type_data == NULL) {
rc = EINVAL;
- goto fail3;
+ goto fail4;
}
switch (type_data->ertd_packed_stream.eps_buf_size) {
case EFX_RXQ_PACKED_STREAM_BUF_SIZE_1M:
@@ -960,17 +964,21 @@ ef10_rx_qcreate(
break;
default:
rc = ENOTSUP;
- goto fail4;
+ goto fail5;
}
erp->er_buf_size = type_data->ertd_packed_stream.eps_buf_size;
/* Packed stream pseudo header does not have RSS hash value */
if (flags & EFX_RXQ_FLAG_RSS_HASH) {
rc = ENOTSUP;
- goto fail5;
+ goto fail6;
}
if (flags & EFX_RXQ_FLAG_USER_MARK) {
rc = ENOTSUP;
- goto fail6;
+ goto fail7;
+ }
+ if (flags & EFX_RXQ_FLAG_USER_FLAG) {
+ rc = ENOTSUP;
+ goto fail8;
}
break;
#endif /* EFSYS_OPT_RX_PACKED_STREAM */
@@ -979,7 +987,7 @@ ef10_rx_qcreate(
erpl = &ef10_essb_rx_prefix_layout;
if (type_data == NULL) {
rc = EINVAL;
- goto fail7;
+ goto fail9;
}
params.es_bufs_per_desc =
type_data->ertd_es_super_buffer.eessb_bufs_per_desc;
@@ -997,7 +1005,7 @@ ef10_rx_qcreate(
#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */
default:
rc = ENOTSUP;
- goto fail8;
+ goto fail10;
}
#if EFSYS_OPT_RX_PACKED_STREAM
@@ -1005,13 +1013,13 @@ ef10_rx_qcreate(
/* Check if datapath firmware supports packed stream mode */
if (encp->enc_rx_packed_stream_supported == B_FALSE) {
rc = ENOTSUP;
- goto fail9;
+ goto fail11;
}
/* Check if packed stream allows configurable buffer sizes */
if ((params.ps_buf_size != MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M) &&
(encp->enc_rx_var_packed_stream_supported == B_FALSE)) {
rc = ENOTSUP;
- goto fail10;
+ goto fail12;
}
}
#else /* EFSYS_OPT_RX_PACKED_STREAM */
@@ -1022,17 +1030,17 @@ ef10_rx_qcreate(
if (params.es_bufs_per_desc > 0) {
if (encp->enc_rx_es_super_buffer_supported == B_FALSE) {
rc = ENOTSUP;
- goto fail11;
+ goto fail13;
}
if (!EFX_IS_P2ALIGNED(uint32_t, params.es_max_dma_len,
EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) {
rc = EINVAL;
- goto fail12;
+ goto fail14;
}
if (!EFX_IS_P2ALIGNED(uint32_t, params.es_buf_stride,
EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) {
rc = EINVAL;
- goto fail13;
+ goto fail15;
}
}
#else /* EFSYS_OPT_RX_ES_SUPER_BUFFER */
@@ -1041,7 +1049,7 @@ ef10_rx_qcreate(
if (flags & EFX_RXQ_FLAG_INGRESS_MPORT) {
rc = ENOTSUP;
- goto fail14;
+ goto fail16;
}
/* Scatter can only be disabled if the firmware supports doing so */
@@ -1057,7 +1065,7 @@ ef10_rx_qcreate(
if ((rc = efx_mcdi_init_rxq(enp, ndescs, eep, label, index,
esmp, ¶ms)) != 0)
- goto fail15;
+ goto fail17;
erp->er_eep = eep;
erp->er_label = label;
@@ -1070,40 +1078,44 @@ ef10_rx_qcreate(
return (0);
+fail17:
+ EFSYS_PROBE(fail15);
+fail16:
+ EFSYS_PROBE(fail14);
+#if EFSYS_OPT_RX_ES_SUPER_BUFFER
fail15:
EFSYS_PROBE(fail15);
fail14:
EFSYS_PROBE(fail14);
-#if EFSYS_OPT_RX_ES_SUPER_BUFFER
fail13:
EFSYS_PROBE(fail13);
+#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */
+#if EFSYS_OPT_RX_PACKED_STREAM
fail12:
EFSYS_PROBE(fail12);
fail11:
EFSYS_PROBE(fail11);
-#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */
-#if EFSYS_OPT_RX_PACKED_STREAM
+#endif /* EFSYS_OPT_RX_PACKED_STREAM */
fail10:
EFSYS_PROBE(fail10);
+#if EFSYS_OPT_RX_ES_SUPER_BUFFER
fail9:
EFSYS_PROBE(fail9);
-#endif /* EFSYS_OPT_RX_PACKED_STREAM */
+#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */
+#if EFSYS_OPT_RX_PACKED_STREAM
fail8:
EFSYS_PROBE(fail8);
-#if EFSYS_OPT_RX_ES_SUPER_BUFFER
fail7:
EFSYS_PROBE(fail7);
-#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */
-#if EFSYS_OPT_RX_PACKED_STREAM
fail6:
EFSYS_PROBE(fail6);
fail5:
EFSYS_PROBE(fail5);
fail4:
EFSYS_PROBE(fail4);
+#endif /* EFSYS_OPT_RX_PACKED_STREAM */
fail3:
EFSYS_PROBE(fail3);
-#endif /* EFSYS_OPT_RX_PACKED_STREAM */
fail2:
EFSYS_PROBE(fail2);
fail1:
@@ -3030,6 +3030,10 @@ typedef enum efx_rxq_type_e {
* Request user mark field in the Rx prefix of a queue.
*/
#define EFX_RXQ_FLAG_USER_MARK 0x10
+/*
+ * Request user flag field in the Rx prefix of a queue.
+ */
+#define EFX_RXQ_FLAG_USER_FLAG 0x20
LIBEFX_API
extern __checkReturn efx_rc_t
@@ -635,6 +635,9 @@ rhead_rx_qcreate(
if (flags & EFX_RXQ_FLAG_USER_MARK)
fields_mask |= 1U << EFX_RX_PREFIX_FIELD_USER_MARK;
+ if (flags & EFX_RXQ_FLAG_USER_FLAG)
+ fields_mask |= 1U << EFX_RX_PREFIX_FIELD_USER_FLAG;
+
/*
* LENGTH is required in EF100 host interface, as receive events
* do not include the packet length.