display_sun4v.c revision 5e3e415a5bedb7bb9ff36b225630e414258e6ece
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Common Development and Distribution License (the "License").
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * You may not use this file except in compliance with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
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 * CDDL HEADER END
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Additional OBP properties
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki#define PICL_NODE_PHYSICAL_PLATFORM "physical-platform"
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Additional picl classes
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiextern picl_errno_t sun4v_get_node_by_name(picl_nodehdl_t, char *,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/* local functions */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkistatic int sun4v_get_first_compatible_value(picl_nodehdl_t, char **);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_display(Sys_tree *tree, Prom_node *root, int log,
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct mem_total memory_total; /* Total memory in system */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct grp_info grps; /* Info on all groups in system */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (sysinfo(SI_MACHINE, machine, sizeof (machine)) == -1)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki return (1);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (strncmp(machine, SUN4V_MACHINE, strlen(SUN4V_MACHINE)) != 0)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki return (1);
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Now display the machine's configuration. We do this if we
03831d35f7499c87d51205817c93e9a8d42c4baestevel * are not logging.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display system banner
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(dgettext(TEXT_DOMAIN, "System Configuration: "
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* display system clock frequency */
03831d35f7499c87d51205817c93e9a8d42c4baestevel value = get_prop_val(find_prop(root, "clock-frequency"));
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display the Memory Size */
03831d35f7499c87d51205817c93e9a8d42c4baestevel display_memorysize(tree, NULL, &grps, &memory_total);
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display the CPU devices */
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display the Memory configuration */
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Display all the IO cards. */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki sun4v_display_diaginfo((log || (logging)), root, plafh);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki return (1);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (sun4v_get_node_by_name(rooth, PICL_NODE_PHYSICAL_PLATFORM,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki return (1);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki return (1);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki return (0);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiget_bus_type(picl_nodehdl_t nodeh, struct io_card *card)
4c5e0fde93352f23abc94e445999402e38b91268vivek (void) strlcpy(card->bus_type, "PCIX", sizeof (card->bus_type));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (sun4v_get_first_compatible_value(nodeh, &compatible)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiget_slot_label(picl_nodehdl_t nodeh, struct io_card *card)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_LABEL, val,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (val));
4c5e0fde93352f23abc94e445999402e38b91268vivek (void) strlcpy(card->slot_str, val, sizeof (card->slot_str));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkiget_slot_number(picl_nodehdl_t nodeh, struct io_card *card)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (picl_get_propval_by_name(nodeh, PICL_PROP_PARENT, &pnodeh,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (picl_get_propinfo_by_name(pnodeh, OBP_PROP_SLOT_NAMES,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (picl_get_propval_by_name(nodeh, PICL_PROP_UNIT_ADDRESS, uaddr,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if (picl_get_propval(proph, pval, pinfo.size) != PICL_SUCCESS) {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki for (i = 0; i < sizeof (dev_mask); i++)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki for (i = 0; i < sizeof (uaddr) && uaddr[i] != '\0'; i++) {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki while (x != 0) {
a90d965d832a5578dbfc2eadd1617e8cccf25264fw while (p[i++] != '\0')
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * add all io devices under pci in io list
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/* ARGSUSED */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Walk through the children */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(pcih, PICL_PROP_CHILD, &nodeh,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_CLASSNAME,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_DEVFS_PATH,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) strlcpy(pci_card.notes, path, sizeof (pci_card.notes));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_NAME, name,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (name));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_STATUS, val,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (val));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Figure NAC name */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Get the name of this card. If binding_name is found,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * name will be <nodename>-<binding_name>.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_BINDING_NAME,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (name));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * if compatible prop is not found, name will be
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * <nodename>-<compatible>
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (name));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) strlcpy(pci_card.name, name, sizeof (pci_card.name));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Get the model of this card */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) strlcpy(pci_card.model, model, sizeof (pci_card.model));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Print NAC name */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Print IO Type */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Printf Card Name */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Print Card Model */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Print Status */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Print IO Type */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Print Parent Path */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_PEER, &nodeh,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * display_pci
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display all the PCI IO cards on this board.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* Have we printed the column headings? */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(fmt, "Slot +", "Bus", "Name +", "Model", 0);
aaba19e23c48a32e927f4e39464be188bfcbef37fw "-------------------------------------------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(plafh, PICL_CLASS_PCIEX,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(plafh, PICL_CLASS_SUN4V,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * return the first compatible value
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_get_first_compatible_value(picl_nodehdl_t nodeh, char **outbuf)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propinfo_by_name(nodeh, OBP_PROP_COMPATIBLE,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki /* get first string from table */
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * print size of a memory segment
a90d965d832a5578dbfc2eadd1617e8cccf25264fw * Enumerate banks and dimms within a memory segment. We're handed
a90d965d832a5578dbfc2eadd1617e8cccf25264fw * the first bank within the segment - we assume there are dimms
a90d965d832a5578dbfc2eadd1617e8cccf25264fw * (memory-module) nodes underneath.
a90d965d832a5578dbfc2eadd1617e8cccf25264fw if (picl_get_propval_by_name(bank_nodeh, PICL_PROP_CHILD,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw } while (picl_get_propval_by_name(module_nodeh, PICL_PROP_PEER,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw } while (picl_get_propval_by_name(bank_nodeh, PICL_PROP_PEER,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * Search node where _class=="memory-segment"
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * print "Base Address", "Size", etc
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*ARGSUSED*/
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_memory_conf_callback(picl_nodehdl_t nodeh, void *args)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_BASEADDRESS,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_PEER, &nodeh,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*ARGSUSED*/
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(plafh, PICL_CLASS_MEMORY_SEGMENT,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw "---------------------------------------------------------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(fmt, "Base Address", "Size", "Interleave Factor",
a90d965d832a5578dbfc2eadd1617e8cccf25264fw "Contains", 0);
a90d965d832a5578dbfc2eadd1617e8cccf25264fw "---------------------------------------------------------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(plafh, PICL_CLASS_MEMORY_SEGMENT,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display the table header for CPUs . Then display the CPU
03831d35f7499c87d51205817c93e9a8d42c4baestevel * frequency, cache size, and processor revision of all cpus.
a90d965d832a5578dbfc2eadd1617e8cccf25264fw "========================="
a90d965d832a5578dbfc2eadd1617e8cccf25264fw "==============================================="
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) picl_walk_tree_by_class(plafh, "cpu", "cpu", sun4v_display_cpus);
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Display the CPUs present on this board.
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*ARGSUSED*/
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Get cpuid property and print it and the NAC name
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "cpuid", &propinfo, &proph);
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, &cpuid, sizeof (cpuid));
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "clock-frequency", &propinfo,
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, int_value, propinfo.size);
03831d35f7499c87d51205817c93e9a8d42c4baestevel /* Running frequency */
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) snprintf(freq_str, sizeof (freq_str), "%d MHz",
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propinfo_by_name(cpuh, "compatible", &propinfo,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Compatible Property only has 1 value
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Compatible Property has multiple values
03831d35f7499c87d51205817c93e9a8d42c4baestevel status = picl_get_propval(proph, &tblh, propinfo.size);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw status = picl_get_propinfo_by_name(cpuh, PICL_PROP_STATE,
03831d35f7499c87d51205817c93e9a8d42c4baestevelsun4v_display_diaginfo(int flag, Prom_node *root, picl_nodehdl_t plafh)
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This function is intentionally empty
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*ARGSUSED*/
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_env_print_sensor_callback(picl_nodehdl_t nodeh, void *args)
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (val));
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (picl_get_propval_by_name(nodeh, PICL_PROP_LOW_WARNING,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (picl_get_propval_by_name(nodeh, PICL_PROP_LOW_SHUTDOWN,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (picl_get_propval_by_name(nodeh, PICL_PROP_HIGH_WARNING,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (picl_get_propval_by_name(nodeh, PICL_PROP_HIGH_SHUTDOWN,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (syserrlog == 0) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * If we're here then prtdiag was invoked with "-v" or we have
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * a sensor that is beyond a threshold, so give them a book to
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * read instead of the Cliff Notes.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_PARENT, &parenth,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw /* gather up the path name for the sensor */
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if ((loc = (char *)malloc(PICL_PROPNAMELEN_MAX*PARENT_NAMES)) != NULL) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw for (i = 0; i < PARENT_NAMES; i++) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw while (--i > -1)
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (loc != 0) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (--i > -1) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw while (--i > -1) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw for (i = 0; i < PARENT_NAMES; i++)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_LABEL, val,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (val));
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * Get the exponent if present, and do a little math so that
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * if we need to we can print a normalized value for the
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * sensor reading.
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw err = picl_get_propval_by_name(nodeh, PICL_PROP_BASE_UNITS,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*ARGSUSED*/
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_env_print_indicator_callback(picl_nodehdl_t nodeh, void *args)
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw sizeof (current_val)) == 0) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (syserrlog == 0) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * If we're here then prtdiag was invoked with "-v" or we have
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * a sensor that is beyond a threshold, so give them a book to
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw * read instead of the Cliff Notes.
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_PARENT, &parenth,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if ((loc = (char *)malloc(PICL_PROPNAMELEN_MAX*PARENT_NAMES)) != NULL) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw for (i = 0; i < PARENT_NAMES; i++) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw while (--i > -1)
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw if (--i > -1) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw while (--i > -1) {
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw for (i = 0; i < PARENT_NAMES; i++)
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw err = picl_get_propval_by_name(nodeh, PICL_PROP_LABEL, label,
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw sizeof (label));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki * If there isn't any fan sensor node, return now.
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, PICL_CLASS_RPM_SENSOR,
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(fmt, "Location", "Sensor", "Condition", 0);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, PICL_CLASS_RPM_INDICATOR,
aaba19e23c48a32e927f4e39464be188bfcbef37fw (void *)PICL_PROP_CONDITION, sun4v_env_print_indicator_callback);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
a90d965d832a5578dbfc2eadd1617e8cccf25264fw (void *)PICL_PROP_TEMPERATURE, sun4v_env_print_sensor_callback);
a90d965d832a5578dbfc2eadd1617e8cccf25264fw PICL_CLASS_TEMPERATURE_INDICATOR, (void *)PICL_PROP_CONDITION,
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(fmt, "Location", "Indicator", "Condition", 0);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, PICL_CLASS_CURRENT_SENSOR,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw (void *)PICL_PROP_CURRENT, sun4v_env_print_sensor_callback);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw PICL_CLASS_CURRENT_INDICATOR, (void *)PICL_PROP_CONDITION,
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(fmt, "Location", "Indicator", "Condition", 0);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
a42ff480eab7fd4f2b53fe8e9bdb1b57f0cf64dafw PICL_CLASS_VOLTAGE_INDICATOR, (void *)PICL_PROP_CONDITION,
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki log_printf(fmt, "Location", "Indicator", "Condition", 0);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, PICL_CLASS_LED,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw (void *)PICL_PROP_STATE, sun4v_env_print_indicator_callback);
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, PICL_CLASS_LED,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw (void *)PICL_PROP_STATE, sun4v_env_print_indicator_callback);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*ARGSUSED*/
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_print_fru_status_callback(picl_nodehdl_t nodeh, void *args)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_prop_by_name(nodeh, PICL_PROP_IS_FRU, &proph);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_LABEL, label,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (label));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_OPERATIONAL_STATUS,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_PARENT, &parenth,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if ((loc = (char *)malloc(PICL_PROPNAMELEN_MAX*PARENT_NAMES)) == NULL)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki for (i = 0; i < PARENT_NAMES; i++)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki if ((names[i] = (char *)malloc(PICL_PROPNAMELEN_MAX)) == NULL) {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki while (--i > -1)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(parenth, PICL_PROP_NAME,
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(parenth, PICL_PROP_PARENT,
4c5e0fde93352f23abc94e445999402e38b91268vivek if (--i > -1) {
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki while (--i > -1) {
4c5e0fde93352f23abc94e445999402e38b91268vivek (void) strlcat(loc, "/", PICL_PROPNAMELEN_MAX * PARENT_NAMES);
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki for (i = 0; i < PARENT_NAMES; i++)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, NULL, NULL,
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("------------------------------------------------------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki/*ARGSUSED*/
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenkisun4v_print_fw_rev_callback(picl_nodehdl_t nodeh, void *args)
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_LABEL, label,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (label));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki err = picl_get_propval_by_name(nodeh, PICL_PROP_FW_REVISION, rev,
a90d965d832a5578dbfc2eadd1617e8cccf25264fw sizeof (rev));
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, NULL, NULL,
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw log_printf("-------------------------------------------------"
5e3e415a5bedb7bb9ff36b225630e414258e6ecefw "-----------\n");
0d63ce2b32a9e1cc8ed71d4d92536c44d66a530avenki (void) picl_walk_tree_by_class(phyplatformh, NULL, NULL,