git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
doc: use SPDX tag for bnx2x guide
[dpdk.git]
/
drivers
/
net
/
sfc
/
base
/
ef10_rx.c
diff --git
a/drivers/net/sfc/base/ef10_rx.c
b/drivers/net/sfc/base/ef10_rx.c
index
1f2a6e0
..
5f5dd3c
100644
(file)
--- a/
drivers/net/sfc/base/ef10_rx.c
+++ b/
drivers/net/sfc/base/ef10_rx.c
@@
-8,19
+8,20
@@
#include "efx_impl.h"
#include "efx_impl.h"
-#if EF
SYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2
+#if EF
X_OPTS_EF10()
static __checkReturn efx_rc_t
efx_mcdi_init_rxq(
__in efx_nic_t *enp,
__in uint32_t ndescs,
static __checkReturn efx_rc_t
efx_mcdi_init_rxq(
__in efx_nic_t *enp,
__in uint32_t ndescs,
- __in
uint32_t target_evq
,
+ __in
efx_evq_t *eep
,
__in uint32_t label,
__in uint32_t instance,
__in efsys_mem_t *esmp,
__in boolean_t disable_scatter,
__in boolean_t want_inner_classes,
__in uint32_t label,
__in uint32_t instance,
__in efsys_mem_t *esmp,
__in boolean_t disable_scatter,
__in boolean_t want_inner_classes,
+ __in uint32_t buf_size,
__in uint32_t ps_bufsize,
__in uint32_t es_bufs_per_desc,
__in uint32_t es_max_dma_len,
__in uint32_t ps_bufsize,
__in uint32_t es_bufs_per_desc,
__in uint32_t es_max_dma_len,
@@
-29,23
+30,32
@@
efx_mcdi_init_rxq(
{
efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
efx_mcdi_req_t req;
{
efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
efx_mcdi_req_t req;
- EFX_MCDI_DECLARE_BUF(payload, MC_CMD_INIT_RXQ_V
3
_IN_LEN,
- MC_CMD_INIT_RXQ_V
3
_OUT_LEN);
- int npages =
EFX_RXQ_NBUFS(
ndescs);
+ EFX_MCDI_DECLARE_BUF(payload, MC_CMD_INIT_RXQ_V
4
_IN_LEN,
+ MC_CMD_INIT_RXQ_V
4
_OUT_LEN);
+ int npages =
efx_rxq_nbufs(enp,
ndescs);
int i;
efx_qword_t *dma_addr;
uint64_t addr;
efx_rc_t rc;
uint32_t dma_mode;
boolean_t want_outer_classes;
int i;
efx_qword_t *dma_addr;
uint64_t addr;
efx_rc_t rc;
uint32_t dma_mode;
boolean_t want_outer_classes;
+ boolean_t no_cont_ev;
EFSYS_ASSERT3U(ndescs, <=, encp->enc_rxq_max_ndescs);
EFSYS_ASSERT3U(ndescs, <=, encp->enc_rxq_max_ndescs);
- if ((esmp == NULL) || (EFSYS_MEM_SIZE(esmp) < EFX_RXQ_SIZE(ndescs))) {
+ if ((esmp == NULL) ||
+ (EFSYS_MEM_SIZE(esmp) < efx_rxq_size(enp, ndescs))) {
rc = EINVAL;
goto fail1;
}
rc = EINVAL;
goto fail1;
}
+ no_cont_ev = (eep->ee_flags & EFX_EVQ_FLAGS_NO_CONT_EV);
+ if ((no_cont_ev == B_TRUE) && (disable_scatter == B_FALSE)) {
+ /* TODO: Support scatter in NO_CONT_EV mode */
+ rc = EINVAL;
+ goto fail2;
+ }
+
if (ps_bufsize > 0)
dma_mode = MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM;
else if (es_bufs_per_desc > 0)
if (ps_bufsize > 0)
dma_mode = MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM;
else if (es_bufs_per_desc > 0)
@@
-75,15
+85,15
@@
efx_mcdi_init_rxq(
req.emr_cmd = MC_CMD_INIT_RXQ;
req.emr_in_buf = payload;
req.emr_cmd = MC_CMD_INIT_RXQ;
req.emr_in_buf = payload;
- req.emr_in_length = MC_CMD_INIT_RXQ_V
3
_IN_LEN;
+ req.emr_in_length = MC_CMD_INIT_RXQ_V
4
_IN_LEN;
req.emr_out_buf = payload;
req.emr_out_buf = payload;
- req.emr_out_length = MC_CMD_INIT_RXQ_V
3
_OUT_LEN;
+ req.emr_out_length = MC_CMD_INIT_RXQ_V
4
_OUT_LEN;
MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_SIZE, ndescs);
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_TARGET_EVQ,
eep->ee_index
);
MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_LABEL, label);
MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_INSTANCE, instance);
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_
9
(req, INIT_RXQ_EXT_IN_FLAGS,
+ MCDI_IN_POPULATE_DWORD_
10
(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,
INIT_RXQ_EXT_IN_FLAG_BUFF_MODE, 0,
INIT_RXQ_EXT_IN_FLAG_HDR_SPLIT, 0,
INIT_RXQ_EXT_IN_FLAG_TIMESTAMP, 0,
@@
-93,9
+103,10
@@
efx_mcdi_init_rxq(
INIT_RXQ_EXT_IN_DMA_MODE,
dma_mode,
INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE, ps_bufsize,
INIT_RXQ_EXT_IN_DMA_MODE,
dma_mode,
INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE, ps_bufsize,
- INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES, want_outer_classes);
+ INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES, want_outer_classes,
+ INIT_RXQ_EXT_IN_FLAG_NO_CONT_EV, no_cont_ev);
MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_OWNER_ID, 0);
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
);
+ MCDI_IN_SET_DWORD(req, INIT_RXQ_EXT_IN_PORT_ID,
enp->en_vport_id
);
if (es_bufs_per_desc > 0) {
MCDI_IN_SET_DWORD(req,
if (es_bufs_per_desc > 0) {
MCDI_IN_SET_DWORD(req,
@@
-110,6
+121,10
@@
efx_mcdi_init_rxq(
hol_block_timeout);
}
hol_block_timeout);
}
+ if (encp->enc_init_rxq_with_buffer_size)
+ MCDI_IN_SET_DWORD(req, INIT_RXQ_V4_IN_BUFFER_SIZE_BYTES,
+ buf_size);
+
dma_addr = MCDI_IN2(req, efx_qword_t, INIT_RXQ_IN_DMA_ADDR);
addr = EFSYS_MEM_ADDR(esmp);
dma_addr = MCDI_IN2(req, efx_qword_t, INIT_RXQ_IN_DMA_ADDR);
addr = EFSYS_MEM_ADDR(esmp);
@@
-126,11
+141,13
@@
efx_mcdi_init_rxq(
if (req.emr_rc != 0) {
rc = req.emr_rc;
if (req.emr_rc != 0) {
rc = req.emr_rc;
- goto fail
2
;
+ goto fail
3
;
}
return (0);
}
return (0);
+fail3:
+ EFSYS_PROBE(fail3);
fail2:
EFSYS_PROBE(fail2);
fail1:
fail2:
EFSYS_PROBE(fail2);
fail1:
@@
-216,7
+233,7
@@
efx_mcdi_rss_context_alloc(
req.emr_out_length = MC_CMD_RSS_CONTEXT_ALLOC_OUT_LEN;
MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_UPSTREAM_PORT_ID,
req.emr_out_length = MC_CMD_RSS_CONTEXT_ALLOC_OUT_LEN;
MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_UPSTREAM_PORT_ID,
-
EVB_PORT_ID_ASSIGNED
);
+
enp->en_vport_id
);
MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_TYPE, context_type);
/*
MCDI_IN_SET_DWORD(req, RSS_CONTEXT_ALLOC_IN_TYPE, context_type);
/*
@@
-842,7
+859,7
@@
ef10_rx_qpush(
efx_dword_t dword;
/* Hardware has alignment restriction for WPTR */
efx_dword_t dword;
/* Hardware has alignment restriction for WPTR */
- wptr =
P2ALIGN(
added, EF10_RX_WPTR_ALIGN);
+ wptr =
EFX_P2ALIGN(unsigned int,
added, EF10_RX_WPTR_ALIGN);
if (pushed == wptr)
return;
if (pushed == wptr)
return;
@@
-930,8
+947,9
@@
ef10_rx_qps_packet_info(
*lengthp = EFX_QWORD_FIELD(*qwordp, ES_DZ_PS_RX_PREFIX_ORIG_LEN);
buf_len = EFX_QWORD_FIELD(*qwordp, ES_DZ_PS_RX_PREFIX_CAP_LEN);
*lengthp = EFX_QWORD_FIELD(*qwordp, ES_DZ_PS_RX_PREFIX_ORIG_LEN);
buf_len = EFX_QWORD_FIELD(*qwordp, ES_DZ_PS_RX_PREFIX_CAP_LEN);
- buf_len = P2ROUNDUP(buf_len + EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE,
- EFX_RX_PACKED_STREAM_ALIGNMENT);
+ buf_len = EFX_P2ROUNDUP(uint16_t,
+ buf_len + EFX_RX_PACKED_STREAM_RX_PREFIX_SIZE,
+ EFX_RX_PACKED_STREAM_ALIGNMENT);
*next_offsetp =
current_offset + buf_len + EFX_RX_PACKED_STREAM_ALIGNMENT;
*next_offsetp =
current_offset + buf_len + EFX_RX_PACKED_STREAM_ALIGNMENT;
@@
-1006,28
+1024,24
@@
ef10_rx_qcreate(
uint32_t es_buf_stride = 0;
uint32_t hol_block_timeout = 0;
uint32_t es_buf_stride = 0;
uint32_t hol_block_timeout = 0;
- _NOTE(ARGUNUSED(id, erp
, type_data
))
+ _NOTE(ARGUNUSED(id, erp))
EFX_STATIC_ASSERT(EFX_EV_RX_NLABELS == (1 << ESF_DZ_RX_QLABEL_WIDTH));
EFSYS_ASSERT3U(label, <, EFX_EV_RX_NLABELS);
EFSYS_ASSERT3U(enp->en_rx_qcount + 1, <, encp->enc_rxq_limit);
EFX_STATIC_ASSERT(EFX_EV_RX_NLABELS == (1 << ESF_DZ_RX_QLABEL_WIDTH));
EFSYS_ASSERT3U(label, <, EFX_EV_RX_NLABELS);
EFSYS_ASSERT3U(enp->en_rx_qcount + 1, <, encp->enc_rxq_limit);
- EFSYS_ASSERT(ISP2(encp->enc_rxq_max_ndescs));
- EFSYS_ASSERT(ISP2(encp->enc_rxq_min_ndescs));
-
- if (!ISP2(ndescs) ||
- (ndescs < encp->enc_rxq_min_ndescs) ||
- (ndescs > encp->enc_rxq_max_ndescs)) {
- rc = EINVAL;
- goto fail1;
- }
if (index >= encp->enc_rxq_limit) {
rc = EINVAL;
if (index >= encp->enc_rxq_limit) {
rc = EINVAL;
- goto fail
2
;
+ goto fail
1
;
}
switch (type) {
case EFX_RXQ_TYPE_DEFAULT:
}
switch (type) {
case EFX_RXQ_TYPE_DEFAULT:
+ if (type_data == NULL) {
+ rc = EINVAL;
+ goto fail2;
+ }
+ erp->er_buf_size = type_data->ertd_default.ed_buf_size;
ps_buf_size = 0;
break;
#if EFSYS_OPT_RX_PACKED_STREAM
ps_buf_size = 0;
break;
#if EFSYS_OPT_RX_PACKED_STREAM
@@
-1056,6
+1070,7
@@
ef10_rx_qcreate(
rc = ENOTSUP;
goto fail4;
}
rc = ENOTSUP;
goto fail4;
}
+ erp->er_buf_size = type_data->ertd_packed_stream.eps_buf_size;
break;
#endif /* EFSYS_OPT_RX_PACKED_STREAM */
#if EFSYS_OPT_RX_ES_SUPER_BUFFER
break;
#endif /* EFSYS_OPT_RX_PACKED_STREAM */
#if EFSYS_OPT_RX_ES_SUPER_BUFFER
@@
-1104,12
+1119,12
@@
ef10_rx_qcreate(
rc = ENOTSUP;
goto fail9;
}
rc = ENOTSUP;
goto fail9;
}
- if (!
IS_P2ALIGNED(
es_max_dma_len,
+ if (!
EFX_IS_P2ALIGNED(uint32_t,
es_max_dma_len,
EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) {
rc = EINVAL;
goto fail10;
}
EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) {
rc = EINVAL;
goto fail10;
}
- if (!
IS_P2ALIGNED(
es_buf_stride,
+ if (!
EFX_IS_P2ALIGNED(uint32_t,
es_buf_stride,
EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) {
rc = EINVAL;
goto fail11;
EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) {
rc = EINVAL;
goto fail11;
@@
-1130,8
+1145,8
@@
ef10_rx_qcreate(
else
want_inner_classes = B_FALSE;
else
want_inner_classes = B_FALSE;
- if ((rc = efx_mcdi_init_rxq(enp, ndescs, eep
->ee_index
, label, index,
- esmp, disable_scatter, want_inner_classes,
+ if ((rc = efx_mcdi_init_rxq(enp, ndescs, eep, label, index,
+ esmp, disable_scatter, want_inner_classes,
erp->er_buf_size,
ps_buf_size, es_bufs_per_desc, es_max_dma_len,
es_buf_stride, hol_block_timeout)) != 0)
goto fail12;
ps_buf_size, es_bufs_per_desc, es_max_dma_len,
es_buf_stride, hol_block_timeout)) != 0)
goto fail12;
@@
-1211,4
+1226,4
@@
ef10_rx_fini(
#endif /* EFSYS_OPT_RX_SCALE */
}
#endif /* EFSYS_OPT_RX_SCALE */
}
-#endif /* EF
SYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2
*/
+#endif /* EF
X_OPTS_EF10()
*/