diff options
author | rs135747 <none@none> | 2005-11-11 16:52:37 -0800 |
---|---|---|
committer | rs135747 <none@none> | 2005-11-11 16:52:37 -0800 |
commit | 8c4f8890c870d3bd16cbcaeed2dc4679d5e076b5 (patch) | |
tree | ab4d0d1191a3708b22742d4e5260a35150b9bb23 /usr/src/lib/libdevinfo/devinfo.c | |
parent | a940d195c7af8690a5b0f1a1f638857f3cc91248 (diff) | |
download | illumos-gate-8c4f8890c870d3bd16cbcaeed2dc4679d5e076b5.tar.gz |
PSARC 2004/626 SNIA Multipath Management API support for scsi_vhci
PSARC 2005/646 MDI/PHCI/libdevinfo Extensions for SNIA MPAPI support
6271075 Provide libdevinfo interface that allows to get to phci nodes from vhci
6274924 DINFOCACHE snapshot needs to be invalidated when pathinfo is created or removed
6326490 Need to provide interconnect-type prop
6326499 MDI needs to provide vhci/phci/client device traversal interfaces.
6326502 MDI needs to generate sysevent for phci registration/unregistration
6326564 Provide SNIA MP API support
6326937 scsi_vhci(MPxIO) needs to provide Explicit Mode support for TPGS devices
Diffstat (limited to 'usr/src/lib/libdevinfo/devinfo.c')
-rw-r--r-- | usr/src/lib/libdevinfo/devinfo.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/usr/src/lib/libdevinfo/devinfo.c b/usr/src/lib/libdevinfo/devinfo.c index 991fa7d833..ee33c2d518 100644 --- a/usr/src/lib/libdevinfo/devinfo.c +++ b/usr/src/lib/libdevinfo/devinfo.c @@ -2088,6 +2088,104 @@ int di_path_prop_lookup_strings(di_path_t path, const char *prop_name, return (di_path_prop_strings(prop, prop_data)); } +/* + * Consolidation private interfaces for traversing vhci nodes. + */ +di_node_t +di_vhci_first_node(di_node_t root) +{ + struct di_all *dap; + caddr_t pa; /* starting address of map */ + + DPRINTF((DI_INFO, "Get first vhci node\n")); + + if (root == DI_NODE_NIL) { + errno = EINVAL; + return (DI_NODE_NIL); + } + + pa = (caddr_t)root - DI_NODE(root)->self; + dap = DI_ALL(pa); + + if (dap->top_vhci_devinfo == NULL) { + errno = ENXIO; + return (DI_NODE_NIL); + } + + return (DI_NODE(pa + dap->top_vhci_devinfo)); +} + +di_node_t +di_vhci_next_node(di_node_t node) +{ + caddr_t pa; /* starting address of map */ + + if (node == DI_NODE_NIL) { + errno = EINVAL; + return (DI_NODE_NIL); + } + + DPRINTF((DI_TRACE, "next vhci node on the snap shot:" + " current=%s\n", di_node_name(node))); + + if (DI_NODE(node)->next_vhci == NULL) { + errno = ENXIO; + return (DI_NODE_NIL); + } + + pa = (caddr_t)node - DI_NODE(node)->self; + + return (DI_NODE(pa + DI_NODE(node)->next_vhci)); +} + +/* + * Consolidation private interfaces for traversing phci nodes. + */ +di_node_t +di_phci_first_node(di_node_t vhci_node) +{ + caddr_t pa; /* starting address of map */ + + DPRINTF((DI_INFO, "Get first phci node:\n" + " current=%s", di_node_name(vhci_node))); + + if (vhci_node == DI_NODE_NIL) { + errno = EINVAL; + return (DI_NODE_NIL); + } + + pa = (caddr_t)vhci_node - DI_NODE(vhci_node)->self; + + if (DI_NODE(vhci_node)->top_phci == NULL) { + errno = ENXIO; + return (DI_NODE_NIL); + } + + return (DI_NODE(pa + DI_NODE(vhci_node)->top_phci)); +} + +di_node_t +di_phci_next_node(di_node_t node) +{ + caddr_t pa; /* starting address of map */ + + if (node == DI_NODE_NIL) { + errno = EINVAL; + return (DI_NODE_NIL); + } + + DPRINTF((DI_TRACE, "next phci node on the snap shot:" + " current=%s\n", di_node_name(node))); + + if (DI_NODE(node)->next_phci == NULL) { + errno = ENXIO; + return (DI_NODE_NIL); + } + + pa = (caddr_t)node - DI_NODE(node)->self; + + return (DI_NODE(pa + DI_NODE(node)->next_phci)); +} /* * Consolidation private interfaces for private data |