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 | |
parent | a940d195c7af8690a5b0f1a1f638857f3cc91248 (diff) | |
download | illumos-joyent-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')
-rw-r--r-- | usr/src/lib/libdevinfo/devinfo.c | 98 | ||||
-rw-r--r-- | usr/src/lib/libdevinfo/libdevinfo.h | 6 | ||||
-rw-r--r-- | usr/src/lib/libdevinfo/spec/devinfo.spec | 24 |
3 files changed, 127 insertions, 1 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 diff --git a/usr/src/lib/libdevinfo/libdevinfo.h b/usr/src/lib/libdevinfo/libdevinfo.h index b277ff4ae5..195eee4e55 100644 --- a/usr/src/lib/libdevinfo/libdevinfo.h +++ b/usr/src/lib/libdevinfo/libdevinfo.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -142,6 +142,10 @@ extern di_node_t di_sibling_node(di_node_t node); extern di_node_t di_child_node(di_node_t node); extern di_node_t di_drv_first_node(const char *drv_name, di_node_t root); extern di_node_t di_drv_next_node(di_node_t node); +extern di_node_t di_vhci_first_node(di_node_t root); +extern di_node_t di_vhci_next_node(di_node_t node); +extern di_node_t di_phci_first_node(di_node_t vhci_node); +extern di_node_t di_phci_next_node(di_node_t node); /* * tree walking assistants diff --git a/usr/src/lib/libdevinfo/spec/devinfo.spec b/usr/src/lib/libdevinfo/spec/devinfo.spec index 66a4de49d8..cbf95569e3 100644 --- a/usr/src/lib/libdevinfo/spec/devinfo.spec +++ b/usr/src/lib/libdevinfo/spec/devinfo.spec @@ -949,3 +949,27 @@ declaration int devfs_rm_minor_perm(char *drv, \ void (*cb)(minorperm_err_t, int)) version SUNWprivate_1.1 end + +function di_vhci_first_node +include <libdevinfo.h> +declaration di_node_t di_vhci_first_node(di_node_t root) +version SUNWprivate_1.1 +end + +function di_vhci_next_node +include <libdevinfo.h> +declaration di_node_t di_vhci_next_node(di_node_t vhci_node) +version SUNWprivate_1.1 +end + +function di_phci_first_node +include <libdevinfo.h> +declaration di_node_t di_phci_first_node(di_node_t vhci_node) +version SUNWprivate_1.1 +end + +function di_phci_next_node +include <libdevinfo.h> +declaration di_node_t di_phci_next_node(di_node_t phci_node) +version SUNWprivate_1.1 +end |