101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman/*
229046f9b1e36f6e3332ce2d8e366005fd177b37aVasanthy Kolluri * Copyright 2008-2010 Cisco Systems, Inc.  All rights reserved.
301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman *
501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * This program is free software; you may redistribute it and/or modify
601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * it under the terms of the GNU General Public License as published by
701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * the Free Software Foundation; version 2 of the License.
801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman *
901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
1201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
1301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
1401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman * SOFTWARE.
1701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman *
1801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman */
1901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
2001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#ifndef _CQ_ENET_DESC_H_
2101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define _CQ_ENET_DESC_H_
2201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
2301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#include "cq_desc.h"
2401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
2501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman/* Ethernet completion queue descriptor: 16B */
2601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldmanstruct cq_enet_wq_desc {
2701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 completed_index;
2801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 q_number;
2901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 reserved[11];
3001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 type_color;
3101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman};
3201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
3301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldmanstatic inline void cq_enet_wq_desc_dec(struct cq_enet_wq_desc *desc,
3401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *type, u8 *color, u16 *q_number, u16 *completed_index)
3501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman{
3601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	cq_desc_dec((struct cq_desc *)desc, type,
3701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		color, q_number, completed_index);
3801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman}
3901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
4001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman/* Completion queue descriptor: Ethernet receive queue, 16B */
4101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldmanstruct cq_enet_rq_desc {
4201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 completed_index_flags;
4301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 q_number_rss_type_flags;
4401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le32 rss_hash;
4501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 bytes_written_flags;
4601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 vlan;
4701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	__le16 checksum_fcoe;
4801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 flags;
4901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 type_color;
5001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman};
5101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
5201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_INGRESS_PORT          (0x1 << 12)
5301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_FCOE                  (0x1 << 13)
5401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_EOP                   (0x1 << 14)
5501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_SOP                   (0x1 << 15)
5601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
5701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_BITS               4
5801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_MASK \
5901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	((1 << CQ_ENET_RQ_DESC_RSS_TYPE_BITS) - 1)
6001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_NONE               0
6101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_IPv4               1
6201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv4           2
6301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_IPv6               3
6401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv6           4
6501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_IPv6_EX            5
6601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv6_EX        6
6701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
6801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_CSUM_NOT_CALC         (0x1 << 14)
6901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
7001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_BYTES_WRITTEN_BITS          14
7101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_BYTES_WRITTEN_MASK \
7201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	((1 << CQ_ENET_RQ_DESC_BYTES_WRITTEN_BITS) - 1)
7301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_TRUNCATED             (0x1 << 14)
7401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_VLAN_STRIPPED         (0x1 << 15)
7501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
76f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri#define CQ_ENET_RQ_DESC_VLAN_TCI_VLAN_BITS          12
77f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri#define CQ_ENET_RQ_DESC_VLAN_TCI_VLAN_MASK \
78f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	((1 << CQ_ENET_RQ_DESC_VLAN_TCI_VLAN_BITS) - 1)
79f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri#define CQ_ENET_RQ_DESC_VLAN_TCI_CFI_MASK           (0x1 << 12)
80f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri#define CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_BITS     3
81f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri#define CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_MASK \
82f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	((1 << CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_BITS) - 1)
83f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri#define CQ_ENET_RQ_DESC_VLAN_TCI_USER_PRIO_SHIFT    13
84f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri
8529046f9b1e36f6e3332ce2d8e366005fd177b37aVasanthy Kolluri#define CQ_ENET_RQ_DESC_FCOE_SOF_BITS               8
8601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FCOE_SOF_MASK \
8701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	((1 << CQ_ENET_RQ_DESC_FCOE_SOF_BITS) - 1)
8801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FCOE_EOF_BITS               8
8901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FCOE_EOF_MASK \
9001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	((1 << CQ_ENET_RQ_DESC_FCOE_EOF_BITS) - 1)
9101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT              8
9201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
9301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_TCP_UDP_CSUM_OK       (0x1 << 0)
9401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK              (0x1 << 0)
9501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_UDP                   (0x1 << 1)
9601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FCOE_ENC_ERROR              (0x1 << 1)
9701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_TCP                   (0x1 << 2)
9801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_IPV4_CSUM_OK          (0x1 << 3)
9901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_IPV6                  (0x1 << 4)
10001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_IPV4                  (0x1 << 5)
10101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_IPV4_FRAGMENT         (0x1 << 6)
10201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#define CQ_ENET_RQ_DESC_FLAGS_FCS_OK                (0x1 << 7)
10301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
10401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldmanstatic inline void cq_enet_rq_desc_dec(struct cq_enet_rq_desc *desc,
10501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *type, u8 *color, u16 *q_number, u16 *completed_index,
10601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *ingress_port, u8 *fcoe, u8 *eop, u8 *sop, u8 *rss_type,
10701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *csum_not_calc, u32 *rss_hash, u16 *bytes_written, u8 *packet_error,
108f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	u8 *vlan_stripped, u16 *vlan_tci, u16 *checksum, u8 *fcoe_sof,
10901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *fcoe_fc_crc_ok, u8 *fcoe_enc_error, u8 *fcoe_eof,
11001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *tcp_udp_csum_ok, u8 *udp, u8 *tcp, u8 *ipv4_csum_ok,
11101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	u8 *ipv6, u8 *ipv4, u8 *ipv4_fragment, u8 *fcs_ok)
11201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman{
113a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri	u16 completed_index_flags;
114a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri	u16 q_number_rss_type_flags;
115a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri	u16 bytes_written_flags;
11601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
11701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	cq_desc_dec((struct cq_desc *)desc, type,
11801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		color, q_number, completed_index);
11901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
120a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri	completed_index_flags = le16_to_cpu(desc->completed_index_flags);
121a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri	q_number_rss_type_flags =
122a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri		le16_to_cpu(desc->q_number_rss_type_flags);
123a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri	bytes_written_flags = le16_to_cpu(desc->bytes_written_flags);
124a55a603dae47a1ea4fbfad3a3a428ea7a0900ab6Vasanthy Kolluri
12501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*ingress_port = (completed_index_flags &
12601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		CQ_ENET_RQ_DESC_FLAGS_INGRESS_PORT) ? 1 : 0;
12701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*fcoe = (completed_index_flags & CQ_ENET_RQ_DESC_FLAGS_FCOE) ?
12801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		1 : 0;
12901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*eop = (completed_index_flags & CQ_ENET_RQ_DESC_FLAGS_EOP) ?
13001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		1 : 0;
13101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*sop = (completed_index_flags & CQ_ENET_RQ_DESC_FLAGS_SOP) ?
13201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		1 : 0;
13301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
13401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*rss_type = (u8)((q_number_rss_type_flags >> CQ_DESC_Q_NUM_BITS) &
13501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		CQ_ENET_RQ_DESC_RSS_TYPE_MASK);
13601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*csum_not_calc = (q_number_rss_type_flags &
13701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		CQ_ENET_RQ_DESC_FLAGS_CSUM_NOT_CALC) ? 1 : 0;
13801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
13901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*rss_hash = le32_to_cpu(desc->rss_hash);
14001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
14101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*bytes_written = bytes_written_flags &
14201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		CQ_ENET_RQ_DESC_BYTES_WRITTEN_MASK;
14301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*packet_error = (bytes_written_flags &
14401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		CQ_ENET_RQ_DESC_FLAGS_TRUNCATED) ? 1 : 0;
14501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*vlan_stripped = (bytes_written_flags &
14601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		CQ_ENET_RQ_DESC_FLAGS_VLAN_STRIPPED) ? 1 : 0;
14701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
148f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	/*
149f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	 * Tag Control Information(16) = user_priority(3) + cfi(1) + vlan(12)
150f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	 */
151f8cac14acff870203ea7f61f1a92c5486d1774faVasanthy Kolluri	*vlan_tci = le16_to_cpu(desc->vlan);
15201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
15301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	if (*fcoe) {
15401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_sof = (u8)(le16_to_cpu(desc->checksum_fcoe) &
15501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman			CQ_ENET_RQ_DESC_FCOE_SOF_MASK);
15601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_fc_crc_ok = (desc->flags &
15701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman			CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK) ? 1 : 0;
15801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_enc_error = (desc->flags &
15901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman			CQ_ENET_RQ_DESC_FCOE_ENC_ERROR) ? 1 : 0;
16021ca54e99b085b9ff4c91ca41afe42a439966109Santosh Nayak		*fcoe_eof = (u8)((le16_to_cpu(desc->checksum_fcoe) >>
16101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman			CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT) &
16201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman			CQ_ENET_RQ_DESC_FCOE_EOF_MASK);
16301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*checksum = 0;
16401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	} else {
16501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_sof = 0;
16601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_fc_crc_ok = 0;
16701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_enc_error = 0;
16801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*fcoe_eof = 0;
16901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		*checksum = le16_to_cpu(desc->checksum_fcoe);
17001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	}
17101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
17201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*tcp_udp_csum_ok =
17301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		(desc->flags & CQ_ENET_RQ_DESC_FLAGS_TCP_UDP_CSUM_OK) ? 1 : 0;
17401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*udp = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_UDP) ? 1 : 0;
17501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*tcp = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_TCP) ? 1 : 0;
17601f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*ipv4_csum_ok =
17701f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		(desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV4_CSUM_OK) ? 1 : 0;
17801f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*ipv6 = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV6) ? 1 : 0;
17901f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*ipv4 = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV4) ? 1 : 0;
18001f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*ipv4_fragment =
18101f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman		(desc->flags & CQ_ENET_RQ_DESC_FLAGS_IPV4_FRAGMENT) ? 1 : 0;
18201f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman	*fcs_ok = (desc->flags & CQ_ENET_RQ_DESC_FLAGS_FCS_OK) ? 1 : 0;
18301f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman}
18401f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman
18501f2e4ead2c51226ed1283ef6a8388ca6f4cff8fScott Feldman#endif /* _CQ_ENET_DESC_H_ */
186