Signed-off-by: Andrew Rybchenko <arybche...@solarflare.com> --- drivers/net/sfc/sfc_dp_rx.h | 2 ++ drivers/net/sfc/sfc_rx.c | 8 ++++++++ 2 files changed, 10 insertions(+)
diff --git a/drivers/net/sfc/sfc_dp_rx.h b/drivers/net/sfc/sfc_dp_rx.h index 5a714a1..66d655f 100644 --- a/drivers/net/sfc/sfc_dp_rx.h +++ b/drivers/net/sfc/sfc_dp_rx.h @@ -150,6 +150,8 @@ typedef void (sfc_dp_rx_qstop_t)(struct sfc_dp_rxq *dp_rxq, struct sfc_dp_rx { struct sfc_dp dp; + unsigned int features; +#define SFC_DP_RX_FEAT_SCATTER 0x1 sfc_dp_rx_qcreate_t *qcreate; sfc_dp_rx_qdestroy_t *qdestroy; sfc_dp_rx_qstart_t *qstart; diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index e56837d..0095afd 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -478,6 +478,7 @@ struct sfc_dp_rx sfc_efx_rx = { .type = SFC_DP_RX, .hw_fw_caps = 0, }, + .features = SFC_DP_RX_FEAT_SCATTER, .qcreate = sfc_efx_rx_qcreate, .qdestroy = sfc_efx_rx_qdestroy, .qstart = sfc_efx_rx_qstart, @@ -1149,6 +1150,13 @@ struct sfc_dp_rx sfc_efx_rx = { rxmode->hw_strip_crc = 1; } + if (rxmode->enable_scatter && + (~sa->dp_rx->features & SFC_DP_RX_FEAT_SCATTER)) { + sfc_err(sa, "Rx scatter not supported by %s datapath", + sa->dp_rx->dp.name); + rc = EINVAL; + } + if (rxmode->enable_lro) { sfc_err(sa, "LRO not supported"); rc = EINVAL; -- 1.8.2.3