]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[ipoib cm] offload chksum flags handling.
authoraestrin <aestrin@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 10 Feb 2009 12:38:11 +0000 (12:38 +0000)
committeraestrin <aestrin@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 10 Feb 2009 12:38:11 +0000 (12:38 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1@1937 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/ipoib_cm/kernel/ipoib_endpoint.c
branches/ipoib_cm/kernel/ipoib_port.c

index 339b1e085ed276888908e4d409a1197d9062dfdf..50d4c50543cf7ef0a7b2e4db8a4fe4156a6aaa85 100644 (file)
@@ -791,6 +791,7 @@ endpt_cm_recv_mgr_build_pkt_array(
        ipoib_cm_desc_t         *p_desc;\r
        uint32_t                                i = 0;\r
        NDIS_PACKET                             *p_packet;\r
+       NDIS_TCP_IP_CHECKSUM_PACKET_INFO        chksum;\r
 \r
        IPOIB_ENTER( IPOIB_DBG_RECV );\r
        UNUSED_PARAM( p_endpt );\r
@@ -813,12 +814,31 @@ endpt_cm_recv_mgr_build_pkt_array(
                        p_port->cm_recv_mgr.depth--;\r
                        continue;\r
                }\r
-               p_desc->ndis_csum.Value = 0;\r
-               p_desc->ndis_csum.Receive.NdisPacketTcpChecksumSucceeded = TRUE;\r
-               p_desc->ndis_csum.Receive.NdisPacketUdpChecksumSucceeded = TRUE;\r
-               p_desc->ndis_csum.Receive.NdisPacketIpChecksumSucceeded = TRUE;\r
-               NDIS_PER_PACKET_INFO_FROM_PACKET( p_packet, TcpIpChecksumPacketInfo ) =\r
-                                                                                                       (void*)(uintn_t)p_desc->ndis_csum.Value;\r
+               chksum.Value = 0;\r
+               switch( p_port->p_adapter->params.recv_chksum_offload )\r
+               {\r
+               default:\r
+                       CL_ASSERT( FALSE );\r
+               case CSUM_DISABLED:\r
+                       NDIS_PER_PACKET_INFO_FROM_PACKET( p_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( p_packet, TcpIpChecksumPacketInfo ) = \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.Receive.NdisPacketTcpChecksumSucceeded = TRUE;\r
+                       chksum.Receive.NdisPacketUdpChecksumSucceeded = TRUE;\r
+                       chksum.Receive.NdisPacketIpChecksumSucceeded = TRUE;\r
+                       NDIS_PER_PACKET_INFO_FROM_PACKET( p_packet, TcpIpChecksumPacketInfo ) =\r
+                               (void*)(uintn_t)chksum.Value;\r
+                       break;\r
+               }\r
 \r
                NDIS_SET_PACKET_STATUS( p_packet, NDIS_STATUS_SUCCESS );\r
                p_port->cm_recv_mgr.recv_pkt_array[i] = p_packet;\r
index e5895ca9643ede592f2ea40fa67ed8a7a928a9ba..d65797110034a4bb8bcaa152c0d7d90e3f0a364c 100644 (file)
@@ -1082,16 +1082,6 @@ __ib_mgr_init(
                        NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter,\r
                                EVENT_IPOIB_CONNECTED_MODE_ERR, 1, 0xbadc0de2 );\r
                }\r
-               else \r
-               {\r
-                       /* now we can adjust csum capabilities */\r
-               if (p_port->p_adapter->params.send_chksum_offload )\r
-                       p_port->p_adapter->params.send_chksum_offload = CSUM_DISABLED;\r
-\r
-               if (p_port->p_adapter->params.recv_chksum_offload == CSUM_ENABLED)\r
-                       p_port->p_adapter->params.recv_chksum_offload = CSUM_BYPASS;\r
-               }\r
-\r
        }\r
        IPOIB_EXIT( IPOIB_DBG_INIT );\r
        return IB_SUCCESS;\r