summaryrefslogtreecommitdiff
path: root/sys/dev/isa/itesio_isavar.h
blob: b74f23839730a712e96fe73c2a00e9465e7778ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*	$NetBSD: itesio_isavar.h,v 1.14 2021/07/03 04:44:16 nonaka Exp $	*/
/*	$OpenBSD: itvar.h,v 1.2 2003/11/05 20:57:10 grange Exp $	*/

/*
 * Copyright (c) 2006-2007 Juan Romero Pardines <xtraeme@netbsd.org>
 * Copyright (c) 2003 Julien Bordet <zejames@greyhats.org>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITD TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITD TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _DEV_ISA_ITESIO_ISAVAR_H
#define _DEV_ISA_ITESIO_ISAVAR_H

#define IT_NUM_SENSORS	15

/* Super I/O Configuration Registers */
#define ITESIO_ADDR	0	/* Address Port = 0x2e */
#define ITESIO_DATA	1	/* Data Port = 0x2f */

#define ITESIO_LDNSEL	0x07	/* Logical Device Number Selection */

#define ITESIO_EC_LDN	0x04	/* EC Logical Device Number */
#define ITESIO_EC_MSB	0x60	/* EC Base Address (MSB) */
#define ITESIO_EC_LSB	0x61	/* EC Base Address (LSB) */

#define ITESIO_WDT_LDN	0x07	/* Watchdog Logical Device Number */
#define ITESIO_WDT_CTL	0x71	/* Watchdog Control Register */
#define ITESIO_WDT_CNF	0x72	/* Watchdog Configuration Register */
#define   ITESIO_WDT_CNF_SECS	(1<<7)	/* Use seconds for the timer */
#define   ITESIO_WDT_CNF_KRST	(1<<6)	/* Enable KRST */
#define   ITESIO_WDT_CNF_PWROK	(1<<4)	/* Enable PWROK */
#define ITESIO_WDT_TMO_LSB	0x73	/* Watchdog Timeout Value LSB */
#define ITESIO_WDT_TMO_MSB	0x74	/* Watchdog Timeout Value MSB */

#define ITESIO_WDT_MAXTIMO	0xffff	/* either seconds or minutes */

#define ITESIO_CHIPID1	0x20	/* Chip ID 1 */
#define ITESIO_CHIPID2	0x21	/* Chip ID 2 */
#define ITESIO_DEVREV	0x22	/* Device Revision */

#define ITESIO_ID8625	0x8625
#define ITESIO_ID8628	0x8628
#define ITESIO_ID8655	0x8655
#define ITESIO_ID8705	0x8705
#define ITESIO_ID8712	0x8712
#define ITESIO_ID8716	0x8716
#define ITESIO_ID8718	0x8718
#define ITESIO_ID8720	0x8720
#define ITESIO_ID8721	0x8721
#define ITESIO_ID8726	0x8726
#define ITESIO_ID8728	0x8728
#define ITESIO_ID8771	0x8771
#define ITESIO_ID8772	0x8772

/* 
 * Control registers for the Environmental Controller, relative
 * to the Base Address Register.
 */
#define ITESIO_EC_ADDR 	0x05
#define ITESIO_EC_DATA 	0x06

/* Data registers */
#define ITESIO_EC_CONFIG 	0x00
#define ITESIO_EC_ISR1 		0x01
#define ITESIO_EC_ISR2 		0x02
#define ITESIO_EC_ISR3 		0x03
#define ITESIO_EC_SMI1 		0x04
#define ITESIO_EC_SMI2 		0x05
#define ITESIO_EC_SMI3 		0x06
#define ITESIO_EC_IMR1 		0x07
#define ITESIO_EC_IMR2 		0x08
#define ITESIO_EC_IMR3 		0x09
#define ITESIO_EC_VID 		0x0a
#define ITESIO_EC_FAN_TDR 	0x0b	/* Fan Tachometer Divisor Register */
#define ITESIO_EC_FAN16_CER 	0x0c	/* Fan Tachometer 16-bit Counter Enable Register */

#define ITESIO_EC_VOLTENABLE 	0x50
#define ITESIO_EC_TEMPENABLE 	0x51

#define ITESIO_EC_FANMINBASE	0x10
#define ITESIO_EC_FANENABLE	0x13

#define ITESIO_EC_SENSORFANBASE 	0x0d	/* Fan from 0x0d to 0x0f */
#define ITESIO_EC_SENSORFANEXTBASE 	0x18 	/* Fan (MSB) from 0x18 to 0x1A */
#define ITESIO_EC_SENSORVOLTBASE 	0x20 	/* Voltage from 0x20 to 0x28 */
#define ITESIO_EC_SENSORTEMPBASE 	0x29 	/* Temperature from 0x29 to 0x2b */
#define ITESIO_EC_SENSORVOLTEXTBASE 	0x2f 	/* Extra Voltage 0x2f */

