Mercurial > unleashed > wips
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) {