net/mvpp2: update Tx checksum
According to the dpdk spec, only 'ol_flags' should be used for tx checksum generation Signed-off-by: Liron Himi <lironh@marvell.com>
This commit is contained in:
parent
ff0b8b10dc
commit
45ea4c59e8
@ -63,11 +63,16 @@
|
||||
DEV_RX_OFFLOAD_CHECKSUM)
|
||||
|
||||
/** Port Tx offloads capabilities */
|
||||
#define MRVL_TX_OFFLOADS (DEV_TX_OFFLOAD_IPV4_CKSUM | \
|
||||
DEV_TX_OFFLOAD_UDP_CKSUM | \
|
||||
DEV_TX_OFFLOAD_TCP_CKSUM | \
|
||||
#define MRVL_TX_OFFLOAD_CHECKSUM (DEV_TX_OFFLOAD_IPV4_CKSUM | \
|
||||
DEV_TX_OFFLOAD_UDP_CKSUM | \
|
||||
DEV_TX_OFFLOAD_TCP_CKSUM)
|
||||
#define MRVL_TX_OFFLOADS (MRVL_TX_OFFLOAD_CHECKSUM | \
|
||||
DEV_TX_OFFLOAD_MULTI_SEGS)
|
||||
|
||||
#define MRVL_TX_PKT_OFFLOADS (PKT_TX_IP_CKSUM | \
|
||||
PKT_TX_TCP_CKSUM | \
|
||||
PKT_TX_UDP_CKSUM)
|
||||
|
||||
static const char * const valid_args[] = {
|
||||
MRVL_IFACE_NAME_ARG,
|
||||
MRVL_CFG_ARG,
|
||||
@ -2481,8 +2486,6 @@ mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
|
||||
*
|
||||
* @param ol_flags
|
||||
* Offload flags.
|
||||
* @param packet_type
|
||||
* Packet type bitfield.
|
||||
* @param l3_type
|
||||
* Pointer to the pp2_ouq_l3_type structure.
|
||||
* @param l4_type
|
||||
@ -2491,12 +2494,9 @@ mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
|
||||
* Will be set to 1 in case l3 checksum is computed.
|
||||
* @param l4_cksum
|
||||
* Will be set to 1 in case l4 checksum is computed.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, negative error value otherwise.
|
||||
*/
|
||||
static inline int
|
||||
mrvl_prepare_proto_info(uint64_t ol_flags, uint32_t packet_type,
|
||||
static inline void
|
||||
mrvl_prepare_proto_info(uint64_t ol_flags,
|
||||
enum pp2_outq_l3_type *l3_type,
|
||||
enum pp2_outq_l4_type *l4_type,
|
||||
int *gen_l3_cksum,
|
||||
@ -2506,26 +2506,22 @@ mrvl_prepare_proto_info(uint64_t ol_flags, uint32_t packet_type,
|
||||
* Based on ol_flags prepare information
|
||||
* for pp2_ppio_outq_desc_set_proto_info() which setups descriptor
|
||||
* for offloading.
|
||||
* in most of the checksum cases ipv4 must be set, so this is the
|
||||
* default value
|
||||
*/
|
||||
if (ol_flags & PKT_TX_IPV4) {
|
||||
*l3_type = PP2_OUTQ_L3_TYPE_IPV4;
|
||||
*gen_l3_cksum = ol_flags & PKT_TX_IP_CKSUM ? 1 : 0;
|
||||
} else if (ol_flags & PKT_TX_IPV6) {
|
||||
*l3_type = PP2_OUTQ_L3_TYPE_IPV4;
|
||||
*gen_l3_cksum = ol_flags & PKT_TX_IP_CKSUM ? 1 : 0;
|
||||
|
||||
if (ol_flags & PKT_TX_IPV6) {
|
||||
*l3_type = PP2_OUTQ_L3_TYPE_IPV6;
|
||||
/* no checksum for ipv6 header */
|
||||
*gen_l3_cksum = 0;
|
||||
} else {
|
||||
/* if something different then stop processing */
|
||||
return -1;
|
||||
}
|
||||
|
||||
ol_flags &= PKT_TX_L4_MASK;
|
||||
if ((packet_type & RTE_PTYPE_L4_TCP) &&
|
||||
ol_flags == PKT_TX_TCP_CKSUM) {
|
||||
if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM) {
|
||||
*l4_type = PP2_OUTQ_L4_TYPE_TCP;
|
||||
*gen_l4_cksum = 1;
|
||||
} else if ((packet_type & RTE_PTYPE_L4_UDP) &&
|
||||
ol_flags == PKT_TX_UDP_CKSUM) {
|
||||
} else if ((ol_flags & PKT_TX_L4_MASK) == PKT_TX_UDP_CKSUM) {
|
||||
*l4_type = PP2_OUTQ_L4_TYPE_UDP;
|
||||
*gen_l4_cksum = 1;
|
||||
} else {
|
||||
@ -2533,8 +2529,6 @@ mrvl_prepare_proto_info(uint64_t ol_flags, uint32_t packet_type,
|
||||
/* no checksum for other type */
|
||||
*gen_l4_cksum = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2635,7 +2629,7 @@ mrvl_tx_pkt_burst(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
|
||||
struct pp2_hif *hif;
|
||||
struct pp2_ppio_desc descs[nb_pkts];
|
||||
unsigned int core_id = rte_lcore_id();
|
||||
int i, ret, bytes_sent = 0;
|
||||
int i, bytes_sent = 0;
|
||||
uint16_t num, sq_free_size;
|
||||
uint64_t addr;
|
||||
|
||||
@ -2675,11 +2669,10 @@ mrvl_tx_pkt_burst(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
|
||||
* in case unsupported ol_flags were passed
|
||||
* do not update descriptor offload information
|
||||
*/
|
||||
ret = mrvl_prepare_proto_info(mbuf->ol_flags, mbuf->packet_type,
|
||||
&l3_type, &l4_type, &gen_l3_cksum,
|
||||
&gen_l4_cksum);
|
||||
if (unlikely(ret))
|
||||
if (!(mbuf->ol_flags & MRVL_TX_PKT_OFFLOADS))
|
||||
continue;
|
||||
mrvl_prepare_proto_info(mbuf->ol_flags, &l3_type, &l4_type,
|
||||
&gen_l3_cksum, &gen_l4_cksum);
|
||||
|
||||
pp2_ppio_outq_desc_set_proto_info(&descs[i], l3_type, l4_type,
|
||||
mbuf->l2_len,
|
||||
@ -2729,7 +2722,7 @@ mrvl_tx_sg_pkt_burst(void *txq, struct rte_mbuf **tx_pkts,
|
||||
struct pp2_ppio_sg_pkts pkts;
|
||||
uint8_t frags[nb_pkts];
|
||||
unsigned int core_id = rte_lcore_id();
|
||||
int i, j, ret, bytes_sent = 0;
|
||||
int i, j, bytes_sent = 0;
|
||||
int tail, tail_first;
|
||||
uint16_t num, sq_free_size;
|
||||
uint16_t nb_segs, total_descs = 0;
|
||||
@ -2812,11 +2805,10 @@ mrvl_tx_sg_pkt_burst(void *txq, struct rte_mbuf **tx_pkts,
|
||||
/* In case unsupported ol_flags were passed
|
||||
* do not update descriptor offload information
|
||||
*/
|
||||
ret = mrvl_prepare_proto_info(mbuf->ol_flags, mbuf->packet_type,
|
||||
&l3_type, &l4_type, &gen_l3_cksum,
|
||||
&gen_l4_cksum);
|
||||
if (unlikely(ret))
|
||||
if (!(mbuf->ol_flags & MRVL_TX_PKT_OFFLOADS))
|
||||
continue;
|
||||
mrvl_prepare_proto_info(mbuf->ol_flags, &l3_type, &l4_type,
|
||||
&gen_l3_cksum, &gen_l4_cksum);
|
||||
|
||||
pp2_ppio_outq_desc_set_proto_info(&descs[tail_first], l3_type,
|
||||
l4_type, mbuf->l2_len,
|
||||
|
Loading…
Reference in New Issue
Block a user