display_sun4v.c revision 03831d35f7499c87d51205817c93e9a8d42c4bae
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License, Version 1.0 only
03831d35f7499c87d51205817c93e9a8d42c4baestevel * (the "License"). You may not use this file except in compliance
03831d35f7499c87d51205817c93e9a8d42c4baestevel * with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <stdio.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <stdlib.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <unistd.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <ctype.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <string.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <kvm.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <varargs.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <time.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <dirent.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <fcntl.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/param.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/stat.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/types.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/utsname.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/openpromio.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <libintl.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <syslog.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/dkio.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "pdevinfo.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "display.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "display_sun4v.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "libprtdiag.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#if !defined(TEXT_DOMAIN)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define TEXT_DOMAIN "SYS_TEST"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern int sys_clk;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelint
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display(Sys_tree *tree, Prom_node *root, int syserrlog,
03831d35f7499c87d51205817c93e9a8d42c4baestevel picl_nodehdl_t plafh)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel int exit_code = 0; /* init to all OK */
03831d35f7499c87d51205817c93e9a8d42c4baestevel void *value; /* used for opaque PROM data */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct mem_total memory_total; /* Total memory in system */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct grp_info grps; /* Info on all groups in system */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel sys_clk = -1; /* System clock freq. (in MHz) */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Now display the machine's configuration. We do this if we
03831d35f7499c87d51205817c93e9a8d42c4baestevel * are not logging.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (!logging) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct utsname uts_buf;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display system banner
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) uname(&uts_buf);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(
03831d35f7499c87d51205817c93e9a8d42c4baestevel dgettext(TEXT_DOMAIN, "System Configuration: "
03831d35f7499c87d51205817c93e9a8d42c4baestevel "Sun Microsystems %s %s\n"), uts_buf.machine,
03831d35f7499c87d51205817c93e9a8d42c4baestevel get_prop_val(find_prop(root,
03831d35f7499c87d51205817c93e9a8d42c4baestevel "banner-name")), 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* display system clock frequency */
03831d35f7499c87d51205817c93e9a8d42c4baestevel value = get_prop_val(find_prop(root, "clock-frequency"));
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (value != NULL) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel sys_clk = ((*((int *)value)) + 500000) / 1000000;
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(dgettext(TEXT_DOMAIN, "System clock "
03831d35f7499c87d51205817c93e9a8d42c4baestevel "frequency: %d MHz\n"), sys_clk, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display the Memory Size */
03831d35f7499c87d51205817c93e9a8d42c4baestevel display_memorysize(tree, NULL, &grps, &memory_total);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display the CPU devices */
03831d35f7499c87d51205817c93e9a8d42c4baestevel sun4v_display_cpu_devices(plafh);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display the Memory configuration */
03831d35f7499c87d51205817c93e9a8d42c4baestevel sun4v_display_memoryconf(plafh);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display all the IO cards. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) sun4v_display_pci(plafh);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel sun4v_display_diaginfo((syserrlog || (logging)), root, plafh);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel return (exit_code);
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * display_pci
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display all the PCI IO cards on this board.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display_pci(picl_nodehdl_t plafh)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef lint
03831d35f7499c87d51205817c93e9a8d42c4baestevel plafh = plafh;
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This function is intentionally empty
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display_memoryconf(picl_nodehdl_t plafh)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef lint
03831d35f7499c87d51205817c93e9a8d42c4baestevel plafh = plafh;
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This function is intentionally empty
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display_cpu_devices(picl_nodehdl_t plafh)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel char *fmt = "%-12s %-5s %-8s %-19s %-5s";
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display the table header for CPUs . Then display the CPU
03831d35f7499c87d51205817c93e9a8d42c4baestevel * frequency, cache size, and processor revision of all cpus.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(dgettext(TEXT_DOMAIN,
03831d35f7499c87d51205817c93e9a8d42c4baestevel "\n"
03831d35f7499c87d51205817c93e9a8d42c4baestevel "========================="
03831d35f7499c87d51205817c93e9a8d42c4baestevel " CPUs "
03831d35f7499c87d51205817c93e9a8d42c4baestevel "==============================================="
03831d35f7499c87d51205817c93e9a8d42c4baestevel "\n"
03831d35f7499c87d51205817c93e9a8d42c4baestevel "\n"));
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(fmt, "", "", "", "CPU", "CPU", 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(fmt, "Location", "CPU", "Freq",
03831d35f7499c87d51205817c93e9a8d42c4baestevel "Implementation", "Mask", 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(fmt, "------------", "-----", "--------",
03831d35f7499c87d51205817c93e9a8d42c4baestevel "-------------------", "-----", 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) picl_walk_tree_by_class(plafh, "cpu", "cpu", sun4v_display_cpus);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display the CPUs present on this board.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*ARGSUSED*/
03831d35f7499c87d51205817c93e9a8d42c4baestevelint
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display_cpus(picl_nodehdl_t cpuh, void* args)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel int status;
03831d35f7499c87d51205817c93e9a8d42c4baestevel picl_prophdl_t proph;
03831d35f7499c87d51205817c93e9a8d42c4baestevel picl_prophdl_t tblh;
03831d35f7499c87d51205817c93e9a8d42c4baestevel picl_prophdl_t rowproph;
03831d35f7499c87d51205817c93e9a8d42c4baestevel picl_propinfo_t propinfo;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int *int_value;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t cpuid, mask_no;
03831d35f7499c87d51205817c93e9a8d42c4baestevel char *comp_value;
03831d35f7499c87d51205817c93e9a8d42c4baestevel char *no_prop_value = " ";
03831d35f7499c87d51205817c93e9a8d42c4baestevel char freq_str[MAXSTRLEN];
03831d35f7499c87d51205817c93e9a8d42c4baestevel char fru_name[MAXSTRLEN];
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Get cpuid property and print it and the NAC name
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "cpuid", &propinfo, &proph);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status == PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, &cpuid, sizeof (cpuid));
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%-12s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%6s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else {
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) snprintf(fru_name, sizeof (fru_name), "%s%d",
03831d35f7499c87d51205817c93e9a8d42c4baestevel CPU_STRAND_NAC, (int)cpuid);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%-12s", fru_name);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%6d", (int)cpuid);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%-12s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%6s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelclock_freq:
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "clock-frequency", &propinfo,
03831d35f7499c87d51205817c93e9a8d42c4baestevel &proph);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status == PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel int_value = malloc(propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (int_value == NULL) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%9s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto compatible;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, int_value, propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%9s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else {
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Running frequency */
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) snprintf(freq_str, sizeof (freq_str), "%d MHz",
03831d35f7499c87d51205817c93e9a8d42c4baestevel CLK_FREQ_TO_MHZ(*int_value));
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%9s", freq_str);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel free(int_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%9s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelcompatible:
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "compatible", &propinfo,
03831d35f7499c87d51205817c93e9a8d42c4baestevel &proph);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status == PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (propinfo.type == PICL_PTYPE_CHARSTRING) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Compatible Property only has 1 value
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel comp_value = malloc(propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (comp_value == NULL) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto mask;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, comp_value,
03831d35f7499c87d51205817c93e9a8d42c4baestevel propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status == PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel free(comp_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else if (propinfo.type == PICL_PTYPE_TABLE) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Compatible Property has multiple values
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, &tblh, propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel printf("Failed getting tblh\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto mask;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_next_by_row(tblh, &rowproph);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel printf("Failed getting next by row\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto mask;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo(rowproph, &propinfo);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel printf("Failed getting prop for rowproph\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto mask;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel comp_value = malloc(propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (comp_value == NULL) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel printf("Failed to get malloc value?\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto mask;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(rowproph, comp_value,
03831d35f7499c87d51205817c93e9a8d42c4baestevel propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel printf("Failed geting rowproph\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel free(comp_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel goto mask;
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", comp_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel free(comp_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%20s", no_prop_value, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelmask:
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "mask#", &propinfo, &proph);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status == PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, &mask_no, sizeof (mask_no));
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (status != PICL_SUCCESS) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%9s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else {
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf(dgettext(TEXT_DOMAIN, " %2d.%d"),
03831d35f7499c87d51205817c93e9a8d42c4baestevel (mask_no>> 4) & 0xf, mask_no & 0xf);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%9s", no_prop_value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveldone:
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("\n");
03831d35f7499c87d51205817c93e9a8d42c4baestevel return (PICL_WALK_CONTINUE);
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display_diaginfo(int flag, Prom_node *root, picl_nodehdl_t plafh)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef lint
03831d35f7499c87d51205817c93e9a8d42c4baestevel flag = flag;
03831d35f7499c87d51205817c93e9a8d42c4baestevel root = root;
03831d35f7499c87d51205817c93e9a8d42c4baestevel plafh = plafh;
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel /*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This function is intentionally empty
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid
03831d35f7499c87d51205817c93e9a8d42c4baesteveldisplay_boardnum(int num)
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel log_printf("%2d ", num, 0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel}