Lines Matching refs:ca

104 static int find_cached_ca(const char *ca_name, umad_ca_t * ca)
109 static int put_ca(umad_ca_t * ca)
220 static int release_ca(umad_ca_t * ca)
224 for (i = 0; i <= ca->numports; i++) {
225 if (!ca->ports[i])
227 release_port(ca->ports[i]);
228 free(ca->ports[i]);
229 ca->ports[i] = NULL;
235 * if *port > 0, check ca[port] state. Otherwise set *port to
242 umad_ca_t ca;
246 TRACE("checking ca '%s'", ca_name);
248 if (umad_get_ca(ca_name, &ca) < 0)
251 if (ca.node_type == 2) {
258 if (*port > ca.numports) {
262 if (!ca.ports[*port]) {
266 if (strcmp(ca.ports[*port]->link_layer, "InfiniBand") &&
267 strcmp(ca.ports[*port]->link_layer, "IB")) {
271 if (ca.ports[*port]->state == 4) {
275 if (ca.ports[*port]->phys_state != 3)
281 for (i = 0; i <= ca.numports; i++) {
283 if (!ca.ports[i])
285 if (strcmp(ca.ports[i]->link_layer, "InfiniBand") &&
286 strcmp(ca.ports[i]->link_layer, "IB"))
288 if (up < 0 && ca.ports[i]->phys_state == 5)
290 if (ca.ports[i]->state == 4) {
298 for (i = 0; i <= ca.numports; i++) {
300 if (!ca.ports[i])
302 if (ca.ports[i]->phys_state != 3) {
319 release_ca(&ca);
344 TRACE("checking ca '%s'", names[caidx]);
350 DEBUG("found ca %s with port %d type %d",
356 DEBUG("found ca %s with active port %d",
381 static int get_ca(const char *ca_name, umad_ca_t * ca)
388 ca->numports = 0;
389 memset(ca->ports, 0, sizeof ca->ports);
390 strncpy(ca->ca_name, ca_name, sizeof(ca->ca_name) - 1);
393 ca->ca_name);
395 if ((r = sys_read_uint(dir_name, SYS_NODE_TYPE, &ca->node_type)) < 0)
397 if (sys_read_string(dir_name, SYS_CA_FW_VERS, ca->fw_ver,
398 sizeof ca->fw_ver) < 0)
399 ca->fw_ver[0] = '\0';
400 if (sys_read_string(dir_name, SYS_CA_HW_VERS, ca->hw_ver,
401 sizeof ca->hw_ver) < 0)
402 ca->hw_ver[0] = '\0';
403 if ((r = sys_read_string(dir_name, SYS_CA_TYPE, ca->ca_type,
404 sizeof ca->ca_type)) < 0)
405 ca->ca_type[0] = '\0';
406 if ((r = sys_read_guid(dir_name, SYS_CA_NODE_GUID, &ca->node_guid)) < 0)
409 sys_read_guid(dir_name, SYS_CA_SYS_GUID, &ca->system_guid)) < 0)
413 SYS_INFINIBAND, ca->ca_name, SYS_CA_PORTS_DIR);
432 if (!(ca->ports[portnum] =
433 calloc(1, sizeof(*ca->ports[portnum])))) {
437 if (get_port(ca_name, dir_name, portnum, ca->ports[portnum]) <
439 free(ca->ports[portnum]);
440 ca->ports[portnum] = NULL;
444 if (ca->numports < portnum)
445 ca->numports = portnum;
452 put_ca(ca);
460 release_ca(ca);
568 DEBUG("return 1 ca");
578 umad_ca_t ca;
581 TRACE("ca name %s max port guids %d", ca_name, max);
585 if (umad_get_ca(ca_name, &ca) < 0)
589 if (ca.numports + 1 > max) {
590 release_ca(&ca);
594 for (i = 0; i <= ca.numports; i++)
595 portguids[ports++] = ca.ports[i] ?
596 ca.ports[i]->port_guid : htobe64(0);
599 release_ca(&ca);
609 TRACE("ca %s port %d", ca_name, portnum);
627 TRACE("ca %s port %d", ca_name, portnum);
654 int umad_get_ca(const char *ca_name, umad_ca_t * ca)
662 if (find_cached_ca(ca_name, ca) > 0)
665 if ((r = get_ca(ca_name, ca)) < 0)
672 int umad_release_ca(umad_ca_t * ca)
676 TRACE("ca_name %s", ca->ca_name);
677 if (!ca)
680 if ((r = release_ca(ca)) < 0)
683 DEBUG("releasing %s", ca->ca_name);