595 return (e);
596 } else if (strcmp(nm, PCI_DEVICE) == 0 ||
597 strcmp(nm, PCIEX_DEVICE) == 0 || strcmp(nm, PCIEX_BUS) == 0) {
598 nvlist_t *in, *out;
599
600 mp = did_mod(pd);
601 if (topo_mod_nvalloc(mp, &in, NV_UNIQUE_NAME) != 0)
602 return (topo_mod_seterrno(mp, EMOD_FMRI_NVL));
603 if (nvlist_add_uint64(in, "nv1", (uintptr_t)pd) != 0) {
604 nvlist_free(in);
605 return (topo_mod_seterrno(mp, EMOD_NOMEM));
606 }
607 if (topo_method_invoke(tn,
608 TOPO_METH_FRU_COMPUTE, TOPO_METH_FRU_COMPUTE_VERSION,
609 in, &out, &err) != 0) {
610 nvlist_free(in);
611 return (topo_mod_seterrno(mp, err));
612 }
613 nvlist_free(in);
614 (void) topo_node_fru_set(tn, out, 0, &err);
615 if (out != NULL)
616 nvlist_free(out);
617 } else
618 (void) topo_node_fru_set(tn, NULL, 0, &err);
619
620 return (0);
621 }
622
623 /*ARGSUSED*/
624 static int
625 label_set(tnode_t *tn, did_t *pd,
626 const char *dpnm, const char *tpgrp, const char *tpnm)
627 {
628 topo_mod_t *mp;
629 nvlist_t *in, *out;
630 char *label;
631 int err;
632
633 mp = did_mod(pd);
634 /*
635 * If this is a PCIEX_BUS and its parent is a PCIEX_ROOT,
|
595 return (e);
596 } else if (strcmp(nm, PCI_DEVICE) == 0 ||
597 strcmp(nm, PCIEX_DEVICE) == 0 || strcmp(nm, PCIEX_BUS) == 0) {
598 nvlist_t *in, *out;
599
600 mp = did_mod(pd);
601 if (topo_mod_nvalloc(mp, &in, NV_UNIQUE_NAME) != 0)
602 return (topo_mod_seterrno(mp, EMOD_FMRI_NVL));
603 if (nvlist_add_uint64(in, "nv1", (uintptr_t)pd) != 0) {
604 nvlist_free(in);
605 return (topo_mod_seterrno(mp, EMOD_NOMEM));
606 }
607 if (topo_method_invoke(tn,
608 TOPO_METH_FRU_COMPUTE, TOPO_METH_FRU_COMPUTE_VERSION,
609 in, &out, &err) != 0) {
610 nvlist_free(in);
611 return (topo_mod_seterrno(mp, err));
612 }
613 nvlist_free(in);
614 (void) topo_node_fru_set(tn, out, 0, &err);
615 nvlist_free(out);
616 } else
617 (void) topo_node_fru_set(tn, NULL, 0, &err);
618
619 return (0);
620 }
621
622 /*ARGSUSED*/
623 static int
624 label_set(tnode_t *tn, did_t *pd,
625 const char *dpnm, const char *tpgrp, const char *tpnm)
626 {
627 topo_mod_t *mp;
628 nvlist_t *in, *out;
629 char *label;
630 int err;
631
632 mp = did_mod(pd);
633 /*
634 * If this is a PCIEX_BUS and its parent is a PCIEX_ROOT,
|