wc->vendor_specific = cqe->vendor_err_syndrome;\r
}\r
\r
-static uint8_t mlx4_ib_ipoib_csum_ok(__be32 status, __be16 checksum) {\r
+static uint32_t mlx4_ib_ipoib_csum_ok(__be32 status, __be16 checksum) {\r
\r
#define CSUM_VALID_NUM 0xffff\r
- uint8_t res = 0;\r
+ uint32_t res = 0;\r
\r
// Verify that IP_OK bit is set and the packet is pure IPv4 packet\r
if ((status & cpu_to_be32(MLX4_CQE_IPOIB_STATUS_IPV4 |\r
ASSERT( status & cpu_to_be32(MLX4_CQE_IPOIB_STATUS_TCP | MLX4_CQE_IPOIB_STATUS_UDP));\r
}\r
}\r
- return res;\r
+ return (( res << 8 ) & IB_RECV_OPT_CSUM_MASK );\r
}\r
\r
static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,\r
wc->recv.ud.path_bits = (u8)(cqe->g_mlpath_rqpn & 0x7f);\r
wc->recv.ud.recv_opt |= cqe->g_mlpath_rqpn & 0x080 ? IB_RECV_OPT_GRH_VALID : 0;\r
wc->recv.ud.pkey_index = (u16)(be32_to_cpu(cqe->immed_rss_invalid) & 0x7f);\r
- wc->recv.ud.csum_ok = mlx4_ib_ipoib_csum_ok(cqe->ipoib_status,cqe->checksum);\r
+ wc->recv.ud.recv_opt |= mlx4_ib_ipoib_csum_ok(cqe->ipoib_status,cqe->checksum);\r
}\r
if (!is_send && cqe->rlid == 0){\r
MLX4_PRINT(TRACE_LEVEL_INFORMATION,MLX4_DBG_CQ,("found rlid == 0 \n "));\r
*free_cqe = 0;\r
}\r
\r
-static inline uint8_t mthca_ib_ipoib_csum_ok(u16 checksum, u8 ip_ok) {\r
+static inline uint32_t mthca_ib_ipoib_csum_ok(u16 checksum, u8 ip_ok) {\r
\r
#define CSUM_VALID_NUM 0xffff\r
- uint8_t res = 0;\r
+ uint32_t res = 0;\r
\r
// Verify that IP_OK bit is set and the packet is pure IPv4 packet\r
if (ip_ok)\r
MTHCA_NdisPacketTcpChecksumSucceeded );\r
}\r
}\r
- return res;\r
+ return ( ( res << 8 ) & IB_RECV_OPT_CSUM_MASK );\r
}\r
\r
static inline int mthca_poll_one(struct mthca_dev *dev,\r
entry->recv.ud.recv_opt |= cqe->g_mlpath & 0x80 ? IB_RECV_OPT_GRH_VALID : 0;\r
checksum = (u16)((cl_ntoh32(cqe->rqpn) >> 24) |\r
((cl_ntoh32(cqe->my_ee) >> 16) & 0xff00));\r
- entry->recv.ud.csum_ok = mthca_ib_ipoib_csum_ok(checksum, cqe->sl_ipok & 1);\r
+ entry->recv.ud.recv_opt |= mthca_ib_ipoib_csum_ok(checksum, cqe->sl_ipok & 1);\r
}\r
if (!is_send && cqe->rlid == 0){\r
HCA_PRINT(TRACE_LEVEL_INFORMATION,HCA_DBG_CQ,("found rlid == 0 \n "));\r
}\r
\r
\r
+\r
#define IB_RECV_OPT_FORWARD 0x00000002\r
#define IB_RECV_OPT_GRH_VALID 0x00000004\r
#define IB_RECV_OPT_VEND_MASK 0xFFFF0000\r
+#define IB_RECV_OPT_CSUM_MASK 0x0000FF00\r
/*\r
* VALUES\r
* IB_RECV_OPT_IMMEDIATE\r
ib_net16_t remote_lid;\r
uint8_t remote_sl;\r
uint8_t path_bits;\r
- uint8_t csum_ok;\r
\r
} ud;\r
\r
\r
\r
\r
+\r
+\r
\r
}\r
/* Successful completion. Get the receive information. */\r
- p_desc->ndis_csum.Value = (ULONG) p_wc->recv.ud.csum_ok;\r
+ p_desc->ndis_csum.Value = ( (p_wc->recv.ud.recv_opt & IB_RECV_OPT_CSUM_MASK ) >> 8 );\r
cl_perf_start( GetRecvEndpts );\r
__recv_get_endpts( p_port, p_desc, p_wc, &p_src, &p_dst );\r
cl_perf_stop( &p_port->p_adapter->perf, GetRecvEndpts );\r
__port_do_mcast_garbage(p_port);\r
}\r
\r
+\r