};
enum {
- MLX4_NdisPacketTcpChecksumFailed = 1 << 1,
- MLX4_NdisPacketUdpChecksumFailed = 1 << 2,
- MLX4_NdisPacketIpChecksumFailed = 1 << 3,
- MLX4_NdisPacketTcpChecksumSucceeded = 1 << 4,
- MLX4_NdisPacketUdpChecksumSucceeded = 1 << 5,
- MLX4_NdisPacketIpChecksumSucceeded = 1 << 6
+ MLX4_NdisPacketTcpChecksumFailed = 1 << 0,
+ MLX4_NdisPacketUdpChecksumFailed = 1 << 1,
+ MLX4_NdisPacketIpChecksumFailed = 1 << 2,
+ MLX4_NdisPacketTcpChecksumSucceeded = 1 << 3,
+ MLX4_NdisPacketUdpChecksumSucceeded = 1 << 4,
+ MLX4_NdisPacketIpChecksumSucceeded = 1 << 5
};
static inline void mlx4_cq_arm(struct mlx4_cq *cq, u32 cmd,
};\r
\r
enum { \r
- MTHCA_NdisPacketTcpChecksumFailed = 1 << 1,\r
- MTHCA_NdisPacketUdpChecksumFailed = 1 << 2,\r
- MTHCA_NdisPacketIpChecksumFailed = 1 << 3,\r
- MTHCA_NdisPacketTcpChecksumSucceeded = 1 << 4,\r
- MTHCA_NdisPacketUdpChecksumSucceeded = 1 << 5,\r
- MTHCA_NdisPacketIpChecksumSucceeded = 1 << 6\r
+ MTHCA_NdisPacketTcpChecksumFailed = 1 << 0,\r
+ MTHCA_NdisPacketUdpChecksumFailed = 1 << 1,\r
+ MTHCA_NdisPacketIpChecksumFailed = 1 << 2,\r
+ MTHCA_NdisPacketTcpChecksumSucceeded = 1 << 3,\r
+ MTHCA_NdisPacketUdpChecksumSucceeded = 1 << 4,\r
+ MTHCA_NdisPacketIpChecksumSucceeded = 1 << 5\r
};\r
\r
struct mthca_cqe {\r
NDIS_STATUS status;\r
uint32_t pkt_filter;\r
ip_stat_sel_t type;\r
+ NDIS_TCP_IP_CHECKSUM_PACKET_INFO chksum;\r
+\r
PERF_DECLARE( GetNdisPkt );\r
\r
IPOIB_ENTER( IPOIB_DBG_RECV );\r
("__buf_mgr_get_ndis_pkt failed\n") );\r
return IB_INSUFFICIENT_RESOURCES;\r
}\r
- if (p_port->p_adapter->params.recv_chksum_offload != CSUM_BYPASS) {\r
- /* Get the checksums directly from packet information. */\r
- /* In this case, no one of cheksum's cat get false value */\r
- /* If hardware checksum failed or wasn't calculated, NDIS will recalculate it again */\r
+\r
+ chksum.Value = 0;\r
+ switch (p_port->p_adapter->params.recv_chksum_offload) {\r
+ case CSUM_DISABLED:\r
+ NDIS_PER_PACKET_INFO_FROM_PACKET( *pp_packet, TcpIpChecksumPacketInfo ) =\r
+ (void*)(uintn_t)chksum.Value;\r
+ break;\r
+ case CSUM_ENABLED:\r
+ /* Get the checksums directly from packet information. */\r
+ /* In this case, no one of cheksum's cat get false value */\r
+ /* If hardware checksum failed or wasn't calculated, NDIS will recalculate it again */\r
NDIS_PER_PACKET_INFO_FROM_PACKET( *pp_packet, TcpIpChecksumPacketInfo ) = \r
- (PVOID) (uintn_t) (p_desc->ndis_csum.Value);\r
- } else {\r
- NDIS_TCP_IP_CHECKSUM_PACKET_INFO chksum;\r
+ (void*)(uintn_t)(p_desc->ndis_csum.Value);\r
+ break;\r
+ case CSUM_BYPASS:\r
/* Flag the checksums as having been calculated. */\r
- chksum.Value = 0;\r
chksum.Receive.NdisPacketTcpChecksumSucceeded = TRUE;\r
chksum.Receive.NdisPacketUdpChecksumSucceeded = TRUE;\r
chksum.Receive.NdisPacketIpChecksumSucceeded = TRUE;\r
NDIS_PER_PACKET_INFO_FROM_PACKET( *pp_packet, TcpIpChecksumPacketInfo ) =\r
(void*)(uintn_t)chksum.Value;\r
+ break;\r
+ default:\r
+ ASSERT(FALSE);\r
+ NDIS_PER_PACKET_INFO_FROM_PACKET( *pp_packet, TcpIpChecksumPacketInfo ) =\r
+ (void*)(uintn_t)chksum.Value;\r
}\r
ipoib_inc_recv_stat( p_port->p_adapter, type, p_desc->len );\r
\r