xref: /linux/arch/sparc/include/uapi/asm/envctrl.h (revision 5457982641fb3f5fb08ce22a853dd5474645c66d)
1*54579826SDavid Howells /*
2*54579826SDavid Howells  *
3*54579826SDavid Howells  * envctrl.h: Definitions for access to the i2c environment
4*54579826SDavid Howells  *            monitoring on Ultrasparc systems.
5*54579826SDavid Howells  *
6*54579826SDavid Howells  * Copyright (C) 1998  Eddie C. Dost  (ecd@skynet.be)
7*54579826SDavid Howells  * Copyright (C) 2000  Vinh Truong  (vinh.truong@eng.sun.com)
8*54579826SDavid Howells  * VT - Add all ioctl commands and environment status definitions
9*54579826SDavid Howells  * VT - Add application note
10*54579826SDavid Howells  */
11*54579826SDavid Howells #ifndef _SPARC64_ENVCTRL_H
12*54579826SDavid Howells #define _SPARC64_ENVCTRL_H 1
13*54579826SDavid Howells 
14*54579826SDavid Howells #include <linux/ioctl.h>
15*54579826SDavid Howells 
16*54579826SDavid Howells /* Application note:
17*54579826SDavid Howells  *
18*54579826SDavid Howells  * The driver supports 4 operations: open(), close(), ioctl(), read()
19*54579826SDavid Howells  * The device name is /dev/envctrl.
20*54579826SDavid Howells  * Below is sample usage:
21*54579826SDavid Howells  *
22*54579826SDavid Howells  *	fd = open("/dev/envtrl", O_RDONLY);
23*54579826SDavid Howells  *	if (ioctl(fd, ENVCTRL_READ_SHUTDOWN_TEMPERATURE, 0) < 0)
24*54579826SDavid Howells  *		printf("error\n");
25*54579826SDavid Howells  *	ret = read(fd, buf, 10);
26*54579826SDavid Howells  *	close(fd);
27*54579826SDavid Howells  *
28*54579826SDavid Howells  * Notice in the case of cpu voltage and temperature, the default is
29*54579826SDavid Howells  * cpu0.  If we need to know the info of cpu1, cpu2, cpu3, we need to
30*54579826SDavid Howells  * pass in cpu number in ioctl() last parameter.  For example, to
31*54579826SDavid Howells  * get the voltage of cpu2:
32*54579826SDavid Howells  *
33*54579826SDavid Howells  *	ioctlbuf[0] = 2;
34*54579826SDavid Howells  *	if (ioctl(fd, ENVCTRL_READ_CPU_VOLTAGE, ioctlbuf) < 0)
35*54579826SDavid Howells  *		printf("error\n");
36*54579826SDavid Howells  *	ret = read(fd, buf, 10);
37*54579826SDavid Howells  *
38*54579826SDavid Howells  * All the return values are in ascii.  So check read return value
39*54579826SDavid Howells  * and do appropriate conversions in your application.
40*54579826SDavid Howells  */
41*54579826SDavid Howells 
42*54579826SDavid Howells /* IOCTL commands */
43*54579826SDavid Howells 
44*54579826SDavid Howells /* Note: these commands reflect possible monitor features.
45*54579826SDavid Howells  * Some boards choose to support some of the features only.
46*54579826SDavid Howells  */
47*54579826SDavid Howells #define ENVCTRL_RD_CPU_TEMPERATURE	_IOR('p', 0x40, int)
48*54579826SDavid Howells #define ENVCTRL_RD_CPU_VOLTAGE		_IOR('p', 0x41, int)
49*54579826SDavid Howells #define ENVCTRL_RD_FAN_STATUS		_IOR('p', 0x42, int)
50*54579826SDavid Howells #define ENVCTRL_RD_WARNING_TEMPERATURE	_IOR('p', 0x43, int)
51*54579826SDavid Howells #define ENVCTRL_RD_SHUTDOWN_TEMPERATURE	_IOR('p', 0x44, int)
52*54579826SDavid Howells #define ENVCTRL_RD_VOLTAGE_STATUS	_IOR('p', 0x45, int)
53*54579826SDavid Howells #define ENVCTRL_RD_SCSI_TEMPERATURE	_IOR('p', 0x46, int)
54*54579826SDavid Howells #define ENVCTRL_RD_ETHERNET_TEMPERATURE	_IOR('p', 0x47, int)
55*54579826SDavid Howells #define ENVCTRL_RD_MTHRBD_TEMPERATURE	_IOR('p', 0x48, int)
56*54579826SDavid Howells 
57*54579826SDavid Howells #define ENVCTRL_RD_GLOBALADDRESS	_IOR('p', 0x49, int)
58*54579826SDavid Howells 
59*54579826SDavid Howells /* Read return values for a voltage status request. */
60*54579826SDavid Howells #define ENVCTRL_VOLTAGE_POWERSUPPLY_GOOD	0x01
61*54579826SDavid Howells #define ENVCTRL_VOLTAGE_BAD			0x02
62*54579826SDavid Howells #define ENVCTRL_POWERSUPPLY_BAD			0x03
63*54579826SDavid Howells #define ENVCTRL_VOLTAGE_POWERSUPPLY_BAD		0x04
64*54579826SDavid Howells 
65*54579826SDavid Howells /* Read return values for a fan status request.
66*54579826SDavid Howells  * A failure match means either the fan fails or
67*54579826SDavid Howells  * the fan is not connected.  Some boards have optional
68*54579826SDavid Howells  * connectors to connect extra fans.
69*54579826SDavid Howells  *
70*54579826SDavid Howells  * There are maximum 8 monitor fans.  Some are cpu fans
71*54579826SDavid Howells  * some are system fans.  The mask below only indicates
72*54579826SDavid Howells  * fan by order number.
73*54579826SDavid Howells  * Below is a sample application:
74*54579826SDavid Howells  *
75*54579826SDavid Howells  *	if (ioctl(fd, ENVCTRL_READ_FAN_STATUS, 0) < 0) {
76*54579826SDavid Howells  *		printf("ioctl fan failed\n");
77*54579826SDavid Howells  *	}
78*54579826SDavid Howells  *	if (read(fd, rslt, 1) <= 0) {
79*54579826SDavid Howells  *		printf("error or fan not monitored\n");
80*54579826SDavid Howells  *	} else {
81*54579826SDavid Howells  *		if (rslt[0] == ENVCTRL_ALL_FANS_GOOD) {
82*54579826SDavid Howells  *			printf("all fans good\n");
83*54579826SDavid Howells  *	} else if (rslt[0] == ENVCTRL_ALL_FANS_BAD) {
84*54579826SDavid Howells  *		printf("all fans bad\n");
85*54579826SDavid Howells  *	} else {
86*54579826SDavid Howells  *		if (rslt[0] & ENVCTRL_FAN0_FAILURE_MASK) {
87*54579826SDavid Howells  *			printf("fan 0 failed or not connected\n");
88*54579826SDavid Howells  *	}
89*54579826SDavid Howells  *	......
90*54579826SDavid Howells  */
91*54579826SDavid Howells 
92*54579826SDavid Howells #define ENVCTRL_ALL_FANS_GOOD			0x00
93*54579826SDavid Howells #define ENVCTRL_FAN0_FAILURE_MASK		0x01
94*54579826SDavid Howells #define ENVCTRL_FAN1_FAILURE_MASK		0x02
95*54579826SDavid Howells #define ENVCTRL_FAN2_FAILURE_MASK		0x04
96*54579826SDavid Howells #define ENVCTRL_FAN3_FAILURE_MASK		0x08
97*54579826SDavid Howells #define ENVCTRL_FAN4_FAILURE_MASK		0x10
98*54579826SDavid Howells #define ENVCTRL_FAN5_FAILURE_MASK		0x20
99*54579826SDavid Howells #define ENVCTRL_FAN6_FAILURE_MASK		0x40
100*54579826SDavid Howells #define ENVCTRL_FAN7_FAILURE_MASK		0x80
101*54579826SDavid Howells #define ENVCTRL_ALL_FANS_BAD 			0xFF
102*54579826SDavid Howells 
103*54579826SDavid Howells #endif /* !(_SPARC64_ENVCTRL_H) */
104