xref: /dpdk/drivers/net/enic/base/cq_enet_desc.h (revision 22572e84fbda2c195707ffbb0dd6af4433d7a219)
12e99ea80SHyong Youb Kim /* SPDX-License-Identifier: BSD-3-Clause
22e99ea80SHyong Youb Kim  * Copyright 2008-2017 Cisco Systems, Inc.  All rights reserved.
372f3de30SBruce Richardson  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
472f3de30SBruce Richardson  */
572f3de30SBruce Richardson 
672f3de30SBruce Richardson #ifndef _CQ_ENET_DESC_H_
772f3de30SBruce Richardson #define _CQ_ENET_DESC_H_
872f3de30SBruce Richardson 
9846ac76cSJohn Daley #include <rte_byteorder.h>
1072f3de30SBruce Richardson #include "cq_desc.h"
1172f3de30SBruce Richardson 
1272f3de30SBruce Richardson /* Ethernet completion queue descriptor: 16B */
1372f3de30SBruce Richardson struct cq_enet_wq_desc {
1404e8ec74SJohn Daley 	uint16_t completed_index;
1504e8ec74SJohn Daley 	uint16_t q_number;
1604e8ec74SJohn Daley 	uint8_t reserved[11];
1704e8ec74SJohn Daley 	uint8_t type_color;
1872f3de30SBruce Richardson };
1972f3de30SBruce Richardson 
cq_enet_wq_desc_enc(struct cq_enet_wq_desc * desc,uint8_t type,uint8_t color,uint16_t q_number,uint16_t completed_index)2072f3de30SBruce Richardson static inline void cq_enet_wq_desc_enc(struct cq_enet_wq_desc *desc,
2104e8ec74SJohn Daley 	uint8_t type, uint8_t color, uint16_t q_number,
2204e8ec74SJohn Daley 	uint16_t completed_index)
2372f3de30SBruce Richardson {
2472f3de30SBruce Richardson 	cq_desc_enc((struct cq_desc *)desc, type,
2572f3de30SBruce Richardson 		color, q_number, completed_index);
2672f3de30SBruce Richardson }
2772f3de30SBruce Richardson 
cq_enet_wq_desc_dec(struct cq_enet_wq_desc * desc,uint8_t * type,uint8_t * color,uint16_t * q_number,uint16_t * completed_index)2872f3de30SBruce Richardson static inline void cq_enet_wq_desc_dec(struct cq_enet_wq_desc *desc,
2904e8ec74SJohn Daley 	uint8_t *type, uint8_t *color, uint16_t *q_number,
3004e8ec74SJohn Daley 	uint16_t *completed_index)
3172f3de30SBruce Richardson {
3272f3de30SBruce Richardson 	cq_desc_dec((struct cq_desc *)desc, type,
3372f3de30SBruce Richardson 		color, q_number, completed_index);
3472f3de30SBruce Richardson }
3572f3de30SBruce Richardson 
3672f3de30SBruce Richardson /* Completion queue descriptor: Ethernet receive queue, 16B */
3772f3de30SBruce Richardson struct cq_enet_rq_desc {
3804e8ec74SJohn Daley 	uint16_t completed_index_flags;
3904e8ec74SJohn Daley 	uint16_t q_number_rss_type_flags;
4004e8ec74SJohn Daley 	uint32_t rss_hash;
4104e8ec74SJohn Daley 	uint16_t bytes_written_flags;
4204e8ec74SJohn Daley 	uint16_t vlan;
4304e8ec74SJohn Daley 	uint16_t checksum_fcoe;
4404e8ec74SJohn Daley 	uint8_t flags;
4504e8ec74SJohn Daley 	uint8_t type_color;
4672f3de30SBruce Richardson };
4772f3de30SBruce Richardson 
48322b355fSJohn Daley /* Completion queue descriptor: Ethernet receive queue, 16B */
49322b355fSJohn Daley struct cq_enet_rq_clsf_desc {
5004e8ec74SJohn Daley 	uint16_t completed_index_flags;
5104e8ec74SJohn Daley 	uint16_t q_number_rss_type_flags;
5204e8ec74SJohn Daley 	uint16_t filter_id;
5304e8ec74SJohn Daley 	uint16_t lif;
5404e8ec74SJohn Daley 	uint16_t bytes_written_flags;
5504e8ec74SJohn Daley 	uint16_t vlan;
5604e8ec74SJohn Daley 	uint16_t checksum_fcoe;
5704e8ec74SJohn Daley 	uint8_t flags;
5804e8ec74SJohn Daley 	uint8_t type_color;
59322b355fSJohn Daley };
60322b355fSJohn Daley 
618b428cb5SHyong Youb Kim /* Completion queue descriptor: Ethernet receive queue, 64B */
628b428cb5SHyong Youb Kim struct cq_enet_rq_desc_64 {
638b428cb5SHyong Youb Kim 	uint16_t completed_index_flags;
648b428cb5SHyong Youb Kim 	uint16_t q_number_rss_type_flags;
658b428cb5SHyong Youb Kim 	uint32_t rss_hash;
668b428cb5SHyong Youb Kim 	uint16_t bytes_written_flags;
678b428cb5SHyong Youb Kim 	uint16_t vlan;
688b428cb5SHyong Youb Kim 	uint16_t checksum_fcoe;
698b428cb5SHyong Youb Kim 	uint8_t flags;
70*22572e84SJohn Daley 	uint8_t fetch_idx_flags;
71*22572e84SJohn Daley 	uint8_t unused[47];
728b428cb5SHyong Youb Kim 	uint8_t type_color;
738b428cb5SHyong Youb Kim };
748b428cb5SHyong Youb Kim 
7572f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_INGRESS_PORT          (0x1 << 12)
7672f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_FCOE                  (0x1 << 13)
7772f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_EOP                   (0x1 << 14)
7872f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_SOP                   (0x1 << 15)
7972f3de30SBruce Richardson 
8072f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_BITS               4
8172f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_MASK \
8272f3de30SBruce Richardson 	((1 << CQ_ENET_RQ_DESC_RSS_TYPE_BITS) - 1)
8372f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_NONE               0
8472f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_IPv4               1
8572f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv4           2
8672f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_IPv6               3
8772f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv6           4
8872f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_IPv6_EX            5
8972f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv6_EX        6
9072f3de30SBruce Richardson 
9172f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_CSUM_NOT_CALC         (0x1 << 14)
9272f3de30SBruce Richardson 
9372f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_BYTES_WRITTEN_BITS          14
9472f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_BYTES_WRITTEN_MASK \
9572f3de30SBruce Richardson 	((1 << CQ_ENET_RQ_DESC_BYTES_WRITTEN_BITS) - 1)
96*22572e84SJohn Daley #define CQ_ENET_RQ_DESC_FETCH_IDX_BITS              2
97*22572e84SJohn Daley #define CQ_ENET_RQ_DESC_FETCH_IDX_MASK \
98*22572e84SJohn Daley 	((1 << CQ_ENET_RQ_DESC_FETCH_IDX_BITS) - 1)
9972f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_TRUNCATED             (0x1 << 14)
10072f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_VLAN_STRIPPED         (0x1 << 15)
10172f3de30SBruce Richardson 
10272f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_VLAN_TCI_VLAN_BITS          12
10372f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_VLAN_TCI_VLAN_MASK \
10472f3de30SBruce Richardson 	((1 << CQ_ENET_RQ_DESC_VLAN_TCI_VLAN_BITS) - 1)
10572f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_VLAN_TCI_CFI_MASK           (0x1 << 12)
10672f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_BITS     3
10772f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_MASK \
10872f3de30SBruce Richardson 	((1 << CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_BITS) - 1)
10972f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_SHIFT    13
11072f3de30SBruce Richardson 
11172f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_SOF_BITS               8
11272f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_SOF_MASK \
11372f3de30SBruce Richardson 	((1 << CQ_ENET_RQ_DESC_FCOE_SOF_BITS) - 1)
11472f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_EOF_BITS               8
11572f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_EOF_MASK \
11672f3de30SBruce Richardson 	((1 << CQ_ENET_RQ_DESC_FCOE_EOF_BITS) - 1)
11772f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT              8
11872f3de30SBruce Richardson 
11972f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_TCP_UDP_CSUM_OK       (0x1 << 0)
12072f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK              (0x1 << 0)
12172f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_UDP                   (0x1 << 1)
12272f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FCOE_ENC_ERROR              (0x1 << 1)
12372f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_TCP                   (0x1 << 2)
12472f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_IPV4_CSUM_OK          (0x1 << 3)
12572f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_IPV6                  (0x1 << 4)
12672f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_IPV4                  (0x1 << 5)
12772f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_IPV4_FRAGMENT         (0x1 << 6)
12872f3de30SBruce Richardson #define CQ_ENET_RQ_DESC_FLAGS_FCS_OK                (0x1 << 7)
12972f3de30SBruce Richardson 
cq_enet_rq_desc_enc(struct cq_enet_rq_desc * desc,uint8_t type,uint8_t color,uint16_t q_number,uint16_t completed_index,uint8_t ingress_port,uint8_t fcoe,uint8_t eop,uint8_t sop,uint8_t rss_type,uint8_t csum_not_calc,uint32_t rss_hash,uint16_t bytes_written,uint8_t packet_error,uint8_t vlan_stripped,uint16_t vlan,uint16_t checksum,uint8_t fcoe_sof,uint8_t fcoe_fc_crc_ok,uint8_t fcoe_enc_error,uint8_t fcoe_eof,uint8_t tcp_udp_csum_ok,uint8_t udp,uint8_t tcp,uint8_t ipv4_csum_ok,uint8_t ipv6,uint8_t ipv4,uint8_t ipv4_fragment,uint8_t fcs_ok)13072f3de30SBruce Richardson static inline void cq_enet_rq_desc_enc(struct cq_enet_rq_desc *desc,
13104e8ec74SJohn Daley 	uint8_t type, uint8_t color, uint16_t q_number,
13204e8ec74SJohn Daley 	uint16_t completed_index, uint8_t ingress_port, uint8_t fcoe,
13304e8ec74SJohn Daley 	uint8_t eop, uint8_t sop, uint8_t rss_type, uint8_t csum_not_calc,
13404e8ec74SJohn Daley 	uint32_t rss_hash, uint16_t bytes_written, uint8_t packet_error,
13504e8ec74SJohn Daley 	uint8_t vlan_stripped, uint16_t vlan, uint16_t checksum,
13604e8ec74SJohn Daley 	uint8_t fcoe_sof, uint8_t fcoe_fc_crc_ok, uint8_t fcoe_enc_error,
13704e8ec74SJohn Daley 	uint8_t fcoe_eof, uint8_t tcp_udp_csum_ok, uint8_t udp, uint8_t tcp,
13804e8ec74SJohn Daley 	uint8_t ipv4_csum_ok, uint8_t ipv6, uint8_t ipv4, uint8_t ipv4_fragment,
13904e8ec74SJohn Daley 	uint8_t fcs_ok)
14072f3de30SBruce Richardson {
14172f3de30SBruce Richardson 	cq_desc_enc((struct cq_desc *)desc, type,
14272f3de30SBruce Richardson 		color, q_number, completed_index);
14372f3de30SBruce Richardson 
144846ac76cSJohn Daley 	desc->completed_index_flags |= rte_cpu_to_le_16
145846ac76cSJohn Daley 		((ingress_port ? CQ_ENET_RQ_DESC_FLAGS_INGRESS_PORT : 0) |
14672f3de30SBruce Richardson 		(fcoe ? CQ_ENET_RQ_DESC_FLAGS_FCOE : 0) |
14772f3de30SBruce Richardson 		(eop ? CQ_ENET_RQ_DESC_FLAGS_EOP : 0) |
14872f3de30SBruce Richardson 		(sop ? CQ_ENET_RQ_DESC_FLAGS_SOP : 0));
14972f3de30SBruce Richardson 
150846ac76cSJohn Daley 	desc->q_number_rss_type_flags |= rte_cpu_to_le_16
151846ac76cSJohn Daley 		(((rss_type & CQ_ENET_RQ_DESC_RSS_TYPE_MASK) <<
15272f3de30SBruce Richardson 		CQ_DESC_Q_NUM_BITS) |
15372f3de30SBruce Richardson 		(csum_not_calc ? CQ_ENET_RQ_DESC_FLAGS_CSUM_NOT_CALC : 0));
15472f3de30SBruce Richardson 
155846ac76cSJohn Daley 	desc->rss_hash = rte_cpu_to_le_32(rss_hash);
15672f3de30SBruce Richardson 
157846ac76cSJohn Daley 	desc->bytes_written_flags = rte_cpu_to_le_16
158846ac76cSJohn Daley 		((bytes_written & CQ_ENET_RQ_DESC_BYTES_WRITTEN_MASK) |
15972f3de30SBruce Richardson 		(packet_error ? CQ_ENET_RQ_DESC_FLAGS_TRUNCATED : 0) |
16072f3de30SBruce Richardson 		(vlan_stripped ? CQ_ENET_RQ_DESC_FLAGS_VLAN_STRIPPED : 0));
16172f3de30SBruce Richardson 
162846ac76cSJohn Daley 	desc->vlan = rte_cpu_to_le_16(vlan);
16372f3de30SBruce Richardson 
16472f3de30SBruce Richardson 	if (fcoe) {
165846ac76cSJohn Daley 		desc->checksum_fcoe = rte_cpu_to_le_16
166846ac76cSJohn Daley 			((fcoe_sof & CQ_ENET_RQ_DESC_FCOE_SOF_MASK) |
16772f3de30SBruce Richardson 			((fcoe_eof & CQ_ENET_RQ_DESC_FCOE_EOF_MASK) <<
16872f3de30SBruce Richardson 				CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT));
16972f3de30SBruce Richardson 	} else {
170846ac76cSJohn Daley 		desc->checksum_fcoe = rte_cpu_to_le_16(checksum);
17172f3de30SBruce Richardson 	}
17272f3de30SBruce Richardson 
17372f3de30SBruce Richardson 	desc->flags =
17472f3de30SBruce Richardson 		(tcp_udp_csum_ok ? CQ_ENET_RQ_DESC_FLAGS_TCP_UDP_CSUM_OK : 0) |
17572f3de30SBruce Richardson 		(udp ? CQ_ENET_RQ_DESC_FLAGS_UDP : 0) |
17672f3de30SBruce Richardson 		(tcp ? CQ_ENET_RQ_DESC_FLAGS_TCP : 0) |
17772f3de30SBruce Richardson 		(ipv4_csum_ok ? CQ_ENET_RQ_DESC_FLAGS_IPV4_CSUM_OK : 0) |
17872f3de30SBruce Richardson 		(ipv6 ? CQ_ENET_RQ_DESC_FLAGS_IPV6 : 0) |
17972f3de30SBruce Richardson 		(ipv4 ? CQ_ENET_RQ_DESC_FLAGS_IPV4 : 0) |
18072f3de30SBruce Richardson 		(ipv4_fragment ? CQ_ENET_RQ_DESC_FLAGS_IPV4_FRAGMENT : 0) |
18172f3de30SBruce Richardson 		(fcs_ok ? CQ_ENET_RQ_DESC_FLAGS_FCS_OK : 0) |
18272f3de30SBruce Richardson 		(fcoe_fc_crc_ok ? CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK : 0) |
18372f3de30SBruce Richardson 		(fcoe_enc_error ? CQ_ENET_RQ_DESC_FCOE_ENC_ERROR : 0);
18472f3de30SBruce Richardson }
18572f3de30SBruce Richardson 
cq_enet_rq_desc_dec(struct cq_enet_rq_desc * desc,uint8_t * type,uint8_t * color,uint16_t * q_number,uint16_t * completed_index,uint8_t * ingress_port,uint8_t * fcoe,uint8_t * eop,uint8_t * sop,uint8_t * rss_type,uint8_t * csum_not_calc,uint32_t * rss_hash,uint16_t * bytes_written,uint8_t * packet_error,uint8_t * vlan_stripped,uint16_t * vlan_tci,uint16_t * checksum,uint8_t * fcoe_sof,uint8_t * fcoe_fc_crc_ok,uint8_t * fcoe_enc_error,uint8_t * fcoe_eof,uint8_t * tcp_udp_csum_ok,uint8_t * udp,uint8_t * tcp,uint8_t * ipv4_csum_ok,uint8_t * ipv6,uint8_t * ipv4,uint8_t * ipv4_fragment,uint8_t * fcs_ok)18672f3de30SBruce Richardson static inline void cq_enet_rq_desc_dec(struct cq_enet_rq_desc *desc,
18704e8ec74SJohn Daley 	uint8_t *type, uint8_t *color, uint16_t *q_number,
18804e8ec74SJohn Daley 	uint16_t *completed_index, uint8_t *ingress_port, uint8_t *fcoe,
18904e8ec74SJohn Daley 	uint8_t *eop, uint8_t *sop, uint8_t *rss_type, uint8_t *csum_not_calc,
19004e8ec74SJohn Daley 	uint32_t *rss_hash, uint16_t *bytes_written, uint8_t *packet_error,
19104e8ec74SJohn Daley 	uint8_t *vlan_stripped, uint16_t *vlan_tci, uint16_t *checksum,
19204e8ec74SJohn Daley 	uint8_t *fcoe_sof, uint8_t *fcoe_fc_crc_ok, uint8_t *fcoe_enc_error,
19304e8ec74SJohn Daley 	uint8_t *fcoe_eof, uint8_t *tcp_udp_csum_ok, uint8_t *udp, uint8_t *tcp,
19404e8ec74SJohn Daley 	uint8_t *ipv4_csum_ok, uint8_t *ipv6, uint8_t *ipv4,
19504e8ec74SJohn Daley 	uint8_t *ipv4_fragment, uint8_t *fcs_ok)
19672f3de30SBruce Richardson {
19704e8ec74SJohn Daley 	uint16_t completed_index_flags;
19804e8ec74SJohn Daley 	uint16_t q_number_rss_type_flags;
19904e8ec74SJohn Daley 	uint16_t bytes_written_flags;
20072f3de30SBruce Richardson 
20172f3de30SBruce Richardson 	cq_desc_dec((struct cq_desc *)desc, type,
20272f3de30SBruce Richardson 		color, q_number, completed_index);
20372f3de30SBruce Richardson 
204846ac76cSJohn Daley 	completed_index_flags = rte_le_to_cpu_16(desc->completed_index_flags);
20572f3de30SBruce Richardson 	q_number_rss_type_flags =
206846ac76cSJohn Daley 		rte_le_to_cpu_16(desc->q_number_rss_type_flags);
207846ac76cSJohn Daley 	bytes_written_flags = rte_le_to_cpu_16(desc->bytes_written_flags);
20872f3de30SBruce Richardson 
20972f3de30SBruce Richardson 	*ingress_port = (completed_index_flags &
21072f3de30SBruce Richardson 		CQ_ENET_RQ_DESC_FLAGS_INGRESS_PORT) ? 1 : 0;
21172f3de30SBruce Richardson 	*fcoe = (completed_index_flags & CQ_ENET_RQ_DESC_FLAGS_FCOE) ?
21272f3de30SBruce Richardson 		1 : 0;
21372f3de30SBruce Richardson 	*eop = (completed_index_flags & CQ_ENET_RQ_DESC_FLAGS_EOP) ?
21472f3de30SBruce Richardson 		1 : 0;
21572f3de30SBruce Richardson 	*sop = (completed_index_flags & CQ_ENET_RQ_DESC_FLAGS_SOP) ?
21672f3de30SBruce Richardson 		1 : 0;
21772f3de30SBruce Richardson 
21804e8ec74SJohn Daley 	*rss_type = (uint8_t)((q_number_rss_type_flags >> CQ_DESC_Q_NUM_BITS) &
21972f3de30SBruce Richardson 		CQ_ENET_RQ_DESC_RSS_TYPE_MASK);
22072f3de30SBruce Richardson 	*csum_not_calc = (q_number_rss_type_flags &
22172f3de30SBruce Richardson 		CQ_ENET_RQ_DESC_FLAGS_CSUM_NOT_CALC) ? 1 : 0;
22272f3de30SBruce Richardson 
223846ac76cSJohn Daley 	*rss_hash = rte_le_to_cpu_32(desc->rss_hash);
22472f3de30SBruce Richardson 
22572f3de30SBruce Richardson 	*bytes_written = bytes_written_flags &
22672f3de30SBruce Richardson 		CQ_ENET_RQ_DESC_BYTES_WRITTEN_MASK;
22772f3de30SBruce Richardson 	*packet_error = (bytes_written_flags &
22872f3de30SBruce Richardson 		CQ_ENET_RQ_DESC_FLAGS_TRUNCATED) ? 1 : 0;
22972f3de30SBruce Richardson 	*vlan_stripped = (bytes_written_flags &
23072f3de30SBruce Richardson 		CQ_ENET_RQ_DESC_FLAGS_VLAN_STRIPPED) ? 1 : 0;
23172f3de30SBruce Richardson 
23272f3de30SBruce Richardson 	/*
23372f3de30SBruce Richardson 	 * Tag Control Information(16) = user_priority(3) + cfi(1) + vlan(12)
23472f3de30SBruce Richardson 	 */
235846ac76cSJohn Daley 	*vlan_tci = rte_le_to_cpu_16(desc->vlan);
23672f3de30SBruce Richardson 
23772f3de30SBruce Richardson 	if (*fcoe) {
23804e8ec74SJohn Daley 		*fcoe_sof = (uint8_t)(rte_le_to_cpu_16(desc->checksum_fcoe) &
23972f3de30SBruce Richardson 			CQ_ENET_RQ_DESC_FCOE_SOF_MASK);
24072f3de30SBruce Richardson 		*fcoe_fc_crc_ok = (desc->flags &
24172f3de30SBruce Richardson 			CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK) ? 1 : 0;
24272f3de30SBruce Richardson 		*fcoe_enc_error = (desc->flags &
24372f3de30SBruce Richardson 			CQ_ENET_RQ_DESC_FCOE_ENC_ERROR) ? 1 : 0;
24404e8ec74SJohn Daley 		*fcoe_eof = (uint8_t)((rte_le_to_cpu_16(desc->checksum_fcoe) >>
24572f3de30SBruce Richardson 			CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT) &
24672f3de30SBruce Richardson 			CQ_ENET_RQ_DESC_FCOE_EOF_MASK);
24772f3de30SBruce Richardson 		*checksum = 0;
24872f3de30SBruce Richardson 	} else {
24972f3de30SBruce Richardson 		*fcoe_sof = 0;
25072f3de30SBruce Richardson 		*fcoe_fc_crc_ok = 0;
25172f3de30SBruce Richardson 		*fcoe_enc_error = 0;
25272f3de30SBruce Richardson 		*fcoe_eof = 0;
253846ac76cSJohn Daley 		*checksum = rte_le_to_cpu_16(desc->checksum_fcoe);
25472f3de30SBruce Richardson 	}
25572f3de30SBruce Richardson 
25672f3de30SBruce Richardson 	*tcp_udp_csum_ok =
25772f3de30SBruce Richardson 		(desc->flags & CQ_ENET_RQ_DESC_FLAGS_TCP_UDP_CSUM_OK) ? 1 : 0;
25872f3de30SBruce Richardson 	*udp = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_UDP) ? 1 : 0;
25972f3de30SBruce Richardson 	*tcp = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_TCP) ? 1 : 0;
26072f3de30SBruce Richardson 	*ipv4_csum_ok =
26172f3de30SBruce Richardson 		(desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV4_CSUM_OK) ? 1 : 0;
26272f3de30SBruce Richardson 	*ipv6 = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV6) ? 1 : 0;
26372f3de30SBruce Richardson 	*ipv4 = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV4) ? 1 : 0;
26472f3de30SBruce Richardson 	*ipv4_fragment =
26572f3de30SBruce Richardson 		(desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV4_FRAGMENT) ? 1 : 0;
26672f3de30SBruce Richardson 	*fcs_ok = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_FCS_OK) ? 1 : 0;
26772f3de30SBruce Richardson }
26872f3de30SBruce Richardson 
26972f3de30SBruce Richardson #endif /* _CQ_ENET_DESC_H_ */
270