summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdevinfo/devinfo.c
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/libdevinfo/devinfo.c
parenta940d195c7af8690a5b0f1a1f638857f3cc91248 (diff)
downloadillumos-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.c98
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