updated to trunk rev 1341
authoraestrin <aestrin@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 4 Sep 2008 22:35:14 +0000 (22:35 +0000)
committeraestrin <aestrin@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 4 Sep 2008 22:35:14 +0000 (22:35 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1548 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

ulp/ipoib/kernel/ipoib_driver.h
ulp/ipoib/kernel/ipoib_xfr_mgr.h

index 32d769a..bb91294 100644 (file)
  */\r
 #define MAX_BUNDLE_ID_LENGTH   32\r
 \r
-/* MLX4 supports 4K MTU */\r
-#define IB_MTU                 4096\r
+\r
+#define IB_MTU                 2048\r
 /*\r
  * Header length as defined by IPoIB spec:\r
  * http://www.ietf.org/internet-drafts/draft-ietf-ipoib-ip-over-infiniband-04.txt\r
  */\r
  \r
-#define MAX_PAYLOAD_MTU                (IB_MTU - sizeof(ipoib_hdr_t))\r
-\r
+#define MAX_UD_PAYLOAD_MTU             (IB_MTU - sizeof(ipoib_hdr_t))\r
+#define MAX_CM_PAYLOAD_MTU             (65520)\r
 /*\r
  * Only the protocol type is sent as part of the UD payload\r
  * since the rest of the Ethernet header is encapsulated in the\r
  * various IB headers.  We report out buffer space as if we\r
  * transmit the ethernet headers.\r
  */\r
-#define MAX_XFER_BLOCK_SIZE            (sizeof(eth_hdr_t) + MAX_PAYLOAD_MTU)\r
+#define MAX_XFER_BLOCK_SIZE            (sizeof(eth_hdr_t) + MAX_UD_PAYLOAD_MTU)\r
+#define DATA_OFFSET                            (sizeof(eth_hdr_t) - sizeof(ipoib_hdr_t))\r
+\r
+//#define IPOIB_CM_FLAG_RC             (0x01) // RC flag\r
+//#define IPOIB_CM_FLAG_SVCID          (0x01) // IETF bit\r
+#define IPOIB_CM_FLAG_RC               (0x80) //OFED set RC flag this way\r
+#define IPOIB_CM_FLAG_SVCID            (0x10) // OFED set IETF bit this way ( open OFED PR 1121 )\r
+\r
+/* Max send data segment list size. Segments are PAGE_SIZE each */\r
+/* + 2 to roundup( since fisrt and last segments could be partial pages )\r
+   + 1 reserved for ipoib header, add another 2 for IP and TCP headers */\r
+#define MAX_SEND_SGE   (( MAX_CM_PAYLOAD_MTU >> PAGE_SHIFT ) + 5)\r
+\r
+/* Amount of physical memory to register. */\r
+#define MEM_REG_SIZE   0xFFFFFFFFFFFFFFFF\r
 \r
+/* Number of work completions to chain for send and receive polling. */\r
+#define MAX_SEND_WC            8\r
+#define MAX_RECV_WC            16\r
 \r
 typedef struct _ipoib_globals\r
 {\r
index 96c1373..f53e345 100644 (file)
@@ -81,6 +81,9 @@ typedef struct _ipoib_hw_addr
 *********/\r
 #include <complib/cl_packoff.h>\r
 \r
+/* TODO: move this macro to  inc\kernel\ip_packet.h*/\r
+#define ETH_IS_UNICAST(addr) \\r
+               !(BOOLEAN)(((PUCHAR)(addr))[0] & ((UCHAR)0x01))\r
 \r
 \r
 #ifdef __cplusplus\r
@@ -97,7 +100,7 @@ static inline uint8_t
 ipoib_addr_get_flags(\r
        IN              const   ipoib_hw_addr_t* const          p_addr )\r
 {\r
-       return (uint8_t)(cl_ntoh32( p_addr->flags_qpn ) >> 24);\r
+       return (uint8_t)( p_addr->flags_qpn & 0x000000ff);\r
 }\r
 \r
 static inline void\r
@@ -105,15 +108,15 @@ ipoib_addr_set_flags(
        IN                              ipoib_hw_addr_t* const          p_addr,\r
        IN              const   uint8_t                                         flags )\r
 {\r
-       p_addr->flags_qpn &= cl_ntoh32( 0xFFFFFF00 );\r
-       p_addr->flags_qpn |= cl_ntoh32( flags );\r
+       p_addr->flags_qpn &= ( 0xFFFFFF00 );\r
+       p_addr->flags_qpn |= ( flags );\r
 }\r
 \r
 static inline net32_t\r
 ipoib_addr_get_qpn(\r
        IN              const   ipoib_hw_addr_t* const          p_addr )\r
 {\r
-       return cl_ntoh32( cl_ntoh32( p_addr->flags_qpn ) >> 8 );\r
+       return( ( p_addr->flags_qpn ) & 0xffffff00 );\r
 }\r
 \r
 static inline void\r
@@ -121,10 +124,19 @@ ipoib_addr_set_qpn(
        IN                              ipoib_hw_addr_t* const          p_addr,\r
        IN              const   net32_t                                         qpn )\r
 {\r
-       p_addr->flags_qpn = cl_ntoh32( (cl_ntoh32(\r
-               p_addr->flags_qpn ) & 0x000000FF ) | (cl_ntoh32( qpn ) << 8) );\r
+       p_addr->flags_qpn &= ( 0x000000FF );\r
+       p_addr->flags_qpn |= qpn ;\r
 }\r
 \r
+static inline void\r
+ipoib_addr_set_sid(\r
+       IN      net64_t* const          p_sid,\r
+       IN      const   net32_t         qpn )\r
+{\r
+       *p_sid = qpn;\r
+       *p_sid <<= 32;\r
+       *p_sid |= IPOIB_CM_FLAG_SVCID;\r
+}\r
 \r
 /****f* IPOIB/ipoib_mac_from_sst_guid\r
 * NAME\r
@@ -207,22 +219,19 @@ ipoib_mac_from_mlx_guid(
 {\r
        const uint8_t   *p_guid = (const uint8_t*)&port_guid;\r
        uint32_t                low24;\r
-       net16_t                 guid_middle;\r
 \r
        /* Port guid is in network byte order.  OUI is in lower 3 bytes. */\r
        ASSERT( p_guid[0] == 0x00 && p_guid[1] == 0x02 && p_guid[2] == 0xc9 );\r
 \r
-       guid_middle = (net16_t)((port_guid & CL_HTON64( 0x000000ffff000000 )) >>24);\r
-\r
-       if (guid_middle == 2) {\r
-                       p_mac_addr->addr[0] = 0;\r
-       } else if (guid_middle == 3) {\r
-                       p_mac_addr->addr[0] = 2;\r
-       } else {\r
+       if( (port_guid & CL_HTON64( 0x000000ffff000000 )) !=\r
+               CL_HTON64(0x0000000200000000))\r
+       {\r
                return IB_INVALID_GUID;\r
        }\r
+\r
        low24 = ((uint32_t)cl_ntoh64( port_guid ) & 0x00FFFFFF);\r
 \r
+       p_mac_addr->addr[0] = p_guid[0];\r
        p_mac_addr->addr[1] = p_guid[1];\r
        p_mac_addr->addr[2] = p_guid[2];\r
        p_mac_addr->addr[3] = (uint8_t)(low24 >> 16);\r