[IPoIB NDIS 6.0 CM] (mlnx 5191)
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 2 Dec 2009 09:41:13 +0000 (09:41 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 2 Dec 2009 09:41:13 +0000 (09:41 +0000)
Fixing 2 bugs:
1. Bug caused by NDIS 6.5 offloadmisc WHQL test: it assumes that the driver version is 6.2 and sends structs with bigger size
2. Internal bug at offload handling.

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

ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp

index a266793..7ec6a5d 100644 (file)
@@ -1306,7 +1306,7 @@ OffloadConfig(
        NdisZeroMemory(p_offload, NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_1);\r
 \r
        p_offload->Header.Type = NDIS_OBJECT_TYPE_OFFLOAD;\r
        NdisZeroMemory(p_offload, NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_1);\r
 \r
        p_offload->Header.Type = NDIS_OBJECT_TYPE_OFFLOAD;\r
-       p_offload->Header.Revision = NDIS_OFFLOAD_REVISION_1; // TODO: NDIS6.0. do we need to support revision 2? UH 17-May-2008\r
+       p_offload->Header.Revision = NDIS_OFFLOAD_REVISION_1; // Should be Revision 1, otherwise NDIS will not work at Win2008 R1\r
        p_offload->Header.Size = NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_1;\r
 \r
        p_offload->Checksum.IPv4Transmit.Encapsulation = ulEncapsulation;\r
        p_offload->Header.Size = NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_1;\r
 \r
        p_offload->Checksum.IPv4Transmit.Encapsulation = ulEncapsulation;\r
@@ -1601,6 +1601,9 @@ IsValidOffloadConfig(ipoib_adapter_t *p_adapter, PNDIS_OFFLOAD_PARAMETERS pOfflo
         if(CheckSumConfig[i] != NDIS_OFFLOAD_PARAMETERS_NO_CHANGE)\r
         {\r
                switch (CheckSumConfig[i]) {\r
         if(CheckSumConfig[i] != NDIS_OFFLOAD_PARAMETERS_NO_CHANGE)\r
         {\r
                switch (CheckSumConfig[i]) {\r
+                               case NDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED:\r
+                                       bRet = TRUE;\r
+                                       break;\r
                                //return FALSE in any case when NDIS tries to set unsupported value\r
                                case NDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED:\r
                                        bRet = (BOOLEAN) p_adapter->offload_cap.send_chksum_offload;\r
                                //return FALSE in any case when NDIS tries to set unsupported value\r
                                case NDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED:\r
                                        bRet = (BOOLEAN) p_adapter->offload_cap.send_chksum_offload;\r
@@ -1684,10 +1687,10 @@ SetOffloadParameters(
     NDIS_STATUS Status = NDIS_STATUS_SUCCESS;\r
     bool StatusIndicationFlag = FALSE;\r
  \r
     NDIS_STATUS Status = NDIS_STATUS_SUCCESS;\r
     bool StatusIndicationFlag = FALSE;\r
  \r
-    if (len != NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_1)\r
+    if (len != NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2)\r
     {\r
         ASSERT(FALSE);\r
     {\r
         ASSERT(FALSE);\r
-        IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, ("Buffer is too small. offloading task requirs %d but the buffer size is: %d \n", NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_1, len));\r
+        IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, ("Buffer is too small. offloading task requirs %d but the buffer size is: %d \n", NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2, len));\r
         Status =  NDIS_STATUS_INVALID_LENGTH;\r
         goto Exit;\r
     }\r
         Status =  NDIS_STATUS_INVALID_LENGTH;\r
         goto Exit;\r
     }\r
@@ -1698,8 +1701,8 @@ SetOffloadParameters(
     pOffloadHeader = &(pOffloadParam->Header);\r
     \r
     if((pOffloadHeader->Type != NDIS_OBJECT_TYPE_DEFAULT) ||\r
     pOffloadHeader = &(pOffloadParam->Header);\r
     \r
     if((pOffloadHeader->Type != NDIS_OBJECT_TYPE_DEFAULT) ||\r
-       (pOffloadHeader->Revision != NDIS_OFFLOAD_PARAMETERS_REVISION_1) ||\r
-       (pOffloadHeader->Size != NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_1))\r
+       (pOffloadHeader->Revision != NDIS_OFFLOAD_PARAMETERS_REVISION_2) ||\r
+       (pOffloadHeader->Size != NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2))\r
     {       \r
         ASSERT(FALSE);\r
         IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, ("Set offloading task Illegal header\n"));\r
     {       \r
         ASSERT(FALSE);\r
         IPOIB_PRINT(TRACE_LEVEL_ERROR, IPOIB_DBG_OID, ("Set offloading task Illegal header\n"));\r