*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->guid_block[idx].tbl, sizeof(ib_guid_info_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+ \r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->pkey_tbl[idx].tbl, sizeof(ib_pkey_table_info_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+\r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->sl_vl.tbl, sizeof(ib_slvl_table_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+\r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->vl_arb[idx].tbl, sizeof(ib_vl_arb_table_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+\r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
IN const ib_mad_t *p_mad_in,\r
OUT ib_mad_t *p_mad_out )\r
{\r
- if( p_mad_in->method != IB_MCLASS_SUBN_DIR &&\r
- p_mad_in->method != IB_MCLASS_SUBN_LID )\r
+ if( p_mad_in->mgmt_class!= IB_MCLASS_SUBN_DIR &&\r
+ p_mad_in->mgmt_class != IB_MCLASS_SUBN_LID )\r
{\r
return FALSE;\r
}\r
IN const uint8_t port_num,\r
IN const ib_mad_t *p_mad_out )\r
{\r
- if( p_mad_out->method != IB_MCLASS_SUBN_DIR &&\r
- p_mad_out->method != IB_MCLASS_SUBN_LID )\r
+ if( p_mad_out->mgmt_class != IB_MCLASS_SUBN_DIR &&\r
+ p_mad_out->mgmt_class != IB_MCLASS_SUBN_LID )\r
{\r
return;\r
}\r
status = IB_ERROR;\r
goto cleanup;\r
}\r
+ if( (p_mad_in->mgmt_class == IB_MCLASS_SUBN_DIR ||\r
+ p_mad_in->mgmt_class == IB_MCLASS_SUBN_LID) &&\r
+ p_mad_in->attr_id == IB_MAD_ATTR_PORT_INFO )\r
+ {\r
+ ib_port_info_t *p_pi_in, *p_pi_out;\r
+\r
+ if( p_mad_in->mgmt_class == IB_MCLASS_SUBN_DIR )\r
+ {\r
+ p_pi_in = (ib_port_info_t*)\r
+ ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in );\r
+ p_pi_out = (ib_port_info_t*)\r
+ ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_out );\r
+ }\r
+ else\r
+ {\r
+ p_pi_in = (ib_port_info_t*)(p_mad_in + 1);\r
+ p_pi_out = (ib_port_info_t*)(p_mad_out + 1);\r
+ }\r
+\r
+ /* Work around FW bug 33958 */\r
+ p_pi_out->subnet_timeout &= 0x7F;\r
+ if( p_mad_in->method == IB_MAD_METHOD_SET )\r
+ p_pi_out->subnet_timeout |= (p_pi_in->subnet_timeout & 0x80);\r
+ }\r
\r
mlnx_update_cache( h_ca, port_num, p_mad_out );\r
}\r
mcast_p->ib_qp_p = ib_qp_p;\r
mcast_p->mcast_lid = mcast_lid;\r
RtlCopyMemory(mcast_p->mcast_gid.raw, p_mcast_gid->raw, sizeof *p_mcast_gid);\r
- HCA_PRINT(TRACE_LEVEL_WARNING, HCA_DBG_SHIM, ("mcasth %p, qp_p %p, mlid %hx, mgid %I64x`%I64x\n", \r
+ HCA_PRINT(TRACE_LEVEL_INFORMATION, HCA_DBG_SHIM, ("mcasth %p, qp_p %p, mlid %hx, mgid %I64x`%I64x\n", \r
mcast_p, mcast_p->ib_qp_p, mcast_p->mcast_lid,\r
*(uint64_t*)&mcast_p->mcast_gid.raw[0],\r
*(uint64_t*)&mcast_p->mcast_gid.raw[8] ));\r
\r
ib_dev = mcast_p->ib_qp_p->device;\r
\r
- HCA_PRINT(TRACE_LEVEL_WARNING, HCA_DBG_SHIM,("mcasth %p, qp_p %p, mlid %hx, mgid %I64x`%I64x\n", \r
+ HCA_PRINT(TRACE_LEVEL_INFORMATION, HCA_DBG_SHIM,("mcasth %p, qp_p %p, mlid %hx, mgid %I64x`%I64x\n", \r
mcast_p, mcast_p->ib_qp_p, mcast_p->mcast_lid,\r
*(uint64_t*)&mcast_p->mcast_gid.raw[0],\r
*(uint64_t*)&mcast_p->mcast_gid.raw[8] ));\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->guid_block[idx].tbl, sizeof(ib_guid_info_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+ \r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->pkey_tbl[idx].tbl, sizeof(ib_pkey_table_info_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+ \r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->sl_vl.tbl, sizeof(ib_slvl_table_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+ \r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
*/\r
if( p_mad_in->method == IB_MAD_METHOD_SET )\r
{\r
- if( !cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
+ if( cl_memcmp( ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in ),\r
&p_cache->vl_arb[idx].tbl, sizeof(ib_vl_arb_table_t) ) )\r
{\r
/* The set is requesting a change. */\r
return FALSE;\r
}\r
}\r
- CL_ASSERT( p_mad_in->method == IB_MAD_METHOD_GET );\r
+ \r
\r
/* Setup the response mad. */\r
cl_memcpy( p_mad_out, p_mad_in, MAD_BLOCK_SIZE );\r
IN const ib_mad_t *p_mad_in,\r
OUT ib_mad_t *p_mad_out )\r
{\r
- if( p_mad_in->method != IB_MCLASS_SUBN_DIR &&\r
- p_mad_in->method != IB_MCLASS_SUBN_LID )\r
+ if( p_mad_in->mgmt_class!= IB_MCLASS_SUBN_DIR &&\r
+ p_mad_in->mgmt_class != IB_MCLASS_SUBN_LID )\r
{\r
return FALSE;\r
}\r
IN const uint8_t port_num,\r
IN const ib_mad_t *p_mad_out )\r
{\r
- if( p_mad_out->method != IB_MCLASS_SUBN_DIR &&\r
- p_mad_out->method != IB_MCLASS_SUBN_LID )\r
+ if( p_mad_out->mgmt_class != IB_MCLASS_SUBN_DIR &&\r
+ p_mad_out->mgmt_class != IB_MCLASS_SUBN_LID )\r
{\r
return;\r
}\r
status = IB_ERROR;\r
goto err_process_mad;\r
}\r
+ \r
+ if( (p_mad_in->mgmt_class == IB_MCLASS_SUBN_DIR ||\r
+ p_mad_in->mgmt_class == IB_MCLASS_SUBN_LID) &&\r
+ p_mad_in->attr_id == IB_MAD_ATTR_PORT_INFO )\r
+ {\r
+ ib_port_info_t *p_pi_in, *p_pi_out;\r
+\r
+ if( p_mad_in->mgmt_class == IB_MCLASS_SUBN_DIR )\r
+ {\r
+ p_pi_in = (ib_port_info_t*)\r
+ ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_in );\r
+ p_pi_out = (ib_port_info_t*)\r
+ ib_smp_get_payload_ptr( (ib_smp_t*)p_mad_out );\r
+ }\r
+ else\r
+ {\r
+ p_pi_in = (ib_port_info_t*)(p_mad_in + 1);\r
+ p_pi_out = (ib_port_info_t*)(p_mad_out + 1);\r
+ }\r
+\r
+ /* Work around FW bug 33958 */\r
+ p_pi_out->subnet_timeout &= 0x7F;\r
+ if( p_mad_in->method == IB_MAD_METHOD_SET )\r
+ p_pi_out->subnet_timeout |= (p_pi_in->subnet_timeout & 0x80);\r
+ }\r
+\r
mlnx_update_cache( h_ca, port_num, p_mad_out );\r
}\r
\r
spin_lock_irqsave(&dev->sm_lock, &lh);
wr.dgrm.ud.h_av = (ib_av_handle_t)dev->sm_ah[port_num - 1];
if (wr.dgrm.ud.h_av) {
- HCA_PRINT( TRACE_LEVEL_ERROR ,HCA_DBG_LOW ,(" forward_trap: ib_post_send_mad not ported \n" ));
+ HCA_PRINT( TRACE_LEVEL_ERROR ,HCA_DBG_MAD ,(" forward_trap: ib_post_send_mad not ported \n" ));
ret = -EINVAL;
}
else
u8 status;
u16 slid = in_wc ? in_wc->recv.ud.remote_lid : cl_ntoh16(IB_LID_PERMISSIVE);
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW,("mthca_process_mad: \n\tin: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x\n",
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: \n\tin: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x\n",
(u32)in_mad->mad_hdr.mgmt_class, (u32)in_mad->mad_hdr.method,
(u32)in_mad->mad_hdr.attr_id, in_mad->mad_hdr.attr_mod,
(u32)in_mad->mad_hdr.class_specific, in_mad->mad_hdr.tid ));
if (in_mad->mad_hdr.method == IB_MGMT_METHOD_TRAP &&
slid == 0) {
forward_trap(to_mdev(ibdev), port_num, in_mad);
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW ,("mthca_process_mad: Not sent, but locally forwarded\n"));
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: Not sent, but locally forwarded\n"));
return IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_CONSUMED;
}
if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO ||
((in_mad->mad_hdr.attr_id & IB_SMP_ATTR_VENDOR_MASK) ==
IB_SMP_ATTR_VENDOR_MASK)) {
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW ,("mthca_process_mad: Skip SMInfo queries or vendor-specific MADs. Nothing done !\n"));
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: Skip SMInfo queries or vendor-specific MADs. Nothing done !\n"));
return IB_MAD_RESULT_SUCCESS;
}
}
if (in_mad->mad_hdr.method != IB_MGMT_METHOD_GET &&
in_mad->mad_hdr.method != IB_MGMT_METHOD_SET) {
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW ,("mthca_process_mad: Skip some management methods. Nothing done !\n"));
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: Skip some management methods. Nothing done !\n"));
return IB_MAD_RESULT_SUCCESS;
}
}
else {
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW ,("mthca_process_mad: Skip IB_MGMT_CLASS_PERF_MGMT et al. Nothing done !\n"));
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: Skip IB_MGMT_CLASS_PERF_MGMT et al. Nothing done !\n"));
return IB_MAD_RESULT_SUCCESS;
}
}
port_num, in_wc, in_grh, in_mad, out_mad,
&status);
if (err) {
- HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_LOW ,("MAD_IFC failed\n"));
+ HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_MAD ,("MAD_IFC failed\n"));
return IB_MAD_RESULT_FAILURE;
}
if (status == MTHCA_CMD_STAT_BAD_PKT)
return IB_MAD_RESULT_SUCCESS;
if (status) {
- HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_LOW ,("mthca_process_mad: MAD_IFC returned status %02x\n", status));
+ HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_MAD ,("mthca_process_mad: MAD_IFC returned status %02x\n", status));
return IB_MAD_RESULT_FAILURE;
}
if (!out_mad->mad_hdr.status)
smp_snoop(ibdev, port_num, in_mad);
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_LOW,("mthca_process_mad: \n\tout: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x, Status %x\n",
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD,("mthca_process_mad: \n\tout: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x, Status %x\n",
(u32)in_mad->mad_hdr.mgmt_class, (u32)in_mad->mad_hdr.method,
(u32)in_mad->mad_hdr.attr_id, in_mad->mad_hdr.attr_mod,
(u32)in_mad->mad_hdr.class_specific, in_mad->mad_hdr.tid,