]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[MLX4, MTHCA, IPoIB] Reuse of receive options for checksum value.
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 10 Sep 2008 16:00:16 +0000 (16:00 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 10 Sep 2008 16:00:16 +0000 (16:00 +0000)
Signed off by: xalex@mellanox.co.il & alex.estrin@qlogic.com

git-svn-id: svn://openib.tc.cornell.edu/gen1@1583 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/hw/mlx4/kernel/bus/ib/cq.c
trunk/hw/mthca/kernel/mthca_cq.c
trunk/inc/iba/ib_types.h
trunk/ulp/ipoib/kernel/ipoib_port.c

index 4c504bc41261bab8370c5e6dbd34c45a023d5a34..579d4794897168c1fe8b138fe3e7fc14d4be1479 100644 (file)
@@ -338,10 +338,10 @@ static void mlx4_ib_handle_error_cqe(struct mlx4_err_cqe *cqe,
        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
@@ -361,7 +361,7 @@ static uint8_t mlx4_ib_ipoib_csum_ok(__be32 status, __be16 checksum) {
                                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
@@ -498,7 +498,7 @@ static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,
                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
index 558b21539505785d153a0fbfcfd0595a50e32e95..a04102995ae25665b13fe2d1adade4e5cf03e870 100644 (file)
@@ -445,10 +445,10 @@ static void handle_error_cqe(struct mthca_dev *dev, struct mthca_cq *cq,
        *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
@@ -461,7 +461,7 @@ static inline uint8_t mthca_ib_ipoib_csum_ok(u16 checksum, u8 ip_ok) {
                                                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
@@ -610,7 +610,7 @@ static inline int mthca_poll_one(struct mthca_dev *dev,
                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
@@ -992,3 +992,4 @@ void mthca_cleanup_cq_table(struct mthca_dev *dev)
 }\r
 \r
 \r
+\r
index 587b3d35b37daece974dde99ca8df730177a0b84..0f43b127e9b1d00aba51454ea40a6fea07a4890e 100644 (file)
@@ -10609,6 +10609,7 @@ typedef uint32_t                                        ib_recv_opt_t;
 #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
@@ -10665,7 +10666,6 @@ typedef struct _ib_wc
                        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
@@ -11395,3 +11395,5 @@ typedef struct _ib_cm_rdma_req
 \r
 \r
 \r
+\r
+\r
index f98981a8872d3154fc5af51932ff8f8cd04d57c9..1f0d4275779ca3a6d7f89d90755716626efc017f 100644 (file)
@@ -1978,7 +1978,7 @@ __recv_mgr_filter(
                        \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
@@ -6312,3 +6312,4 @@ static void __port_mcast_garbage_dpc(KDPC *p_gc_dpc,void *context,void *s_arg1,
        __port_do_mcast_garbage(p_port);\r
 }\r
 \r
+\r