}\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
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
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
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
return ret;\r
}\r
\r
-\r