xref: /illumos-gate/usr/src/uts/common/sys/acpi_drv.h (revision aeac2d873b68a43f6650e0d0f021c02f5a653a21)
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * Copyright 2015 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
29  */
30 
31 #ifndef _ACPI_DRV_H
32 #define	_ACPI_DRV_H
33 
34 #ifdef	__cplusplus
35 extern "C" {
36 #endif
37 
38 #include <sys/param.h>
39 #include <sys/kstat.h>
40 
41 enum acpi_drv_ioctl {
42 	ACPI_DRV_IOC_BAY,
43 	ACPI_DRV_IOC_INFO,
44 	ACPI_DRV_IOC_STATUS,
45 	ACPI_DRV_IOC_AC_COUNT,
46 	ACPI_DRV_IOC_POWER_STATUS,
47 	ACPI_DRV_IOC_SET_WARNING,
48 	ACPI_DRV_IOC_GET_WARNING,
49 	ACPI_DRV_IOC_LID_STATUS,
50 	ACPI_DRV_IOC_LID_UPDATE,
51 	ACPI_DRV_IOC_LEVELS,
52 	ACPI_DRV_IOC_SET_BRIGHTNESS
53 };
54 
55 #define	ACPI_DRV_BST_CHARGING		2
56 #define	ACPI_DRV_BST_DISCHARGING	1
57 
58 typedef struct batt_bay {
59 	/* Total number of bays in the system */
60 	int bay_number;
61 
62 	/*
63 	 * Bitmap for each bay and its battery.
64 	 * battery_map bit i:
65 	 *    1 -- battery inserted to bay i
66 	 *    0 -- bay i empty
67 	 */
68 	uint64_t battery_map;
69 } batt_bay_t;
70 
71 typedef	struct acpi_bif {
72 	uint32_t	bif_unit;
73 
74 	/*
75 	 * 0x00000000 - 0x7fffffff
76 	 * 0xffffffff - Unknown design capacity in [mWh] or [mAh]
77 	 */
78 	uint32_t	bif_design_cap;
79 
80 	/*
81 	 * 0x00000000 - 0x7fffffff
82 	 * 0xffffffff - Unknown last full charge capacity in [mWh] or [mAh]
83 	 */
84 	uint32_t	bif_last_cap;
85 
86 	uint32_t	bif_tech;
87 
88 	/*
89 	 * 0x00000000 - 0x7fffffff
90 	 * 0xffffffff - Unknown design voltage in [mV]
91 	 */
92 	uint32_t	bif_voltage;
93 
94 	/*
95 	 * 0x00000000 - 0x7fffffff in [mWh] or [mAh]
96 	 */
97 	uint32_t	bif_warn_cap;
98 
99 	/*
100 	 * 0x00000000 - 0x7fffffff in [mWh] or [mAh]
101 	 */
102 	uint32_t	bif_low_cap;
103 
104 	uint32_t	bif_gran1_cap;
105 	uint32_t	bif_gran2_cap;
106 	char		bif_model[MAXNAMELEN];
107 	char		bif_serial[MAXNAMELEN];
108 	char		bif_type[MAXNAMELEN];
109 	char		bif_oem_info[MAXNAMELEN];
110 } acpi_bif_t;
111 
112 typedef	struct acpi_bst {
113 	uint32_t	bst_state;
114 
115 	/*
116 	 * 0x00000000 - 0x7fffffff in [mW] or [mA]
117 	 * 0xffffffff - Unknown rate
118 	 */
119 	uint32_t	bst_rate;
120 
121 	/*
122 	 * 0x00000000 - 0x7fffffff in [mWh] or [mAh]
123 	 * 0xffffffff - Unknown capacity
124 	 */
125 	uint32_t	bst_rem_cap;
126 
127 	/*
128 	 * 0x00000000 - 0x7fffffff in [mV]
129 	 * 0xffffffff - Unknown voltage
130 	 */
131 	uint32_t	bst_voltage;
132 } acpi_bst_t;
133 
134 /* Battery warnning levels in percentage */
135 typedef struct acpi_drv_warn {
136 	uint32_t	bw_enabled;	/* Enabled */
137 	uint32_t	bw_charge_warn;	/* charge warn threshold */
138 	uint32_t	bw_charge_low;	/* charge low threshold */
139 } acpi_drv_warn_t;
140 
141 #define	ACPI_DRV_NAME		"acpi_drv"
142 #define	ACPI_DRV_POWER_KSTAT_NAME	"power"
143 #define	ACPI_DRV_BTWARN_KSTAT_NAME	"battery warning"
144 #define	ACPI_DRV_BIF_KSTAT_NAME		"battery BIF"
145 #define	ACPI_DRV_BST_KSTAT_NAME		"battery BST"
146 
147 #define	AC			"AC"
148 #define	BATTERY			"battery"
149 #define	SYSTEM_POWER		"system power"
150 #define	SUPPORTED_BATTERY_COUNT	"supported_battery_count"
151 
152 #define	BW_ENABLED		"enabled"
153 #define	BW_POWEROFF_THRESHOLD	"warn capacity threshold"
154 #define	BW_SHUTDOWN_THRESHOLD	"low capacity threshold"
155 
156 #define	BIF_UNIT		"bif_unit"
157 #define	BIF_DESIGN_CAP		"bif_design_cap"
158 #define	BIF_LAST_CAP		"bif_last_cap"
159 #define	BIF_TECH		"bif_tech"
160 #define	BIF_VOLTAGE		"bif_voltage"
161 #define	BIF_WARN_CAP		"bif_warn_cap"
162 #define	BIF_LOW_CAP		"bif_low_cap"
163 #define	BIF_GRAN1_CAP		"bif_gran1_cap"
164 #define	BIF_GRAN2_CAP		"bif_gran2_cap"
165 #define	BIF_MODEL		"bif_model"
166 #define	BIF_SERIAL		"bif_serial"
167 #define	BIF_TYPE		"bif_type"
168 #define	BIF_OEM_INFO		"bif_oem_info"
169 
170 #define	BST_STATE		"bst_state"
171 #define	BST_RATE		"bst_rate"
172 #define	BST_REM_CAP		"bst_rem_cap"
173 #define	BST_VOLTAGE		"bst_voltage"
174 
175 #define	PSR_AC_PRESENT		"psr_ac_present"
176 
177 typedef struct acpi_drv_power_kstat_s {
178 	struct kstat_named	acpi_drv_power;
179 	struct kstat_named	acpi_drv_supported_battery_count;
180 } acpi_drv_power_kstat_t;
181 
182 typedef struct acpi_drv_warn_kstat_s {
183 	struct kstat_named	acpi_drv_bw_enabled;
184 	struct kstat_named	acpi_drv_bw_charge_warn;
185 	struct kstat_named	acpi_drv_bw_charge_low;
186 } acpi_drv_warn_kstat_t;
187 
188 /* BIF kstat */
189 typedef struct acpi_drv_bif_kstat_s {
190 	struct kstat_named	acpi_drv_bif_unit;
191 	struct kstat_named	acpi_drv_bif_design_cap;
192 	struct kstat_named	acpi_drv_bif_last_cap;
193 	struct kstat_named	acpi_drv_bif_tech;
194 	struct kstat_named	acpi_drv_bif_voltage;
195 	struct kstat_named	acpi_drv_bif_warn_cap;
196 	struct kstat_named	acpi_drv_bif_low_cap;
197 	struct kstat_named	acpi_drv_bif_gran1_cap;
198 	struct kstat_named	acpi_drv_bif_gran2_cap;
199 	struct kstat_named	acpi_drv_bif_model;
200 	struct kstat_named	acpi_drv_bif_serial;
201 	struct kstat_named	acpi_drv_bif_type;
202 	struct kstat_named	acpi_drv_bif_oem_info;
203 } acpi_drv_bif_kstat_t;
204 
205 /* BST kstat */
206 typedef struct acpi_drv_bst_kstat_s {
207 	struct kstat_named	acpi_drv_bst_state;
208 	struct kstat_named	acpi_drv_bst_rate;
209 	struct kstat_named	acpi_drv_bst_rem_cap;
210 	struct kstat_named	acpi_drv_bst_voltage;
211 } acpi_drv_bst_kstat_t;
212 
213 /* acpi device types */
214 enum acpi_drv_type {
215 	ACPI_DRV_TYPE_UNKNOWN,
216 	ACPI_DRV_TYPE_CBAT,
217 	ACPI_DRV_TYPE_AC,
218 	ACPI_DRV_TYPE_LID,
219 	ACPI_DRV_TYPE_DISPLAY,
220 	ACPI_DRV_TYPE_HOTKEY
221 };
222 
223 struct acpi_drv_output_info {
224 	uint32_t adr; /* unique ID for this output device */
225 	int nlev; /* number of brightness levels */
226 };
227 
228 struct acpi_drv_output_status {
229 	int state;
230 	int num_levels;
231 	int cur_level;
232 	int cur_level_index;
233 };
234 
235 #define	ACPI_DRV_OK			0
236 #define	ACPI_DRV_ERR			-1
237 
238 #ifdef _KERNEL
239 
240 #define	MINOR_SHIFT			8
241 #define	IDX_MASK			((1 << MINOR_SHIFT) - 1)
242 #define	MINOR_BATT(idx)			(ACPI_DRV_TYPE_CBAT << MINOR_SHIFT | \
243 					(idx))
244 #define	MINOR_AC(idx)			(ACPI_DRV_TYPE_AC << MINOR_SHIFT | \
245 					(idx))
246 #define	MINOR_LID(idx)			(ACPI_DRV_TYPE_LID << MINOR_SHIFT | \
247 					(idx))
248 #define	MINOR_HOTKEY(idx)		(ACPI_DRV_TYPE_HOTKEY << MINOR_SHIFT \
249 					| (idx))
250 #define	MINOR2IDX(minor)		((minor) & IDX_MASK)
251 #define	MINOR2TYPE(minor)		((minor) >> MINOR_SHIFT)
252 
253 #endif /* _KERNEL */
254 
255 #ifdef	__cplusplus
256 }
257 #endif
258 
259 #endif /* _ACPI_DRV_H */
260