Lines Matching refs:smp

46 static int reply(struct ib_smp *smp)  in reply()  argument
52 smp->method = IB_MGMT_METHOD_GET_RESP; in reply()
53 if (smp->mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) in reply()
54 smp->status |= IB_SMP_DIRECTION; in reply()
58 static int recv_subn_get_nodedescription(struct ib_smp *smp, in recv_subn_get_nodedescription() argument
61 if (smp->attr_mod) in recv_subn_get_nodedescription()
62 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_get_nodedescription()
64 memcpy(smp->data, ibdev->node_desc, sizeof(smp->data)); in recv_subn_get_nodedescription()
66 return reply(smp); in recv_subn_get_nodedescription()
84 static int recv_subn_get_nodeinfo(struct ib_smp *smp, in recv_subn_get_nodeinfo() argument
87 struct nodeinfo *nip = (struct nodeinfo *)&smp->data; in recv_subn_get_nodeinfo()
92 if (smp->attr_mod || (dd->ipath_guid == 0)) in recv_subn_get_nodeinfo()
93 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_get_nodeinfo()
119 return reply(smp); in recv_subn_get_nodeinfo()
122 static int recv_subn_get_guidinfo(struct ib_smp *smp, in recv_subn_get_guidinfo() argument
125 u32 startgx = 8 * be32_to_cpu(smp->attr_mod); in recv_subn_get_guidinfo()
126 __be64 *p = (__be64 *) smp->data; in recv_subn_get_guidinfo()
130 memset(smp->data, 0, sizeof(smp->data)); in recv_subn_get_guidinfo()
140 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_get_guidinfo()
145 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_get_guidinfo()
147 return reply(smp); in recv_subn_get_guidinfo()
235 static int recv_subn_get_portinfo(struct ib_smp *smp, in recv_subn_get_portinfo() argument
240 struct ib_port_info *pip = (struct ib_port_info *)smp->data; in recv_subn_get_portinfo()
246 if (be32_to_cpu(smp->attr_mod) > ibdev->phys_port_cnt) { in recv_subn_get_portinfo()
247 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_get_portinfo()
248 ret = reply(smp); in recv_subn_get_portinfo()
256 memset(smp->data, 0, sizeof(smp->data)); in recv_subn_get_portinfo()
259 if (smp->method == IB_MGMT_METHOD_SET || dev->mkey == smp->mkey || in recv_subn_get_portinfo()
339 ret = reply(smp); in recv_subn_get_portinfo()
360 static int recv_subn_get_pkeytable(struct ib_smp *smp, in recv_subn_get_pkeytable() argument
363 u32 startpx = 32 * (be32_to_cpu(smp->attr_mod) & 0xffff); in recv_subn_get_pkeytable()
364 u16 *p = (u16 *) smp->data; in recv_subn_get_pkeytable()
365 __be16 *q = (__be16 *) smp->data; in recv_subn_get_pkeytable()
369 memset(smp->data, 0, sizeof(smp->data)); in recv_subn_get_pkeytable()
379 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_get_pkeytable()
381 return reply(smp); in recv_subn_get_pkeytable()
384 static int recv_subn_set_guidinfo(struct ib_smp *smp, in recv_subn_set_guidinfo() argument
388 return recv_subn_get_guidinfo(smp, ibdev); in recv_subn_set_guidinfo()
417 static int recv_subn_set_portinfo(struct ib_smp *smp, in recv_subn_set_portinfo() argument
420 struct ib_port_info *pip = (struct ib_port_info *)smp->data; in recv_subn_set_portinfo()
433 if (be32_to_cpu(smp->attr_mod) > ibdev->phys_port_cnt) in recv_subn_set_portinfo()
613 ret = recv_subn_get_portinfo(smp, ibdev, port); in recv_subn_set_portinfo()
621 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_set_portinfo()
622 ret = recv_subn_get_portinfo(smp, ibdev, port); in recv_subn_set_portinfo()
781 static int recv_subn_set_pkeytable(struct ib_smp *smp, in recv_subn_set_pkeytable() argument
784 u32 startpx = 32 * (be32_to_cpu(smp->attr_mod) & 0xffff); in recv_subn_set_pkeytable()
785 __be16 *p = (__be16 *) smp->data; in recv_subn_set_pkeytable()
786 u16 *q = (u16 *) smp->data; in recv_subn_set_pkeytable()
794 smp->status |= IB_SMP_INVALID_FIELD; in recv_subn_set_pkeytable()
796 return recv_subn_get_pkeytable(smp, ibdev); in recv_subn_set_pkeytable()
1263 struct ib_smp *smp = (struct ib_smp *)out_mad; in process_subn() local
1268 if (smp->class_version != 1) { in process_subn()
1269 smp->status |= IB_SMP_UNSUP_VERSION; in process_subn()
1270 ret = reply(smp); in process_subn()
1287 dev->mkey != smp->mkey && in process_subn()
1288 (smp->method == IB_MGMT_METHOD_SET || in process_subn()
1289 (smp->method == IB_MGMT_METHOD_GET && in process_subn()
1307 switch (smp->method) { in process_subn()
1309 switch (smp->attr_id) { in process_subn()
1311 ret = recv_subn_get_nodedescription(smp, ibdev); in process_subn()
1314 ret = recv_subn_get_nodeinfo(smp, ibdev, port_num); in process_subn()
1317 ret = recv_subn_get_guidinfo(smp, ibdev); in process_subn()
1320 ret = recv_subn_get_portinfo(smp, ibdev, port_num); in process_subn()
1323 ret = recv_subn_get_pkeytable(smp, ibdev); in process_subn()
1337 smp->status |= IB_SMP_UNSUP_METH_ATTR; in process_subn()
1338 ret = reply(smp); in process_subn()
1343 switch (smp->attr_id) { in process_subn()
1345 ret = recv_subn_set_guidinfo(smp, ibdev); in process_subn()
1348 ret = recv_subn_set_portinfo(smp, ibdev, port_num); in process_subn()
1351 ret = recv_subn_set_pkeytable(smp, ibdev, port_num); in process_subn()
1365 smp->status |= IB_SMP_UNSUP_METH_ATTR; in process_subn()
1366 ret = reply(smp); in process_subn()
1383 smp->status |= IB_SMP_UNSUP_METHOD; in process_subn()
1384 ret = reply(smp); in process_subn()