xref: /illumos-gate/usr/src/uts/sun4u/sys/envctrl_gen.h (revision 29949e86)
1*29949e86Sstevel /*
2*29949e86Sstevel  * CDDL HEADER START
3*29949e86Sstevel  *
4*29949e86Sstevel  * The contents of this file are subject to the terms of the
5*29949e86Sstevel  * Common Development and Distribution License (the "License").
6*29949e86Sstevel  * You may not use this file except in compliance with the License.
7*29949e86Sstevel  *
8*29949e86Sstevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*29949e86Sstevel  * or http://www.opensolaris.org/os/licensing.
10*29949e86Sstevel  * See the License for the specific language governing permissions
11*29949e86Sstevel  * and limitations under the License.
12*29949e86Sstevel  *
13*29949e86Sstevel  * When distributing Covered Code, include this CDDL HEADER in each
14*29949e86Sstevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*29949e86Sstevel  * If applicable, add the following below this CDDL HEADER, with the
16*29949e86Sstevel  * fields enclosed by brackets "[]" replaced with your own identifying
17*29949e86Sstevel  * information: Portions Copyright [yyyy] [name of copyright owner]
18*29949e86Sstevel  *
19*29949e86Sstevel  * CDDL HEADER END
20*29949e86Sstevel  */
21*29949e86Sstevel 
22*29949e86Sstevel /*
23*29949e86Sstevel  * Copyright 1998 Sun Microsystems, Inc.  All rights reserved.
24*29949e86Sstevel  * Use is subject to license terms.
25*29949e86Sstevel  */
26*29949e86Sstevel 
27*29949e86Sstevel #ifndef	_SYS_ENVCTRL_GEN_H
28*29949e86Sstevel #define	_SYS_ENVCTRL_GEN_H
29*29949e86Sstevel 
30*29949e86Sstevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*29949e86Sstevel 
32*29949e86Sstevel #ifdef	__cplusplus
33*29949e86Sstevel extern "C" {
34*29949e86Sstevel #endif
35*29949e86Sstevel 
36*29949e86Sstevel /*
37*29949e86Sstevel  * envctrl_gen.h
38*29949e86Sstevel  *
39*29949e86Sstevel  * This header file holds the environmental control definitions that
40*29949e86Sstevel  * are common to all workgroup server platforms. Typically, all IOCTLs,
41*29949e86Sstevel  * kstat structures, and the generic constants are defined here.
42*29949e86Sstevel  * The platform specific definitions belong in header files which contain
43*29949e86Sstevel  * the platform name as part of the file name eg. envctrl_ue250.h for the
44*29949e86Sstevel  * UltraEnterprise-250 platform.
45*29949e86Sstevel  */
46*29949e86Sstevel 
47*29949e86Sstevel #define	ENVCTRL_NORMAL_MODE 0x01
48*29949e86Sstevel #define	ENVCTRL_DIAG_MODE 0x02
49*29949e86Sstevel #define	ENVCTRL_CHAR_ZERO 0x00
50*29949e86Sstevel #define	ENVCTRL_PS_550	550
51*29949e86Sstevel #define	ENVCTRL_PS_650	650
52*29949e86Sstevel #define	ENVCTRL_INIT_TEMPR	20
53*29949e86Sstevel #define	ENVCTRL_ULTRA1CPU_STRING	"SUNW,UltraSPARC"
54*29949e86Sstevel #define	ENVCTRL_ULTRA2CPU_STRING	"SUNW,UltraSPARC-II"
55*29949e86Sstevel 
56*29949e86Sstevel #define	ENVCTRL_MAX_CPUS	8
57*29949e86Sstevel #define	ENVCTRL_CPU0		0
58*29949e86Sstevel #define	ENVCTRL_CPU1		1
59*29949e86Sstevel #define	ENVCTRL_CPU2		2
60*29949e86Sstevel #define	ENVCTRL_CPU3		3
61*29949e86Sstevel #define	ENVCTRL_CPU4		4
62*29949e86Sstevel #define	ENVCTRL_CPU5		5
63*29949e86Sstevel #define	ENVCTRL_CPU6		6
64*29949e86Sstevel #define	ENVCTRL_CPU7		7
65*29949e86Sstevel 
66*29949e86Sstevel /*
67*29949e86Sstevel  * I2C Sensor Types
68*29949e86Sstevel  */
69*29949e86Sstevel 
70*29949e86Sstevel #define	ENVCTRL_PCD8584		0x00	/* Bus Controller Master */
71*29949e86Sstevel #define	ENVCTRL_PCF8591		0x01	/* Temp Sensor 8bit A/D, D/A */
72*29949e86Sstevel #define	ENVCTRL_PCF8574		0x02	/* PS, FAN, LED, Fail and Control */
73*29949e86Sstevel #define	ENVCTRL_TDA8444T	0x03	/* Fan Speed Control, 8 bit D/A */
74*29949e86Sstevel #define	ENVCTRL_PCF8574A	0x04	/* 8574A chip */
75*29949e86Sstevel #define	ENVCTRL_PCF8583		0x05	/* PCF8583 clock chip */
76*29949e86Sstevel #define	ENVCTRL_LM75		0x06	/* LM75 chip */
77*29949e86Sstevel 
78*29949e86Sstevel /*
79*29949e86Sstevel  * I2C device address offsets
80*29949e86Sstevel  */
81*29949e86Sstevel #define	ENVCTRL_DEV0		0x0
82*29949e86Sstevel #define	ENVCTRL_DEV1		0x2
83*29949e86Sstevel #define	ENVCTRL_DEV2		0x4
84*29949e86Sstevel #define	ENVCTRL_DEV3		0x6
85*29949e86Sstevel #define	ENVCTRL_DEV4		0x8
86*29949e86Sstevel #define	ENVCTRL_DEV5		0xA
87*29949e86Sstevel #define	ENVCTRL_DEV6		0xC
88*29949e86Sstevel #define	ENVCTRL_DEV7		0xE
89*29949e86Sstevel 
90*29949e86Sstevel /*
91*29949e86Sstevel  * I2C ports
92*29949e86Sstevel  */
93*29949e86Sstevel #define	ENVCTRL_PORT0		0x00
94*29949e86Sstevel #define	ENVCTRL_PORT1		0x01
95*29949e86Sstevel #define	ENVCTRL_PORT2		0x02
96*29949e86Sstevel #define	ENVCTRL_PORT3		0x03
97*29949e86Sstevel #define	ENVCTRL_PORT4		0x04
98*29949e86Sstevel #define	ENVCTRL_PORT5		0x05
99*29949e86Sstevel #define	ENVCTRL_PORT6		0x06
100*29949e86Sstevel #define	ENVCTRL_PORT7		0x07
101*29949e86Sstevel 
102*29949e86Sstevel /*
103*29949e86Sstevel  * Max number of a particular
104*29949e86Sstevel  * device on one bus.
105*29949e86Sstevel  */
106*29949e86Sstevel #define	ENVCTRL_MAX_DEVS	0x10
107*29949e86Sstevel #define	ENVCTRL_I2C_NODEV	0xFF
108*29949e86Sstevel #define	ENVCTRL_INSTANCE_0	0x00
109*29949e86Sstevel 
110*29949e86Sstevel /* Disk Fault bit fields */
111*29949e86Sstevel #define	ENVCTRL_DISK_0 0x01
112*29949e86Sstevel #define	ENVCTRL_DISK_1 0x02
113*29949e86Sstevel #define	ENVCTRL_DISK_2 0x04
114*29949e86Sstevel #define	ENVCTRL_DISK_3 0x08
115*29949e86Sstevel #define	ENVCTRL_DISK_4 0x10
116*29949e86Sstevel #define	ENVCTRL_DISK_5 0x20
117*29949e86Sstevel #define	ENVCTRL_DISK_6 0x40
118*29949e86Sstevel #define	ENVCTRL_DISK_7 0x80
119*29949e86Sstevel 
120*29949e86Sstevel #define	ENVCTRL_4SLOT_BACKPLANE	0x0F
121*29949e86Sstevel #define	ENVCTRL_8SLOT_BACKPLANE	0xFF
122*29949e86Sstevel 
123*29949e86Sstevel #define	ENVCTRL_DISK4LED_ALLOFF	0xF0
124*29949e86Sstevel #define	ENVCTRL_DISK6LED_ALLOFF	0xFC
125*29949e86Sstevel #define	ENVCTRL_DISK8LED_ALLOFF	0xFF
126*29949e86Sstevel 
127*29949e86Sstevel #define	ENVCTRL_MAXSTRLEN	256
128*29949e86Sstevel 
129*29949e86Sstevel /* Kstat Structures and defines */
130*29949e86Sstevel #define	ENVCTRL_FAN_TYPE_CPU	0x00
131*29949e86Sstevel #define	ENVCTRL_FAN_TYPE_PS	0x01
132*29949e86Sstevel #define	ENVCTRL_FAN_TYPE_AFB	0x02
133*29949e86Sstevel #define	ENVCTRL_FAN_TYPE_UE250	0x03
134*29949e86Sstevel 
135*29949e86Sstevel #define	ENVCTRL_MODULE_NAME		"envctrl"
136*29949e86Sstevel #define	ENVCTRL_KSTAT_NUMPS		"envctrl_numps"
137*29949e86Sstevel #define	ENVCTRL_KSTAT_PSNAME		"envctrl_pwrsupply"
138*29949e86Sstevel #define	ENVCTRL_KSTAT_PSNAME2		"envctrl_pwrsupply2"
139*29949e86Sstevel #define	ENVCTRL_KSTAT_NUMFANS		"envctrl_numfans"
140*29949e86Sstevel #define	ENVCTRL_KSTAT_FANSTAT		"envctrl_fanstat"
141*29949e86Sstevel #define	ENVCTRL_KSTAT_NUMENCLS		"envctrl_numencls"
142*29949e86Sstevel #define	ENVCTRL_KSTAT_ENCL		"envctrl_enclosure"
143*29949e86Sstevel #define	ENVCTRL_KSTAT_TEMPERATURE	"envctrl_temp"
144*29949e86Sstevel #define	ENVCTRL_KSTAT_DISK		"envctrl_disk"
145*29949e86Sstevel 
146*29949e86Sstevel /*
147*29949e86Sstevel  * Kstat structure definitions (PSARC 1996/159)
148*29949e86Sstevel  */
149*29949e86Sstevel typedef struct envctrl_ps {
150*29949e86Sstevel 	int instance;			/* instance of this type */
151*29949e86Sstevel 	ushort_t ps_tempr;		/* temperature */
152*29949e86Sstevel 	int ps_rating;			/* type in watts */
153*29949e86Sstevel 	boolean_t ps_ok;		/* normal state or not. */
154*29949e86Sstevel 	boolean_t curr_share_ok;	/* current share imbalance */
155*29949e86Sstevel 	boolean_t limit_ok;		/* overlimit warning */
156*29949e86Sstevel } envctrl_ps_t;
157*29949e86Sstevel 
158*29949e86Sstevel typedef struct envctrl_fan {
159*29949e86Sstevel 	int instance;			/* instance of this type */
160*29949e86Sstevel 	int type;			/* CPU, PS or AMBIENT fan */
161*29949e86Sstevel 	boolean_t fans_ok;		/* are the fans okay */
162*29949e86Sstevel 	int fanflt_num;			/* if not okay, which fan faulted */
163*29949e86Sstevel 	uint_t fanspeed;			/* chip to set speed of fans */
164*29949e86Sstevel } envctrl_fan_t;
165*29949e86Sstevel 
166*29949e86Sstevel typedef struct envctrl_encl {
167*29949e86Sstevel 	int instance;
168*29949e86Sstevel 	int type;
169*29949e86Sstevel 	uint_t value;
170*29949e86Sstevel } envctrl_encl_t;
171*29949e86Sstevel 
172*29949e86Sstevel /*
173*29949e86Sstevel  * Kstat structure defintions (PSARC 1997/245)
174*29949e86Sstevel  */
175*29949e86Sstevel typedef struct envctrl_chip {
176*29949e86Sstevel 	int type;			/* chip type */
177*29949e86Sstevel 	uchar_t chip_num;		/* chip num */
178*29949e86Sstevel 	uchar_t index;			/* chip index */
179*29949e86Sstevel 	uchar_t val;			/* chip reading */
180*29949e86Sstevel } envctrl_chip_t;
181*29949e86Sstevel 
182*29949e86Sstevel typedef struct envctrl_ps2 {
183*29949e86Sstevel 	ushort_t ps_tempr;		/* temperature */
184*29949e86Sstevel 	int ps_rating;			/* type in watts */
185*29949e86Sstevel 	boolean_t ps_ok;		/* normal state or not */
186*29949e86Sstevel 	boolean_t curr_share_ok;	/* current share imbalance */
187*29949e86Sstevel 	boolean_t limit_ok;		/* overlimit warning */
188*29949e86Sstevel 	int type;			/* power supply type */
189*29949e86Sstevel 	int slot;			/* power supply slot occupied */
190*29949e86Sstevel } envctrl_ps2_t;
191*29949e86Sstevel 
192*29949e86Sstevel typedef struct envctrl_temp {
193*29949e86Sstevel 	char label[ENVCTRL_MAXSTRLEN];	/* indicates temp. sensor location */
194*29949e86Sstevel 	int type;			/* Temperature sensor type */
195*29949e86Sstevel 	uint_t value;			/* temperature value */
196*29949e86Sstevel 	uint_t min;			/* minimum tolerable temperature */
197*29949e86Sstevel 	uint_t warning_threshold;	/* warning threshold */
198*29949e86Sstevel 	uint_t shutdown_threshold;	/* shutdown threshold */
199*29949e86Sstevel } envctrl_temp_t;
200*29949e86Sstevel 
201*29949e86Sstevel typedef struct envctrl_disk {
202*29949e86Sstevel 	int slot;			/* slot number of disk */
203*29949e86Sstevel 	boolean_t disk_ok;		/* disk fault LED off or on */
204*29949e86Sstevel } envctrl_disk_t;
205*29949e86Sstevel 
206*29949e86Sstevel #define	ENVCTRL_PANEL_LEDS_PR		"panel-leds-present"
207*29949e86Sstevel #define	ENVCTRL_PANEL_LEDS_STA		"panel-leds-state"
208*29949e86Sstevel #define	ENVCTRL_DISK_LEDS_PR		"disk-leds-present"
209*29949e86Sstevel #define	ENVCTRL_DISK_LEDS_STA		"disk-leds-state"
210*29949e86Sstevel #define	ENVCTRL_LED_BLINK		"activity-led-blink?"
211*29949e86Sstevel 
212*29949e86Sstevel /*
213*29949e86Sstevel  * IOCTL defines (PSARC 1996/159)
214*29949e86Sstevel  */
215*29949e86Sstevel #define	ENVCTRL_IOC_RESETTMPR	(int)(_IOW('p', 76, uchar_t))
216*29949e86Sstevel #define	ENVCTRL_IOC_SETMODE	(int)(_IOW('p', 77, uchar_t))
217*29949e86Sstevel #define	ENVCTRL_IOC_SETTEMP	(int)(_IOW('p', 79, uchar_t))
218*29949e86Sstevel #define	ENVCTRL_IOC_SETFAN (int)(_IOW('p', 80, struct envctrl_tda8444t_chip))
219*29949e86Sstevel #define	ENVCTRL_IOC_SETWDT	(int)(_IOW('p', 81, uchar_t))
220*29949e86Sstevel #define	ENVCTRL_IOC_GETFAN (int)(_IOR('p', 81, struct envctrl_tda8444t_chip))
221*29949e86Sstevel #define	ENVCTRL_IOC_GETTEMP (int)(_IOR('p', 82, struct envctrl_pcf8591_chip))
222*29949e86Sstevel #define	ENVCTRL_IOC_GETFANFAIL (int)(_IOR('p', 83, struct envctrl_pcf8574_chip))
223*29949e86Sstevel #define	ENVCTRL_IOC_SETFSP	(int)(_IOW('p', 84, uchar_t))
224*29949e86Sstevel #define	ENVCTRL_IOC_SETDSKLED (int)(_IOW('p', 85, struct envctrl_pcf8574_chip))
225*29949e86Sstevel #define	ENVCTRL_IOC_GETDSKLED (int)(_IOR('p', 86, struct envctrl_pcf8574_chip))
226*29949e86Sstevel 
227*29949e86Sstevel /*
228*29949e86Sstevel  * IOCTL defines (PSARC 1997/245)
229*29949e86Sstevel  */
230*29949e86Sstevel #define	ENVCTRL_IOC_GETMODE	(int)(_IOR('p', 87, uchar_t))
231*29949e86Sstevel #define	ENVCTRL_IOC_SETTEMP2	(int)(_IOW('p', 88, struct envctrl_chip))
232*29949e86Sstevel #define	ENVCTRL_IOC_SETFAN2 	(int)(_IOW('p', 89, struct envctrl_chip))
233*29949e86Sstevel #define	ENVCTRL_IOC_GETFAN2 	(int)(_IOR('p', 90, struct envctrl_chip))
234*29949e86Sstevel #define	ENVCTRL_IOC_GETTEMP2 	(int)(_IOR('p', 91, struct envctrl_chip))
235*29949e86Sstevel #define	ENVCTRL_IOC_SETFSP2	(int)(_IOW('p', 92, struct envctrl_chip))
236*29949e86Sstevel #define	ENVCTRL_IOC_GETFSP2	(int)(_IOR('p', 93, struct envctrl_chip))
237*29949e86Sstevel #define	ENVCTRL_IOC_SETDSKLED2 	(int)(_IOW('p', 94, struct envctrl_chip))
238*29949e86Sstevel #define	ENVCTRL_IOC_GETDSKLED2 	(int)(_IOR('p', 95, struct envctrl_chip))
239*29949e86Sstevel #define	ENVCTRL_IOC_SETRAW 	(int)(_IOW('p', 96, struct envctrl_chip))
240*29949e86Sstevel #define	ENVCTRL_IOC_GETRAW 	(int)(_IOR('p', 97, struct envctrl_chip))
241*29949e86Sstevel 
242*29949e86Sstevel #ifdef	__cplusplus
243*29949e86Sstevel }
244*29949e86Sstevel #endif
245*29949e86Sstevel 
246*29949e86Sstevel #endif	/* _SYS_ENVCTRL_GEN_H */
247