Lines Matching refs:smp
44 extern int mlnx_ext_port_info_err(smp_engine_t * engine, ibnd_smp_t * smp,
47 static void queue_smp(smp_engine_t * engine, ibnd_smp_t * smp) in queue_smp() argument
49 smp->qnext = NULL; in queue_smp()
51 engine->smp_queue_head = smp; in queue_smp()
52 engine->smp_queue_tail = smp; in queue_smp()
54 engine->smp_queue_tail->qnext = smp; in queue_smp()
55 engine->smp_queue_tail = smp; in queue_smp()
72 static int send_smp(ibnd_smp_t * smp, smp_engine_t * engine) in send_smp() argument
76 ib_rpc_t *rpc = &smp->rpc; in send_smp()
90 if ((rc = mad_build_pkt(umad, &smp->rpc, &smp->path, NULL, NULL)) in send_smp()
108 ibnd_smp_t *smp; in process_smp_queue() local
111 smp = get_smp(engine); in process_smp_queue()
112 if (!smp) in process_smp_queue()
115 if ((rc = send_smp(smp, engine)) != 0) { in process_smp_queue()
116 free(smp); in process_smp_queue()
119 cl_qmap_insert(&engine->smps_on_wire, (uint32_t) smp->rpc.trid, in process_smp_queue()
120 (cl_map_item_t *) smp); in process_smp_queue()
129 ibnd_smp_t *smp = calloc(1, sizeof *smp); in issue_smp() local
130 if (!smp) { in issue_smp()
135 smp->cb = cb; in issue_smp()
136 smp->cb_data = cb_data; in issue_smp()
137 smp->path = *portid; in issue_smp()
138 smp->rpc.method = IB_MAD_METHOD_GET; in issue_smp()
139 smp->rpc.attr.id = attrid; in issue_smp()
140 smp->rpc.attr.mod = mod; in issue_smp()
141 smp->rpc.timeout = engine->cfg->timeout_ms; in issue_smp()
142 smp->rpc.datasz = IB_SMP_DATA_SIZE; in issue_smp()
143 smp->rpc.dataoffs = IB_SMP_DATA_OFFS; in issue_smp()
144 smp->rpc.trid = mad_trid(); in issue_smp()
145 smp->rpc.mkey = engine->cfg->mkey; in issue_smp()
149 smp->rpc.mgtclass = IB_SMI_DIRECT_CLASS; /* direct SMI */ in issue_smp()
151 smp->rpc.mgtclass = IB_SMI_CLASS; /* Lid routed SMI */ in issue_smp()
156 queue_smp(engine, smp); in issue_smp()
164 ibnd_smp_t *smp; in process_one_recv() local
182 smp = (ibnd_smp_t *) cl_qmap_remove(&engine->smps_on_wire, trid); in process_one_recv()
183 if ((cl_map_item_t *) smp == cl_qmap_end(&engine->smps_on_wire)) { in process_one_recv()
194 portid2str(&smp->path), smp->rpc.attr.id, in process_one_recv()
195 smp->rpc.attr.mod, status, strerror(status)); in process_one_recv()
196 if (smp->rpc.attr.id == IB_ATTR_MLNX_EXT_PORT_INFO) in process_one_recv()
197 rc = mlnx_ext_port_info_err(engine, smp, mad, in process_one_recv()
198 smp->cb_data); in process_one_recv()
201 portid2str(&smp->path), smp->rpc.attr.id, in process_one_recv()
202 smp->rpc.attr.mod, status); in process_one_recv()
203 if (smp->rpc.attr.id == IB_ATTR_MLNX_EXT_PORT_INFO) in process_one_recv()
204 rc = mlnx_ext_port_info_err(engine, smp, mad, in process_one_recv()
205 smp->cb_data); in process_one_recv()
207 rc = smp->cb(engine, smp, mad, smp->cb_data); in process_one_recv()
210 free(smp); in process_one_recv()
257 ibnd_smp_t *smp; in smp_engine_destroy() local
260 smp = get_smp(engine); in smp_engine_destroy()
261 if (smp) in smp_engine_destroy()
263 for ( /* */ ; smp; smp = get_smp(engine)) in smp_engine_destroy()
264 free(smp); in smp_engine_destroy()