Lines Matching refs:smp
40 static int reply(struct ib_smp *smp)
46 smp->method = IB_MGMT_METHOD_GET_RESP;
47 if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
48 smp->status |= IB_SMP_DIRECTION;
52 static int reply_failure(struct ib_smp *smp)
58 smp->method = IB_MGMT_METHOD_GET_RESP;
59 if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
60 smp->status |= IB_SMP_DIRECTION;
68 struct ib_smp *smp;
92 smp = send_buf->mad;
93 smp->base_version = IB_MGMT_BASE_VERSION;
94 smp->mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED;
95 smp->class_version = 1;
96 smp->method = IB_MGMT_METHOD_TRAP;
98 smp->tid = cpu_to_be64(ibp->rvp.tid);
99 smp->attr_id = IB_SMP_ATTR_NOTICE;
100 /* o14-1: smp->mkey = 0; */
101 memcpy(smp->data, data, len);
167 static void qib_bad_mkey(struct qib_ibport *ibp, struct ib_smp *smp)
180 data.details.ntc_256.method = smp->method;
181 data.details.ntc_256.attr_id = smp->attr_id;
182 data.details.ntc_256.attr_mod = smp->attr_mod;
183 data.details.ntc_256.mkey = smp->mkey;
184 if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) {
187 data.details.ntc_256.dr_slid = smp->dr_slid;
189 hop_cnt = smp->hop_cnt;
196 memcpy(data.details.ntc_256.dr_rtn_path, smp->return_path,
267 static int subn_get_nodedescription(struct ib_smp *smp,
270 if (smp->attr_mod)
271 smp->status |= IB_SMP_INVALID_FIELD;
273 memcpy(smp->data, ibdev->node_desc, sizeof(smp->data));
275 return reply(smp);
278 static int subn_get_nodeinfo(struct ib_smp *smp, struct ib_device *ibdev,
281 struct ib_node_info *nip = (struct ib_node_info *)&smp->data;
287 if (smp->attr_mod || pidx >= dd->num_pports ||
289 smp->status |= IB_SMP_INVALID_FIELD;
310 return reply(smp);
313 static int subn_get_guidinfo(struct ib_smp *smp, struct ib_device *ibdev,
317 u32 startgx = 8 * be32_to_cpu(smp->attr_mod);
318 __be64 *p = (__be64 *) smp->data;
323 memset(smp->data, 0, sizeof(smp->data));
333 smp->status |= IB_SMP_INVALID_FIELD;
341 smp->status |= IB_SMP_INVALID_FIELD;
343 return reply(smp);
406 static int check_mkey(struct qib_ibport *ibp, struct ib_smp *smp, int mad_flags)
420 ibp->rvp.mkey == smp->mkey)
425 (smp->method == IB_MGMT_METHOD_GET ||
426 smp->method == IB_MGMT_METHOD_SET ||
427 smp->method == IB_MGMT_METHOD_TRAP_REPRESS))
431 switch (smp->method) {
446 qib_bad_mkey(ibp, smp);
454 static int subn_get_portinfo(struct ib_smp *smp, struct ib_device *ibdev,
460 struct ib_port_info *pip = (struct ib_port_info *)smp->data;
464 u32 port_num = be32_to_cpu(smp->attr_mod);
470 smp->status |= IB_SMP_INVALID_FIELD;
471 ret = reply(smp);
476 ret = check_mkey(ibp, smp, 0);
490 memset(smp->data, 0, sizeof(smp->data));
493 if (!(smp->method == IB_MGMT_METHOD_GET &&
494 ibp->rvp.mkey != smp->mkey &&
569 ret = reply(smp);
596 static int subn_get_pkeytable(struct ib_smp *smp, struct ib_device *ibdev,
599 u32 startpx = 32 * (be32_to_cpu(smp->attr_mod) & 0xffff);
600 u16 *p = (u16 *) smp->data;
601 __be16 *q = (__be16 *) smp->data;
605 memset(smp->data, 0, sizeof(smp->data));
615 smp->status |= IB_SMP_INVALID_FIELD;
617 return reply(smp);
620 static int subn_set_guidinfo(struct ib_smp *smp, struct ib_device *ibdev,
624 u32 startgx = 8 * be32_to_cpu(smp->attr_mod);
625 __be64 *p = (__be64 *) smp->data;
639 smp->status |= IB_SMP_INVALID_FIELD;
642 return subn_get_guidinfo(smp, ibdev, port);
647 * @smp: the incoming SM packet
653 static int subn_set_portinfo(struct ib_smp *smp, struct ib_device *ibdev,
656 struct ib_port_info *pip = (struct ib_port_info *)smp->data;
671 u32 port_num = be32_to_cpu(smp->attr_mod);
697 smp->status |= IB_SMP_INVALID_FIELD;
712 smp->status |= IB_SMP_INVALID_FIELD;
737 smp->status |= IB_SMP_INVALID_FIELD;
753 smp->status |= IB_SMP_INVALID_FIELD;
771 smp->status |= IB_SMP_INVALID_FIELD;
781 smp->status |= IB_SMP_INVALID_FIELD;
789 smp->status |= IB_SMP_INVALID_FIELD;
805 smp->status |= IB_SMP_INVALID_FIELD;
808 smp->status |= IB_SMP_INVALID_FIELD;
821 smp->status |= IB_SMP_INVALID_FIELD;
842 smp->status |= IB_SMP_INVALID_FIELD;
853 if (lstate == QIB_IB_LINKDOWN_DISABLE && smp->hop_cnt) {
866 smp->status |= IB_SMP_INVALID_FIELD;
880 smp->status |= IB_SMP_INVALID_FIELD;
882 ret = subn_get_portinfo(smp, ibdev, port);
1039 static int subn_set_pkeytable(struct ib_smp *smp, struct ib_device *ibdev,
1042 u32 startpx = 32 * (be32_to_cpu(smp->attr_mod) & 0xffff);
1043 __be16 *p = (__be16 *) smp->data;
1044 u16 *q = (u16 *) smp->data;
1052 smp->status |= IB_SMP_INVALID_FIELD;
1054 return subn_get_pkeytable(smp, ibdev, port);
1057 static int subn_get_sl_to_vl(struct ib_smp *smp, struct ib_device *ibdev,
1061 u8 *p = (u8 *) smp->data;
1064 memset(smp->data, 0, sizeof(smp->data));
1067 smp->status |= IB_SMP_UNSUP_METHOD;
1072 return reply(smp);
1075 static int subn_set_sl_to_vl(struct ib_smp *smp, struct ib_device *ibdev,
1079 u8 *p = (u8 *) smp->data;
1083 smp->status |= IB_SMP_UNSUP_METHOD;
1084 return reply(smp);
1094 return subn_get_sl_to_vl(smp, ibdev, port);
1097 static int subn_get_vl_arb(struct ib_smp *smp, struct ib_device *ibdev,
1100 unsigned which = be32_to_cpu(smp->attr_mod) >> 16;
1103 memset(smp->data, 0, sizeof(smp->data));
1106 smp->status |= IB_SMP_UNSUP_METHOD;
1109 smp->data);
1112 smp->data);
1114 smp->status |= IB_SMP_INVALID_FIELD;
1116 return reply(smp);
1119 static int subn_set_vl_arb(struct ib_smp *smp, struct ib_device *ibdev,
1122 unsigned which = be32_to_cpu(smp->attr_mod) >> 16;
1126 smp->status |= IB_SMP_UNSUP_METHOD;
1129 smp->data);
1132 smp->data);
1134 smp->status |= IB_SMP_INVALID_FIELD;
1136 return subn_get_vl_arb(smp, ibdev, port);
1139 static int subn_trap_repress(struct ib_smp *smp, struct ib_device *ibdev,
1864 struct ib_smp *smp = (struct ib_smp *)out_mad;
1870 if (smp->class_version != 1) {
1871 smp->status |= IB_SMP_UNSUP_VERSION;
1872 ret = reply(smp);
1876 ret = check_mkey(ibp, smp, mad_flags);
1878 u32 port_num = be32_to_cpu(smp->attr_mod);
1888 (smp->method == IB_MGMT_METHOD_GET ||
1889 smp->method == IB_MGMT_METHOD_SET) &&
1892 (void) check_mkey(to_iport(ibdev, port_num), smp, 0);
1897 switch (smp->method) {
1899 switch (smp->attr_id) {
1901 ret = subn_get_nodedescription(smp, ibdev);
1904 ret = subn_get_nodeinfo(smp, ibdev, port);
1907 ret = subn_get_guidinfo(smp, ibdev, port);
1910 ret = subn_get_portinfo(smp, ibdev, port);
1913 ret = subn_get_pkeytable(smp, ibdev, port);
1916 ret = subn_get_sl_to_vl(smp, ibdev, port);
1919 ret = subn_get_vl_arb(smp, ibdev, port);
1933 smp->status |= IB_SMP_UNSUP_METH_ATTR;
1934 ret = reply(smp);
1939 switch (smp->attr_id) {
1941 ret = subn_set_guidinfo(smp, ibdev, port);
1944 ret = subn_set_portinfo(smp, ibdev, port);
1947 ret = subn_set_pkeytable(smp, ibdev, port);
1950 ret = subn_set_sl_to_vl(smp, ibdev, port);
1953 ret = subn_set_vl_arb(smp, ibdev, port);
1967 smp->status |= IB_SMP_UNSUP_METH_ATTR;
1968 ret = reply(smp);
1973 if (smp->attr_id == IB_SMP_ATTR_NOTICE)
1974 ret = subn_trap_repress(smp, ibdev, port);
1976 smp->status |= IB_SMP_UNSUP_METH_ATTR;
1977 ret = reply(smp);
1994 if (ib_get_smp_direction(smp) &&
1995 smp->attr_id == QIB_VENDOR_IPG) {
1997 smp->data[0]);
2004 smp->status |= IB_SMP_UNSUP_METHOD;
2005 ret = reply(smp);