Home | History | Annotate | Download | only in inc
      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, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright (c) 1999 by Sun Microsystems, Inc.
     24  * All rights reserved.
     25  */
     26 
     27 #ifndef	_PDEVINFO_SUN4U_H
     28 #define	_PDEVINFO_SUN4U_H
     29 
     30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31 
     32 #include <sys/obpdefs.h>
     33 #include <sys/fhc.h>
     34 #include <sys/sysctrl.h>
     35 #include <sys/environ.h>
     36 #include <sys/envctrl_gen.h>
     37 #include <sys/envctrl_ue250.h>
     38 #include <sys/envctrl_ue450.h>
     39 #include <sys/simmstat.h>
     40 #include <sys/ac.h>
     41 #include <sys/sram.h>
     42 #include <reset_info.h>
     43 
     44 #ifdef	__cplusplus
     45 extern "C" {
     46 #endif
     47 
     48 #define	UNIX	"unix"
     49 
     50 /* Define names of nodes to search for */
     51 #define	CPU_NAME	"SUNW,UltraSPARC"
     52 #define	SBUS_NAME	"sbus"
     53 #define	PCI_NAME	"pci"
     54 #define	FFB_NAME	"SUNW,ffb"
     55 #define	AFB_NAME	"SUNW,afb"
     56 
     57 struct mem_stat_data {
     58 	enum ac_bank_status status;	/* bank status values */
     59 	enum ac_bank_condition condition;	/* bank conditions */
     60 };
     61 
     62 struct bd_kstat_data {
     63 	u_longlong_t 	ac_memctl;	/* Memctl register contents */
     64 	u_longlong_t 	ac_memdecode[2]; /* memory decode registers . */
     65 	int	ac_kstats_ok;	/* successful kstat read occurred */
     66 	uint_t	fhc_bsr;	/* FHC Board Status Register */
     67 	uint_t	fhc_csr;	/* FHC Control Status Register */
     68 	int	fhc_kstats_ok;	/* successful kstat read occurred */
     69 	uchar_t	simm_status[SIMM_COUNT];	/* SIMM status */
     70 	int	simmstat_kstats_ok;	/* successful read occurred */
     71 	struct temp_stats tempstat;
     72 	int	temp_kstat_ok;
     73 	struct	mem_stat_data	mem_stat[2];	/* raw kstat bank information */
     74 	int	ac_memstat_ok;	/* successful read of memory status */
     75 };
     76 
     77 /*
     78  * Hot plug info structure. If a hotplug kstat is found, the bd_info
     79  * structure from the kstat is filled in the the hp_info structure
     80  * is marked OK.
     81  */
     82 struct hp_info {
     83 	struct bd_info bd_info;
     84 	int kstat_ok;
     85 };
     86 
     87 /* Environmental info for Tazmo */
     88 struct envctrl_kstat_data {
     89 	envctrl_ps_t ps_kstats[MAX_DEVS];  /* kstats for powersupplies */
     90 	envctrl_fan_t fan_kstats[MAX_DEVS]; /* kstats for fans */
     91 	envctrl_encl_t encl_kstats[MAX_DEVS]; /* kstats for enclosure */
     92 };
     93 
     94 /* Environmental info for Javelin */
     95 struct envctrltwo_kstat_data {
     96 	envctrl_ps2_t ps_kstats[MAX_DEVS];	/* kstats for powersupplies */
     97 	int num_ps_kstats;
     98 	envctrl_fan_t fan_kstats[MAX_DEVS]; /* kstats for fans */
     99 	int num_fan_kstats;
    100 	envctrl_encl_t encl_kstats[MAX_DEVS]; /* kstats for enclosure */
    101 	int num_encl_kstats;
    102 	envctrl_temp_t temp_kstats[MAX_DEVS]; /* kstats for temperatures */
    103 	int num_temp_kstats;
    104 	envctrl_disk_t disk_kstats[MAX_DEVS]; /* kstats for disks */
    105 	int num_disk_kstats;
    106 };
    107 
    108 struct system_kstat_data {
    109 	uchar_t	sysctrl;	/* sysctrl register contents */
    110 	uchar_t	sysstat1;	/* system status1 register contents. */
    111 	uchar_t	sysstat2;	/* system status2 register contents. */
    112 	uchar_t ps_shadow[SYS_PS_COUNT];	/* power supply shadow */
    113 	int	psstat_kstat_ok;
    114 	uchar_t	clk_freq2;	/* clock frequency register 2 contents */
    115 	uchar_t	fan_status;	/* shadow fan status */
    116 	uchar_t	keysw_status;	/* status of the key switch */
    117 	enum power_state power_state;	/* redundant power state */
    118 	uchar_t	clk_ver;	/* clock version register */
    119 	int	sys_kstats_ok;	/* successful kstat read occurred */
    120 	struct temp_stats tempstat;
    121 	int	temp_kstat_ok;
    122 	struct reset_info reset_info;
    123 	int	reset_kstats_ok;	/* kstat read OK */
    124 	struct bd_kstat_data bd_ksp_list[MAX_BOARDS];
    125 	struct hp_info hp_info[MAX_BOARDS];
    126 	struct ft_list *ft_array;	/* fault array */
    127 	int	nfaults;		/* number of faults in fault array */
    128 	int	ft_kstat_ok;		/* Fault kstats OK */
    129 	struct envctrl_kstat_data env_data;  /* environment data for Tazmo */
    130 	int	envctrl_kstat_ok;
    131 	struct envctrltwo_kstat_data envc_data;  /* environ data for Javelin */
    132 	int	envctrltwo_kstat_ok;
    133 };
    134 
    135 /* Description of a single memory group */
    136 struct grp {
    137 	int valid;			/* active memory group present */
    138 	u_longlong_t  base;		/* Phyiscal base of group */
    139 	uint_t size;			/* size in bytes */
    140 	uint_t curr_size;		/* current size in bytes */
    141 	int board;			/* board number */
    142 	enum board_type type;		/* board type */
    143 	int group;			/* group # on board (0 or 1) */
    144 	int factor;			/* interleave factor (0,2,4,8,16) */
    145 	int speed;			/* Memory speed (in ns) */
    146 	char groupid;			/* Alpha tag for group ID */
    147 	enum ac_bank_status status;	/* bank status values */
    148 	enum ac_bank_condition condition;	/* bank conditions */
    149 };
    150 
    151 #define	MAX_GROUPS	32
    152 #define	MAXSTRLEN	256
    153 
    154 /* Array of all possible groups in the system. */
    155 struct grp_info {
    156 	struct grp grp[MAX_GROUPS];
    157 };
    158 
    159 /* A memory interleave structure */
    160 struct inter_grp {
    161 	u_longlong_t base;	/* Physical base of group */
    162 	int valid;
    163 	int count;
    164 	char groupid;
    165 };
    166 
    167 /* Array of all possible memory interleave structures */
    168 struct mem_inter {
    169 	struct inter_grp i_grp[MAX_GROUPS];
    170 };
    171 
    172 /* FFB info structure */
    173 struct ffbinfo {
    174 	int board;
    175 	int upa_id;
    176 	char *dev;
    177 	struct ffbinfo *next;
    178 };
    179 
    180 /* FFB strap reg union */
    181 union strap_un {
    182 	struct {
    183 		uint_t	unused:24;
    184 		uint_t	afb_flag:1;
    185 		uint_t	major_rev:2;
    186 		uint_t	board_rev:2;
    187 		uint_t	board_mem:1;
    188 		uint_t	cbuf:1;
    189 		uint_t	bbuf:1;
    190 	} fld;
    191 	uint_t ffb_strap_bits;
    192 };
    193 
    194 /* known values for manufacturer's JED code */
    195 #define	MANF_BROOKTREE	214
    196 #define	MANF_MITSUBISHI	28
    197 
    198 /* FFB mnufacturer union */
    199 union manuf {
    200 	struct {
    201 		uint_t version:4;	/* version of part number */
    202 		uint_t partno:16;	/* part number */
    203 		uint_t manf:11;		/* manufacturer's JED code */
    204 		uint_t one:1;		/* always set to '1' */
    205 	} fld;
    206 	uint_t encoded_id;
    207 };
    208 
    209 #define	FFBIOC		('F' << 8)
    210 #define	FFB_SYS_INFO	(FFBIOC| 80)
    211 
    212 struct ffb_sys_info {
    213 	unsigned int	ffb_strap_bits;	/* ffb_strapping register	*/
    214 #define	FFB_B_BUFF	0x01		/* B buffer present		*/
    215 #define	FFB_C_BUFF	0x02		/* C buffer present		*/
    216 #define	FB_TYPE_AFB	0x80		/* AFB or FFB			*/
    217 	unsigned int	fbc_version;	/* revision of FBC chip		*/
    218 	unsigned int	dac_version;	/* revision of DAC chip		*/
    219 	unsigned int	fbram_version;	/* revision of FBRAMs chip	*/
    220 	unsigned int	flags;		/* miscellaneous flags		*/
    221 #define	FFB_KSIM	0x00000001	/* kernel simulator		*/
    222 #define	FFB_PAGE_FILL_BUG 0x00000002	/* FBRAM has page fill bug	*/
    223 	unsigned int	afb_nfloats;	/* no. of Float asics in AFB	*/
    224 	unsigned int	pad[58];	/* padding for AFB chips & misc. */
    225 };
    226 
    227 int get_id(Prom_node *);
    228 
    229 #ifdef	__cplusplus
    230 }
    231 #endif
    232 
    233 #endif	/* _PDEVINFO_SUN4U_H */
    234