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