changeset 19592:a905b8c9e72f

9585 extend pcibus enumerator to expose driver instance as property on pcifn/pciexfn nodes Reviewed by: Igor Kozhukhov <igor@dilos.org> Reviewed by: Yuri Pankov <yuripv@yuripv.net> Reviewed by: Ken Mays <maybird1776@yahoo.com> Approved by: Dan McDonald <danmcd@joyent.com>
author Rob Johnston <rob.johnston@joyent.com>
date Wed, 06 Jun 2018 21:04:09 -0700
parents 0a306c8a3b2d
children 90a878127df2
files usr/src/lib/fm/topo/libtopo/common/topo_hc.h usr/src/lib/fm/topo/modules/common/pcibus/did_props.c
diffstat 2 files changed, 24 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/lib/fm/topo/libtopo/common/topo_hc.h	Wed Mar 14 07:49:04 2018 +0200
+++ b/usr/src/lib/fm/topo/libtopo/common/topo_hc.h	Wed Jun 06 21:04:09 2018 -0700
@@ -21,7 +21,7 @@
 
 /*
  * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2017, Joyent, Inc.
+ * Copyright (c) 2018, Joyent, Inc.
  */
 
 #ifndef _TOPO_HC_H
@@ -101,6 +101,7 @@
 #define	TOPO_PGROUP_IO		"io"
 #define	TOPO_IO_DEVTYPE		"devtype"
 #define	TOPO_IO_DRIVER		"driver"
+#define	TOPO_IO_INSTANCE	"instance"
 #define	TOPO_IO_MODULE		"module"
 #define	TOPO_IO_DEV		"dev"
 #define	TOPO_IO_DEVID		"devid"
--- a/usr/src/lib/fm/topo/modules/common/pcibus/did_props.c	Wed Mar 14 07:49:04 2018 +0200
+++ b/usr/src/lib/fm/topo/modules/common/pcibus/did_props.c	Wed Jun 06 21:04:09 2018 -0700
@@ -54,6 +54,8 @@
     const char *, const char *, const char *);
 static int DRIVERprop_set(tnode_t *, did_t *,
     const char *, const char *, const char *);
+static int INSTprop_set(tnode_t *, did_t *,
+    const char *, const char *, const char *);
 static int MODULEprop_set(tnode_t *, did_t *,
     const char *, const char *, const char *);
 static int EXCAP_set(tnode_t *, did_t *,
@@ -101,6 +103,7 @@
 	{ DI_DEVTYPPROP, &io_pgroup, TOPO_IO_DEVTYPE, maybe_di_chars_copy },
 	{ DI_DEVIDPROP, &pci_pgroup, TOPO_PCI_DEVID, maybe_di_uint_to_str },
 	{ NULL, &io_pgroup, TOPO_IO_DRIVER, DRIVERprop_set },
+	{ NULL, &io_pgroup, TOPO_IO_INSTANCE, INSTprop_set },
 	{ NULL, &io_pgroup, TOPO_IO_MODULE, MODULEprop_set },
 	{ "serd_io_device_nonfatal_n", &io_pgroup, "serd_io_device_nonfatal_n",
 	    maybe_di_uint_to_dec_str },
@@ -172,6 +175,7 @@
 txprop_t Bus_common_props[] = {
 	{ DI_DEVTYPPROP, &io_pgroup, TOPO_IO_DEVTYPE, maybe_di_chars_copy },
 	{ NULL, &io_pgroup, TOPO_IO_DRIVER, DRIVERprop_set },
+	{ NULL, &io_pgroup, TOPO_IO_INSTANCE, INSTprop_set },
 	{ NULL, &io_pgroup, TOPO_IO_MODULE, MODULEprop_set },
 	{ NULL, &protocol_pgroup, TOPO_PROP_LABEL, label_set },
 	{ NULL, &protocol_pgroup, TOPO_PROP_FRU, FRU_set },
@@ -182,6 +186,7 @@
 	{ NULL, &io_pgroup, TOPO_IO_DEV, DEVprop_set },
 	{ DI_DEVTYPPROP, &io_pgroup, TOPO_IO_DEVTYPE, maybe_di_chars_copy },
 	{ NULL, &io_pgroup, TOPO_IO_DRIVER, DRIVERprop_set },
+	{ NULL, &io_pgroup, TOPO_IO_INSTANCE, INSTprop_set },
 	{ NULL, &io_pgroup, TOPO_IO_MODULE, MODULEprop_set },
 	{ NULL, &pci_pgroup, TOPO_PCI_EXCAP, EXCAP_set },
 	{ NULL, &pci_pgroup, TOPO_PCI_BDF, BDF_set },
@@ -213,6 +218,7 @@
 txprop_t HB_common_props[] = {
 	{ NULL, &io_pgroup, TOPO_IO_DEV, DEVprop_set },
 	{ NULL, &io_pgroup, TOPO_IO_DRIVER, DRIVERprop_set },
+	{ NULL, &io_pgroup, TOPO_IO_INSTANCE, INSTprop_set },
 	{ NULL, &io_pgroup, TOPO_IO_MODULE, MODULEprop_set },
 	{ NULL, &protocol_pgroup, TOPO_PROP_ASRU, ASRU_set },
 	/*
@@ -778,6 +784,22 @@
 
 /*ARGSUSED*/
 static int
+INSTprop_set(tnode_t *tn, did_t *pd,
+    const char *dpnm, const char *tpgrp, const char *tpnm)
+{
+	int inst, err;
+
+	if ((inst = di_instance(did_dinode(pd))) == -1)
+		return (0);
+	if (topo_prop_set_uint32(tn,
+	    tpgrp, tpnm, TOPO_PROP_IMMUTABLE, inst, &err) < 0)
+		return (topo_mod_seterrno(did_mod(pd), err));
+
+	return (0);
+}
+
+/*ARGSUSED*/
+static int
 MODULEprop_set(tnode_t *tn, did_t *pd,
     const char *dpnm, const char *tpgrp, const char *tpnm)
 {