103831d35Sstevel /*
203831d35Sstevel  * CDDL HEADER START
303831d35Sstevel  *
403831d35Sstevel  * The contents of this file are subject to the terms of the
503831d35Sstevel  * Common Development and Distribution License, Version 1.0 only
603831d35Sstevel  * (the "License").  You may not use this file except in compliance
703831d35Sstevel  * with the License.
803831d35Sstevel  *
903831d35Sstevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1003831d35Sstevel  * or http://www.opensolaris.org/os/licensing.
1103831d35Sstevel  * See the License for the specific language governing permissions
1203831d35Sstevel  * and limitations under the License.
1303831d35Sstevel  *
1403831d35Sstevel  * When distributing Covered Code, include this CDDL HEADER in each
1503831d35Sstevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1603831d35Sstevel  * If applicable, add the following below this CDDL HEADER, with the
1703831d35Sstevel  * fields enclosed by brackets "[]" replaced with your own identifying
1803831d35Sstevel  * information: Portions Copyright [yyyy] [name of copyright owner]
1903831d35Sstevel  *
2003831d35Sstevel  * CDDL HEADER END
2103831d35Sstevel  */
2203831d35Sstevel /*
2303831d35Sstevel  * Copyright (c) 1999 by Sun Microsystems, Inc.
2403831d35Sstevel  * All rights reserved.
25*2bcbf80cSPeter Tribble  * Copyright (c) 2020 Peter Tribble.
2603831d35Sstevel  */
2703831d35Sstevel 
2803831d35Sstevel #ifndef	_PDEVINFO_SUN4U_H
2903831d35Sstevel #define	_PDEVINFO_SUN4U_H
3003831d35Sstevel 
3103831d35Sstevel #include <sys/obpdefs.h>
3203831d35Sstevel #include <sys/envctrl_gen.h>
3303831d35Sstevel #include <sys/envctrl_ue250.h>
3403831d35Sstevel #include <sys/envctrl_ue450.h>
3503831d35Sstevel 
3603831d35Sstevel #ifdef	__cplusplus
3703831d35Sstevel extern "C" {
3803831d35Sstevel #endif
3903831d35Sstevel 
40*2bcbf80cSPeter Tribble /*
41*2bcbf80cSPeter Tribble  * These were formerly defined in sys/ac.h, which was specific to sunfire,
42*2bcbf80cSPeter Tribble  * but usage has leaked into generic code.
43*2bcbf80cSPeter Tribble  */
44*2bcbf80cSPeter Tribble #ifndef	TRUE
45*2bcbf80cSPeter Tribble #define	TRUE (1)
46*2bcbf80cSPeter Tribble #endif
47*2bcbf80cSPeter Tribble #ifndef	FALSE
48*2bcbf80cSPeter Tribble #define	FALSE (0)
49*2bcbf80cSPeter Tribble #endif
50*2bcbf80cSPeter Tribble 
51*2bcbf80cSPeter Tribble /*
52*2bcbf80cSPeter Tribble  * These were formerly defined as part of the board_type enum in sys/fhc.h,
53*2bcbf80cSPeter Tribble  * which was specific to sunfire, but usage has leaked into generic code.
54*2bcbf80cSPeter Tribble  */
55*2bcbf80cSPeter Tribble #define UNKNOWN_BOARD 1
56*2bcbf80cSPeter Tribble #define CPU_BOARD 2
5703831d35Sstevel 
5803831d35Sstevel /* Define names of nodes to search for */
5903831d35Sstevel #define	SBUS_NAME	"sbus"
6003831d35Sstevel #define	PCI_NAME	"pci"
6103831d35Sstevel #define	FFB_NAME	"SUNW,ffb"
6203831d35Sstevel #define	AFB_NAME	"SUNW,afb"
6303831d35Sstevel 
6403831d35Sstevel /* Environmental info for Tazmo */
6503831d35Sstevel struct envctrl_kstat_data {
6603831d35Sstevel 	envctrl_ps_t ps_kstats[MAX_DEVS];  /* kstats for powersupplies */
6703831d35Sstevel 	envctrl_fan_t fan_kstats[MAX_DEVS]; /* kstats for fans */
6803831d35Sstevel 	envctrl_encl_t encl_kstats[MAX_DEVS]; /* kstats for enclosure */
6903831d35Sstevel };
7003831d35Sstevel 
7103831d35Sstevel /* Environmental info for Javelin */
7203831d35Sstevel struct envctrltwo_kstat_data {
7303831d35Sstevel 	envctrl_ps2_t ps_kstats[MAX_DEVS];	/* kstats for powersupplies */
7403831d35Sstevel 	int num_ps_kstats;
7503831d35Sstevel 	envctrl_fan_t fan_kstats[MAX_DEVS]; /* kstats for fans */
7603831d35Sstevel 	int num_fan_kstats;
7703831d35Sstevel 	envctrl_encl_t encl_kstats[MAX_DEVS]; /* kstats for enclosure */
7803831d35Sstevel 	int num_encl_kstats;
7903831d35Sstevel 	envctrl_temp_t temp_kstats[MAX_DEVS]; /* kstats for temperatures */
8003831d35Sstevel 	int num_temp_kstats;
8103831d35Sstevel 	envctrl_disk_t disk_kstats[MAX_DEVS]; /* kstats for disks */
8203831d35Sstevel 	int num_disk_kstats;
8303831d35Sstevel };
8403831d35Sstevel 
8503831d35Sstevel struct system_kstat_data {
8603831d35Sstevel 	int	sys_kstats_ok;	/* successful kstat read occurred */
8703831d35Sstevel 	struct envctrl_kstat_data env_data;  /* environment data for Tazmo */
8803831d35Sstevel 	int	envctrl_kstat_ok;
8903831d35Sstevel 	struct envctrltwo_kstat_data envc_data;  /* environ data for Javelin */
9003831d35Sstevel 	int	envctrltwo_kstat_ok;
9103831d35Sstevel };
9203831d35Sstevel 
9303831d35Sstevel #define	MAXSTRLEN	256
9403831d35Sstevel 
9503831d35Sstevel /* FFB info structure */
9603831d35Sstevel struct ffbinfo {
9703831d35Sstevel 	int board;
9803831d35Sstevel 	int upa_id;
9903831d35Sstevel 	char *dev;
10003831d35Sstevel 	struct ffbinfo *next;
10103831d35Sstevel };
10203831d35Sstevel 
10303831d35Sstevel /* FFB strap reg union */
10403831d35Sstevel union strap_un {
10503831d35Sstevel 	struct {
10603831d35Sstevel 		uint_t	unused:24;
10703831d35Sstevel 		uint_t	afb_flag:1;
10803831d35Sstevel 		uint_t	major_rev:2;
10903831d35Sstevel 		uint_t	board_rev:2;
11003831d35Sstevel 		uint_t	board_mem:1;
11103831d35Sstevel 		uint_t	cbuf:1;
11203831d35Sstevel 		uint_t	bbuf:1;
11303831d35Sstevel 	} fld;
11403831d35Sstevel 	uint_t ffb_strap_bits;
11503831d35Sstevel };
11603831d35Sstevel 
11703831d35Sstevel /* known values for manufacturer's JED code */
11803831d35Sstevel #define	MANF_BROOKTREE	214
11903831d35Sstevel #define	MANF_MITSUBISHI	28
12003831d35Sstevel 
12103831d35Sstevel /* FFB mnufacturer union */
12203831d35Sstevel union manuf {
12303831d35Sstevel 	struct {
12403831d35Sstevel 		uint_t version:4;	/* version of part number */
12503831d35Sstevel 		uint_t partno:16;	/* part number */
12603831d35Sstevel 		uint_t manf:11;		/* manufacturer's JED code */
12703831d35Sstevel 		uint_t one:1;		/* always set to '1' */
12803831d35Sstevel 	} fld;
12903831d35Sstevel 	uint_t encoded_id;
13003831d35Sstevel };
13103831d35Sstevel 
13203831d35Sstevel #define	FFBIOC		('F' << 8)
13303831d35Sstevel #define	FFB_SYS_INFO	(FFBIOC| 80)
13403831d35Sstevel 
13503831d35Sstevel struct ffb_sys_info {
13603831d35Sstevel 	unsigned int	ffb_strap_bits;	/* ffb_strapping register	*/
13703831d35Sstevel #define	FFB_B_BUFF	0x01		/* B buffer present		*/
13803831d35Sstevel #define	FFB_C_BUFF	0x02		/* C buffer present		*/
13903831d35Sstevel #define	FB_TYPE_AFB	0x80		/* AFB or FFB			*/
14003831d35Sstevel 	unsigned int	fbc_version;	/* revision of FBC chip		*/
14103831d35Sstevel 	unsigned int	dac_version;	/* revision of DAC chip		*/
14203831d35Sstevel 	unsigned int	fbram_version;	/* revision of FBRAMs chip	*/
14303831d35Sstevel 	unsigned int	flags;		/* miscellaneous flags		*/
14403831d35Sstevel #define	FFB_KSIM	0x00000001	/* kernel simulator		*/
14503831d35Sstevel #define	FFB_PAGE_FILL_BUG 0x00000002	/* FBRAM has page fill bug	*/
14603831d35Sstevel 	unsigned int	afb_nfloats;	/* no. of Float asics in AFB	*/
14703831d35Sstevel 	unsigned int	pad[58];	/* padding for AFB chips & misc. */
14803831d35Sstevel };
14903831d35Sstevel 
15003831d35Sstevel int get_id(Prom_node *);
15103831d35Sstevel 
15203831d35Sstevel #ifdef	__cplusplus
15303831d35Sstevel }
15403831d35Sstevel #endif
15503831d35Sstevel 
15603831d35Sstevel #endif	/* _PDEVINFO_SUN4U_H */
157