13faa91230bde46da937bf33010b9accc5bdeb59sd * CDDL HEADER START
13faa91230bde46da937bf33010b9accc5bdeb59sd * The contents of this file are subject to the terms of the
13faa91230bde46da937bf33010b9accc5bdeb59sd * Common Development and Distribution License (the "License").
13faa91230bde46da937bf33010b9accc5bdeb59sd * You may not use this file except in compliance with the License.
13faa91230bde46da937bf33010b9accc5bdeb59sd * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
13faa91230bde46da937bf33010b9accc5bdeb59sd * See the License for the specific language governing permissions
13faa91230bde46da937bf33010b9accc5bdeb59sd * and limitations under the License.
13faa91230bde46da937bf33010b9accc5bdeb59sd * When distributing Covered Code, include this CDDL HEADER in each
13faa91230bde46da937bf33010b9accc5bdeb59sd * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
13faa91230bde46da937bf33010b9accc5bdeb59sd * If applicable, add the following below this CDDL HEADER, with the
13faa91230bde46da937bf33010b9accc5bdeb59sd * fields enclosed by brackets "[]" replaced with your own identifying
13faa91230bde46da937bf33010b9accc5bdeb59sd * information: Portions Copyright [yyyy] [name of copyright owner]
13faa91230bde46da937bf33010b9accc5bdeb59sd * CDDL HEADER END
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
13faa91230bde46da937bf33010b9accc5bdeb59sd * sun4v specific cpuboard enumerator
13faa91230bde46da937bf33010b9accc5bdeb59sdextern "C" {
13faa91230bde46da937bf33010b9accc5bdeb59sd/* Until future PRI changes, make connection between cpuboard id and RC */
13faa91230bde46da937bf33010b9accc5bdeb59sdchar *cpub_rcs[] = { CPUBOARD0_RC, CPUBOARD1_RC, CPUBOARD2_RC, CPUBOARD3_RC };
13faa91230bde46da937bf33010b9accc5bdeb59sdstatic int cpuboard_enum(topo_mod_t *, tnode_t *, const char *, topo_instance_t,
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_instance_t, void *, void *);
13faa91230bde46da937bf33010b9accc5bdeb59sd {CPUBOARD, FM_FMRI_SCHEME_HC, CPUBOARD_VERSION, &cpuboard_ops};
13faa91230bde46da937bf33010b9accc5bdeb59sdstatic void *
13faa91230bde46da937bf33010b9accc5bdeb59sdstatic void
13faa91230bde46da937bf33010b9accc5bdeb59sdcpuboard_get_pri_info(topo_mod_t *mod, cpuboard_contents_t cpubs[])
13faa91230bde46da937bf33010b9accc5bdeb59sd lhp = ldom_init(cpuboard_topo_alloc, cpuboard_topo_free);
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_mod_dprintf(mod, "not sun4v architecture%s\n", isa);
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (0);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen topo_mod_dprintf(mod, "Failed to get pri/md, bufsize=%d\n",
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (0);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen topo_mod_dprintf(mod, "pri/md bufsize=%d\n", bufsize);
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (0);
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sd if (ncomp <= 0) {
13faa91230bde46da937bf33010b9accc5bdeb59sd cpuboard_topo_free(listp, sizeof (mde_cookie_t) * num_nodes);
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sd for (i = 0; i < ncomp; i++) {
13faa91230bde46da937bf33010b9accc5bdeb59sd * PRI nodes are still named "cpu-board", but the canonical
13faa91230bde46da937bf33010b9accc5bdeb59sd * names are "cpuboard".
13faa91230bde46da937bf33010b9accc5bdeb59sd if (md_get_prop_str(mdp, listp[i], "type", &pstr) == 0 &&
13faa91230bde46da937bf33010b9accc5bdeb59sd "id md_get_prop_val() failed. (%d: %s)\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd "id %llx out of range. (%d: %s)\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd cpuboard_topo_free(listp, sizeof (mde_cookie_t) * num_nodes);
13faa91230bde46da937bf33010b9accc5bdeb59sd/*ARGSUSED*/
13faa91230bde46da937bf33010b9accc5bdeb59sd * Turn on module debugging output
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_mod_dprintf(mod, "initializing cpuboard enumerator\n");
13faa91230bde46da937bf33010b9accc5bdeb59sd if (topo_mod_register(mod, &cpuboard_info, TOPO_VERSION) < 0) {
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_mod_dprintf(mod, "cpuboard registration failed: %s\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd return; /* mod errno already set */
13faa91230bde46da937bf33010b9accc5bdeb59sd const char *name, topo_instance_t i, void *priv, cpuboard_contents_t *cpubc)
13faa91230bde46da937bf33010b9accc5bdeb59sd fmri = topo_mod_hcfmri(mod, parent, FM_HC_SCHEME_VERSION, name, i,
13faa91230bde46da937bf33010b9accc5bdeb59sd "Unable to make nvlist for %s bind: %s.\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd "topo_node_bind (%s%d/%s%d) failed: %s\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd "cpuboard_tnode_create: topo_node_bind (%s%d/%s%d) created!\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_node_name(parent), topo_node_instance(parent), name, i);
13faa91230bde46da937bf33010b9accc5bdeb59sd if (topo_pgroup_create(ntn, &cpuboard_auth_pgroup, &err) == 0) {
9c94f155585ea35e938fea603bc227c685223abdCheng Sean Ye (void) topo_prop_inherit(ntn, FM_FMRI_AUTHORITY,
13faa91230bde46da937bf33010b9accc5bdeb59sd if (e < 0)
13faa91230bde46da937bf33010b9accc5bdeb59sd return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sdcpuboard_label_set(topo_mod_t *mod, tnode_t *parent, tnode_t *node,
13faa91230bde46da937bf33010b9accc5bdeb59sd return (-1);
13faa91230bde46da937bf33010b9accc5bdeb59sd (void) snprintf(label, len, "%s%s%d", plabel, cpuboard_label, n);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sd/*ARGSUSED*/
13faa91230bde46da937bf33010b9accc5bdeb59sdcpuboard_declare(tnode_t *parent, const char *name, topo_instance_t i,
13faa91230bde46da937bf33010b9accc5bdeb59sd if ((ntn = cpuboard_tnode_create(mod, parent, name, i, priv,
13faa91230bde46da937bf33010b9accc5bdeb59sd /* set ASRU to resource fmri */
13faa91230bde46da937bf33010b9accc5bdeb59sdchip_instantiate(tnode_t *parent, const char *name, topo_mod_t *mod,
13faa91230bde46da937bf33010b9accc5bdeb59sd "Currently only know how to enumerate %s components.\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (0);
13faa91230bde46da937bf33010b9accc5bdeb59sd if ((rp = topo_mod_load(mp, CHIP, TOPO_VERSION)) == NULL) {
13faa91230bde46da937bf33010b9accc5bdeb59sd "%s enumerator could not load %s enum. (%d: %s)\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_mod_dprintf(mp, "chip_enum_load(EXIT): %s, rp=%p\n", CPUBOARD, rp);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (rp);
13faa91230bde46da937bf33010b9accc5bdeb59sd "NULL di_devfs_path.\n");
13faa91230bde46da937bf33010b9accc5bdeb59sd "got px %d, node named: %s, path: %s\n",
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Docpuboard_free_pri_info(topo_mod_t *mod, cpuboard_contents_t cpuboard_list[],
13faa91230bde46da937bf33010b9accc5bdeb59sd/*ARGSUSED*/
13faa91230bde46da937bf33010b9accc5bdeb59sdcpuboard_enum(topo_mod_t *mod, tnode_t *parent, const char *name,
13faa91230bde46da937bf33010b9accc5bdeb59sd topo_instance_t min, topo_instance_t max, void *arg, void *notused)
13faa91230bde46da937bf33010b9accc5bdeb59sd "Currently only know how to enumerate %s components.\n",
13faa91230bde46da937bf33010b9accc5bdeb59sd return (-1);
13faa91230bde46da937bf33010b9accc5bdeb59sd /* Make sure we don't exceed CPUBOARD_MAX */
13faa91230bde46da937bf33010b9accc5bdeb59sd /* Scan PRI for cpu-boards. */
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk * if no PRI available (i.e. not in Control Domain),
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk * use px driver to determine cpuboard presence.
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk * NOTE: with this approach there will be no
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk * identity information - no SN nor PN.
67d4b2f88b8e27bb035d67a046d5aad7db3bfc71gk return (-1);
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (-1);
13faa91230bde46da937bf33010b9accc5bdeb59sd "Enumeration of cpuboard failed: %s\n",
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
13faa91230bde46da937bf33010b9accc5bdeb59sd "failed %s\n",
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (-1);
13faa91230bde46da937bf33010b9accc5bdeb59sd if (topo_node_range_create(mod, cpuboardn, HOSTBRIDGE, 0,
13faa91230bde46da937bf33010b9accc5bdeb59sd "HOSTBRIDGE failed: %s\n",
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (-1);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen if (cpuboard_hb_enum(mod, cpuboard_findrc(mod, i), cpub_rcs[i],
13faa91230bde46da937bf33010b9accc5bdeb59sd "failed: %s\n",
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (-1);
b64bfe7dc77dc5c5561cdcd10c80b0b550701a24Trang Do cpuboard_free_pri_info(mod, cpuboard_list, min, max);
13faa91230bde46da937bf33010b9accc5bdeb59sd return (0);