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 (c) 1999 by Sun Microsystems, Inc.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifndef _PDEVINFO_SUN4U_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _PDEVINFO_SUN4U_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/obpdefs.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/fhc.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/sysctrl.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/environ.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/envctrl_gen.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/envctrl_ue250.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/envctrl_ue450.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/simmstat.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/ac.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <sys/sram.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <reset_info.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define UNIX "unix"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Define names of nodes to search for */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define CPU_NAME "SUNW,UltraSPARC"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define SBUS_NAME "sbus"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define PCI_NAME "pci"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFB_NAME "SUNW,ffb"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define AFB_NAME "SUNW,afb"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct mem_stat_data {
03831d35f7499c87d51205817c93e9a8d42c4baestevel enum ac_bank_status status; /* bank status values */
03831d35f7499c87d51205817c93e9a8d42c4baestevel enum ac_bank_condition condition; /* bank conditions */
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct bd_kstat_data {
03831d35f7499c87d51205817c93e9a8d42c4baestevel u_longlong_t ac_memctl; /* Memctl register contents */
03831d35f7499c87d51205817c93e9a8d42c4baestevel u_longlong_t ac_memdecode[2]; /* memory decode registers . */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ac_kstats_ok; /* successful kstat read occurred */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t fhc_bsr; /* FHC Board Status Register */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t fhc_csr; /* FHC Control Status Register */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int fhc_kstats_ok; /* successful kstat read occurred */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t simm_status[SIMM_COUNT]; /* SIMM status */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int simmstat_kstats_ok; /* successful read occurred */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct temp_stats tempstat;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int temp_kstat_ok;
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct mem_stat_data mem_stat[2]; /* raw kstat bank information */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ac_memstat_ok; /* successful read of memory status */
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Hot plug info structure. If a hotplug kstat is found, the bd_info
03831d35f7499c87d51205817c93e9a8d42c4baestevel * structure from the kstat is filled in the the hp_info structure
03831d35f7499c87d51205817c93e9a8d42c4baestevel * is marked OK.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct hp_info {
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct bd_info bd_info;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int kstat_ok;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Environmental info for Tazmo */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct envctrl_kstat_data {
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_ps_t ps_kstats[MAX_DEVS]; /* kstats for powersupplies */
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_fan_t fan_kstats[MAX_DEVS]; /* kstats for fans */
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_encl_t encl_kstats[MAX_DEVS]; /* kstats for enclosure */
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Environmental info for Javelin */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct envctrltwo_kstat_data {
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_ps2_t ps_kstats[MAX_DEVS]; /* kstats for powersupplies */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int num_ps_kstats;
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_fan_t fan_kstats[MAX_DEVS]; /* kstats for fans */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int num_fan_kstats;
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_encl_t encl_kstats[MAX_DEVS]; /* kstats for enclosure */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int num_encl_kstats;
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_temp_t temp_kstats[MAX_DEVS]; /* kstats for temperatures */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int num_temp_kstats;
03831d35f7499c87d51205817c93e9a8d42c4baestevel envctrl_disk_t disk_kstats[MAX_DEVS]; /* kstats for disks */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int num_disk_kstats;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct system_kstat_data {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t sysctrl; /* sysctrl register contents */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t sysstat1; /* system status1 register contents. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t sysstat2; /* system status2 register contents. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t ps_shadow[SYS_PS_COUNT]; /* power supply shadow */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int psstat_kstat_ok;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t clk_freq2; /* clock frequency register 2 contents */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t fan_status; /* shadow fan status */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t keysw_status; /* status of the key switch */
03831d35f7499c87d51205817c93e9a8d42c4baestevel enum power_state power_state; /* redundant power state */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uchar_t clk_ver; /* clock version register */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int sys_kstats_ok; /* successful kstat read occurred */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct temp_stats tempstat;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int temp_kstat_ok;
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct reset_info reset_info;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int reset_kstats_ok; /* kstat read OK */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct bd_kstat_data bd_ksp_list[MAX_BOARDS];
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct hp_info hp_info[MAX_BOARDS];
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct ft_list *ft_array; /* fault array */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int nfaults; /* number of faults in fault array */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ft_kstat_ok; /* Fault kstats OK */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct envctrl_kstat_data env_data; /* environment data for Tazmo */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int envctrl_kstat_ok;
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct envctrltwo_kstat_data envc_data; /* environ data for Javelin */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int envctrltwo_kstat_ok;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Description of a single memory group */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct grp {
03831d35f7499c87d51205817c93e9a8d42c4baestevel int valid; /* active memory group present */
03831d35f7499c87d51205817c93e9a8d42c4baestevel u_longlong_t base; /* Phyiscal base of group */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t size; /* size in bytes */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t curr_size; /* current size in bytes */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int board; /* board number */
03831d35f7499c87d51205817c93e9a8d42c4baestevel enum board_type type; /* board type */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int group; /* group # on board (0 or 1) */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int factor; /* interleave factor (0,2,4,8,16) */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int speed; /* Memory speed (in ns) */
03831d35f7499c87d51205817c93e9a8d42c4baestevel char groupid; /* Alpha tag for group ID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel enum ac_bank_status status; /* bank status values */
03831d35f7499c87d51205817c93e9a8d42c4baestevel enum ac_bank_condition condition; /* bank conditions */
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAX_GROUPS 32
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAXSTRLEN 256
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Array of all possible groups in the system. */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct grp_info {
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct grp grp[MAX_GROUPS];
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* A memory interleave structure */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct inter_grp {
03831d35f7499c87d51205817c93e9a8d42c4baestevel u_longlong_t base; /* Physical base of group */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int valid;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int count;
03831d35f7499c87d51205817c93e9a8d42c4baestevel char groupid;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Array of all possible memory interleave structures */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct mem_inter {
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct inter_grp i_grp[MAX_GROUPS];
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* FFB info structure */
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct ffbinfo {
03831d35f7499c87d51205817c93e9a8d42c4baestevel int board;
03831d35f7499c87d51205817c93e9a8d42c4baestevel int upa_id;
03831d35f7499c87d51205817c93e9a8d42c4baestevel char *dev;
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct ffbinfo *next;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* FFB strap reg union */
03831d35f7499c87d51205817c93e9a8d42c4baestevelunion strap_un {
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t unused:24;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t afb_flag:1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t major_rev:2;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t board_rev:2;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t board_mem:1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t cbuf:1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t bbuf:1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel } fld;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t ffb_strap_bits;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* known values for manufacturer's JED code */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MANF_BROOKTREE 214
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MANF_MITSUBISHI 28
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* FFB mnufacturer union */
03831d35f7499c87d51205817c93e9a8d42c4baestevelunion manuf {
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t version:4; /* version of part number */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t partno:16; /* part number */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t manf:11; /* manufacturer's JED code */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t one:1; /* always set to '1' */
03831d35f7499c87d51205817c93e9a8d42c4baestevel } fld;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint_t encoded_id;
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFBIOC ('F' << 8)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFB_SYS_INFO (FFBIOC| 80)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstruct ffb_sys_info {
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int ffb_strap_bits; /* ffb_strapping register */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFB_B_BUFF 0x01 /* B buffer present */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFB_C_BUFF 0x02 /* C buffer present */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FB_TYPE_AFB 0x80 /* AFB or FFB */
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int fbc_version; /* revision of FBC chip */
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int dac_version; /* revision of DAC chip */
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int fbram_version; /* revision of FBRAMs chip */
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int flags; /* miscellaneous flags */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFB_KSIM 0x00000001 /* kernel simulator */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define FFB_PAGE_FILL_BUG 0x00000002 /* FBRAM has page fill bug */
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int afb_nfloats; /* no. of Float asics in AFB */
03831d35f7499c87d51205817c93e9a8d42c4baestevel unsigned int pad[58]; /* padding for AFB chips & misc. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel};
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelint get_id(Prom_node *);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _PDEVINFO_SUN4U_H */