[TOOLS] bugfix in work with ConnectX HCAs
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 29 Apr 2008 15:40:55 +0000 (15:40 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 29 Apr 2008 15:40:55 +0000 (15:40 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1086 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

tools/mtcr/user/mtcr.c

index 4b2eeea..dd808f4 100644 (file)
@@ -235,8 +235,7 @@ int create_mst_names_by_dev_id(USHORT dev_id, int dev_ix, int mask, char *name,
     }\r
     \r
     // names generation\r
-    for (j=0; j<MASKS_SIZE; j++) {\r
-\r
+    for (j=0; j<MASKS_SIZE; j++) {\r\r
         if ((db[i].mask & mask) & dmasks[j]) {\r
             char l_name[MAX_DEV_NAME]; int len; \r
             // create one name\r
@@ -293,7 +292,7 @@ int parse_mst_name(const char *mst_name,
         sscanf( mst_name, TAVOR_TYPE_DEVICE_NAME_FMT, dev_id, suffix, dev_ix );\r
         // step over the suffix. ptr will be at the card's number\r
         if ((ptr=strstr( suffix, "conf"))) {   /* CONF device */\r
-            ptr += 7;\r
+            ptr += 4;\r
             *mst_dev_type = MST_PCICONF;\r
         } else if ((ptr=strstr( suffix, "_cr")))  {\r
             ptr += 3;\r
@@ -921,11 +920,22 @@ MTCR_API int mread4(mfile *mf, unsigned int offset, u_int32_t *value)
             return i2c_master_read_cr(mf, value, offset, 4);\r
 #endif\r
 \r
-        if (mf->dtype == MST_TAVOR)\r
-            *value = __be32_to_cpu(*((volatile unsigned int *)((char *)mf->ptr + offset)));\r
-        else\r
-            *value = *((volatile unsigned int *)((char *)mf->ptr + offset));\r
-        break;\r
+               if (mf->dtype == MST_TAVOR) {\r
+       \r
+                       if (mfi->hermon_wa_slot && mfi->hermon_wa_last_op_write) {\r
+                               if (hermon_wa_write_confirm_sem(mf, offset) == 0)\r
+                                       return -1;\r
+                               mfi->hermon_wa_last_op_write = 0;\r
+                       }\r
+       \r
+                       *value = __be32_to_cpu(*((volatile unsigned int *)((char *)mf->ptr + offset)));\r
+               }\r
+               else\r
+                       *value = *((volatile unsigned int *)((char *)mf->ptr + offset));\r
+               DPRINT1(("MTCR:mread4: Tried to access value at offset %x and base addr %p\n",\r
+                       offset, mf->ptr));\r
+\r
+       break;\r
 \r
     case MST_PCICONF:\r
         {\r
@@ -1008,10 +1018,15 @@ MTCR_API int mwrite4(mfile *mf, unsigned int offset, u_int32_t value)
             return i2c_master_write_cr(mf, value, offset, 4);\r
 #endif\r
         \r
-        if (mf->dtype == MST_TAVOR)\r
-            *((volatile unsigned int *)((char *)mf->ptr + offset)) = __cpu_to_be32(value);\r
-        else\r
-            *((volatile unsigned int *)((char *)mf->ptr + offset)) = value;\r
+               // write the value\r
+               if (mf->dtype == MST_TAVOR) {\r
+                       volatile unsigned int *ptr = (volatile unsigned int *)((char *)mf->ptr + offset);\r
+                       \r
+                       *ptr = __cpu_to_be32(value);\r
+                       mfi->hermon_wa_last_op_write = 1;\r
+               }\r
+               else\r
+                       *((volatile unsigned int *)((char *)mf->ptr + offset)) = value;\r
         break;\r
         \r
     case MST_PCICONF:\r
@@ -1205,4 +1220,3 @@ unsigned char mset_i2c_slave(mfile *mf, unsigned char new_i2c_slave)
     return ret;\r
 }\r
 \r
-\r