1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* 28 * Create a topology node for a PRI node of type 'hostbridge' 29 */ 30 #include <sys/types.h> 31 #include <strings.h> 32 #include <sys/fm/protocol.h> 33 #include <fm/topo_mod.h> 34 #include <fm/topo_hc.h> 35 #include "pi_impl.h" 36 37 #define _ENUM_NAME "enum_hostbridge" 38 39 40 /* 41 * Create a hostbridge topo node. 42 */ 43 int 44 pi_enum_hostbridge(topo_mod_t *mod, md_t *mdp, mde_cookie_t mde_node, 45 topo_instance_t inst, tnode_t *t_parent, const char *hc_name, 46 tnode_t **t_node) 47 { 48 int result; 49 50 topo_mod_dprintf(mod, "%s called for node_0x%llx type %s\n", 51 _ENUM_NAME, (uint64_t)mde_node, hc_name); 52 53 *t_node = NULL; 54 55 /* 56 * Create the hostbridge topo node. Use the generic enumerator to 57 * do this, and then we will add more attributes below. 58 */ 59 result = pi_enum_generic_impl(mod, mdp, mde_node, inst, t_parent, 60 t_parent, hc_name, _ENUM_NAME, t_node, 0); 61 if (result != 0 || *t_node == NULL) { 62 topo_mod_dprintf(mod, 63 "%s node_0x%llx failed to create topo node: %s\n", 64 _ENUM_NAME, (uint64_t)mde_node, 65 topo_strerror(topo_mod_errno(mod))); 66 return (result); 67 } 68 69 /* Update the topo node with more specific information */ 70 result = pi_enum_update(mod, mdp, mde_node, t_parent, *t_node, 71 hc_name); 72 if (result != 0) { 73 topo_mod_dprintf(mod, 74 "%s node_0x%llx failed to create node properites: %s\n", 75 _ENUM_NAME, (uint64_t)mde_node, 76 topo_strerror(topo_mod_errno(mod))); 77 return (result); 78 } 79 80 topo_mod_dprintf(mod, "%s added node_0x%llx type %s\n", 81 _ENUM_NAME, (uint64_t)mde_node, hc_name); 82 83 return (result); 84 } 85