#define ITESIO_EC_VIN0 	0x20
#define ITESIO_EC_VIN1 	0x21
#define ITESIO_EC_VIN2 	0x22
#define ITESIO_EC_VIN3 	0x23
#define ITESIO_EC_VIN4 	0x24
#define ITESIO_EC_VIN5 	0x25
#define ITESIO_EC_VIN6 	0x26
#define ITESIO_EC_VIN7 	0x27
#define ITESIO_EC_VBAT 	0x28

#define ITESIO_EC_UPDATEVBAT 	0x40 	/* Update VBAT voltage reading */
#define ITESIO_EC_BEEPEER 	0x5c	/* Beep Event Enable Register */

/* High and Low limits for voltages */
#define ITESIO_EC_VIN0_HIGH_LIMIT 	0x30
#define ITESIO_EC_VIN0_LOW_LIMIT 	0x31
#define ITESIO_EC_VIN1_HIGH_LIMIT 	0x32
#define ITESIO_EC_VIN1_LOW_LIMIT 	0x33
#define ITESIO_EC_VIN2_HIGH_LIMIT 	0x34
#define ITESIO_EC_VIN2_LOW_LIMIT 	0x35
#define ITESIO_EC_VIN3_HIGH_LIMIT	0x36
#define ITESIO_EC_VIN3_LOW_LIMIT 	0x37
#define ITESIO_EC_VIN4_HIGH_LIMIT 	0x38
#define ITESIO_EC_VIN4_LOW_LIMIT 	0x39
#define ITESIO_EC_VIN5_HIGH_LIMIT 	0x3a
#define ITESIO_EC_VIN5_LOW_LIMIT 	0x3b
#define ITESIO_EC_VIN6_HIGH_LIMIT 	0x3c
#define ITESIO_EC_VIN6_LOW_LIMIT 	0x3d
#define ITESIO_EC_VIN7_HIGH_LIMIT 	0x3e
#define ITESIO_EC_VIN7_LOW_LIMIT 	0x3f

/* High and Low limits for temperatures */
#define ITESIO_EC_TEMP0_HIGH_LIMIT	0x40
#define ITESIO_EC_TEMP0_LOW_LIMIT	0x41
#define ITESIO_EC_TEMP1_HIGH_LIMIT	0x42
#define ITESIO_EC_TEMP1_LOW_LIMIT	0x43
#define ITESIO_EC_TEMP2_HIGH_LIMIT	0x44
#define ITESIO_EC_TEMP2_LOW_LIMIT	0x45

#define IT8625_EC_SENSORFAN4_LSB	0x80
#define IT8625_EC_SENSORFAN4_MSB	0x81
#define IT8625_EC_SENSORFAN5_LSB	0x82
#define IT8625_EC_SENSORFAN5_MSB	0x83
#define IT8625_EC_SENSORFAN6_LSB	0x93
#define IT8625_EC_SENSORFAN6_MSB	0x94

#define ITESIO_EC_VREF			(4096) /* Vref = 4.096 V */

struct itesio_softc;
struct itesio_config {
	uint16_t	chipid;
	bool		no_wdt;
	uint32_t	num_sensors;
	uint32_t	voltstart_idx;
	uint32_t	fanstart_idx;
	void		(*setup_sensors)(struct itesio_softc *);
	void		(*refresh_temp)(struct itesio_softc *,
			    envsys_data_t *);
	void		(*refresh_volts)(struct itesio_softc *,
			    envsys_data_t *);
	void		(*refresh_fans)(struct itesio_softc *,
			    envsys_data_t *);
};

struct itesio_softc {
	bus_space_tag_t 	sc_iot;

	bus_space_handle_t 	sc_pnp_ioh;
	bus_space_handle_t	sc_ec_ioh;

	struct itesio_config	sc_config;

	struct sysmon_wdog	sc_smw;
	struct sysmon_envsys 	*sc_sme;
	envsys_data_t 		*sc_sensor;
	
	uint16_t 		sc_hwmon_baseaddr;
	bool 			sc_hwmon_mapped;
	bool 			sc_hwmon_enabled;
	bool 			sc_wdt_enabled;

	uint16_t 		sc_chipid;
	uint8_t 		sc_devrev;
};

#endif /* _DEV_ISA_ITSIO_ISAVAR_H_ */