summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorrs135747 <none@none>2005-11-11 16:52:37 -0800
committerrs135747 <none@none>2005-11-11 16:52:37 -0800
commit8c4f8890c870d3bd16cbcaeed2dc4679d5e076b5 (patch)
treeab4d0d1191a3708b22742d4e5260a35150b9bb23 /usr/src/lib
parenta940d195c7af8690a5b0f1a1f638857f3cc91248 (diff)
downloadillumos-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.c98
-rw-r--r--usr/src/lib/libdevinfo/libdevinfo.h6
-rw-r--r--usr/src/lib/libdevinfo/spec/devinfo.spec24
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