xref: /illumos-gate/usr/src/uts/common/sys/acpi_drv.h (revision 28b6fd27)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57b840e52Sphitran  * Common Development and Distribution License (the "License").
67b840e52Sphitran  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217b840e52Sphitran 
227c478bd9Sstevel@tonic-gate /*
232d6b5ea7SGuoli Shu  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
247b840e52Sphitran  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
27*28b6fd27SHans Rosenfeld /*
28*28b6fd27SHans Rosenfeld  * Copyright 2015 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
29*28b6fd27SHans Rosenfeld  */
30*28b6fd27SHans Rosenfeld 
31d2ec54f7Sphitran #ifndef _ACPI_DRV_H
32d2ec54f7Sphitran #define	_ACPI_DRV_H
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
357c478bd9Sstevel@tonic-gate extern "C" {
367c478bd9Sstevel@tonic-gate #endif
377c478bd9Sstevel@tonic-gate 
387b840e52Sphitran #include <sys/param.h>
39d2ec54f7Sphitran #include <sys/kstat.h>
40d2ec54f7Sphitran 
41d2ec54f7Sphitran enum acpi_drv_ioctl {
42d2ec54f7Sphitran 	ACPI_DRV_IOC_BAY,
43d2ec54f7Sphitran 	ACPI_DRV_IOC_INFO,
44d2ec54f7Sphitran 	ACPI_DRV_IOC_STATUS,
45d2ec54f7Sphitran 	ACPI_DRV_IOC_AC_COUNT,
46d2ec54f7Sphitran 	ACPI_DRV_IOC_POWER_STATUS,
47d2ec54f7Sphitran 	ACPI_DRV_IOC_SET_WARNING,
48d2ec54f7Sphitran 	ACPI_DRV_IOC_GET_WARNING,
49d2ec54f7Sphitran 	ACPI_DRV_IOC_LID_STATUS,
50076d97abSPhi Tran 	ACPI_DRV_IOC_LID_UPDATE,
51d2ec54f7Sphitran 	ACPI_DRV_IOC_LEVELS,
52d2ec54f7Sphitran 	ACPI_DRV_IOC_SET_BRIGHTNESS
53d2ec54f7Sphitran };
54d2ec54f7Sphitran 
55d2ec54f7Sphitran #define	ACPI_DRV_BST_CHARGING		2
56d2ec54f7Sphitran #define	ACPI_DRV_BST_DISCHARGING	1
577b840e52Sphitran 
587b840e52Sphitran typedef struct batt_bay {
597b840e52Sphitran 	/* Total number of bays in the system */
607b840e52Sphitran 	int bay_number;
617b840e52Sphitran 
627b840e52Sphitran 	/*
637b840e52Sphitran 	 * Bitmap for each bay and its battery.
647b840e52Sphitran 	 * battery_map bit i:
657b840e52Sphitran 	 *    1 -- battery inserted to bay i
667b840e52Sphitran 	 *    0 -- bay i empty
677b840e52Sphitran 	 */
687b840e52Sphitran 	uint64_t battery_map;
697b840e52Sphitran } batt_bay_t;
707b840e52Sphitran 
717b840e52Sphitran typedef	struct acpi_bif {
727b840e52Sphitran 	uint32_t	bif_unit;
737b840e52Sphitran 
747b840e52Sphitran 	/*
757b840e52Sphitran 	 * 0x00000000 - 0x7fffffff
767b840e52Sphitran 	 * 0xffffffff - Unknown design capacity in [mWh] or [mAh]
777b840e52Sphitran 	 */
787b840e52Sphitran 	uint32_t	bif_design_cap;
797b840e52Sphitran 
807b840e52Sphitran 	/*
817b840e52Sphitran 	 * 0x00000000 - 0x7fffffff
827b840e52Sphitran 	 * 0xffffffff - Unknown last full charge capacity in [mWh] or [mAh]
837b840e52Sphitran 	 */
847b840e52Sphitran 	uint32_t	bif_last_cap;
857b840e52Sphitran 
867b840e52Sphitran 	uint32_t	bif_tech;
877b840e52Sphitran 
887b840e52Sphitran 	/*
897b840e52Sphitran 	 * 0x00000000 - 0x7fffffff
907b840e52Sphitran 	 * 0xffffffff - Unknown design voltage in [mV]
917b840e52Sphitran 	 */
927b840e52Sphitran 	uint32_t	bif_voltage;
937b840e52Sphitran 
947b840e52Sphitran 	/*
957b840e52Sphitran 	 * 0x00000000 - 0x7fffffff in [mWh] or [mAh]
967b840e52Sphitran 	 */
977b840e52Sphitran 	uint32_t	bif_warn_cap;
987b840e52Sphitran 
997b840e52Sphitran 	/*
1007b840e52Sphitran 	 * 0x00000000 - 0x7fffffff in [mWh] or [mAh]
1017b840e52Sphitran 	 */
1027b840e52Sphitran 	uint32_t	bif_low_cap;
1037b840e52Sphitran 
1047b840e52Sphitran 	uint32_t	bif_gran1_cap;
1057b840e52Sphitran 	uint32_t	bif_gran2_cap;
1067b840e52Sphitran 	char		bif_model[MAXNAMELEN];
1077b840e52Sphitran 	char		bif_serial[MAXNAMELEN];
1087b840e52Sphitran 	char		bif_type[MAXNAMELEN];
1097b840e52Sphitran 	char		bif_oem_info[MAXNAMELEN];
1107b840e52Sphitran } acpi_bif_t;
1117b840e52Sphitran 
1127b840e52Sphitran typedef	struct acpi_bst {
1137b840e52Sphitran 	uint32_t	bst_state;
1147b840e52Sphitran 
1157b840e52Sphitran 	/*
1167b840e52Sphitran 	 * 0x00000000 - 0x7fffffff in [mW] or [mA]
1177b840e52Sphitran 	 * 0xffffffff - Unknown rate
1187b840e52Sphitran 	 */
1197b840e52Sphitran 	uint32_t	bst_rate;
1207b840e52Sphitran 
1217b840e52Sphitran 	/*
1227b840e52Sphitran 	 * 0x00000000 - 0x7fffffff in [mWh] or [mAh]
1237b840e52Sphitran 	 * 0xffffffff - Unknown capacity
1247b840e52Sphitran 	 */
1257b840e52Sphitran 	uint32_t	bst_rem_cap;
1267b840e52Sphitran 
1277b840e52Sphitran 	/*
1287b840e52Sphitran 	 * 0x00000000 - 0x7fffffff in [mV]
1297b840e52Sphitran 	 * 0xffffffff - Unknown voltage
1307b840e52Sphitran 	 */
1317b840e52Sphitran 	uint32_t	bst_voltage;
1327b840e52Sphitran } acpi_bst_t;
1337b840e52Sphitran 
1347b840e52Sphitran /* Battery warnning levels in percentage */
135d2ec54f7Sphitran typedef struct acpi_drv_warn {
1367b840e52Sphitran 	uint32_t	bw_enabled;	/* Enabled */
1377b840e52Sphitran 	uint32_t	bw_charge_warn;	/* charge warn threshold */
1387b840e52Sphitran 	uint32_t	bw_charge_low;	/* charge low threshold */
139d2ec54f7Sphitran } acpi_drv_warn_t;
1407b840e52Sphitran 
141d2ec54f7Sphitran #define	ACPI_DRV_NAME		"acpi_drv"
142d2ec54f7Sphitran #define	ACPI_DRV_POWER_KSTAT_NAME	"power"
143d2ec54f7Sphitran #define	ACPI_DRV_BTWARN_KSTAT_NAME	"battery warning"
144d2ec54f7Sphitran #define	ACPI_DRV_BIF_KSTAT_NAME		"battery BIF"
145d2ec54f7Sphitran #define	ACPI_DRV_BST_KSTAT_NAME		"battery BST"
1467b840e52Sphitran 
1477b840e52Sphitran #define	AC			"AC"
1487b840e52Sphitran #define	BATTERY			"battery"
1497b840e52Sphitran #define	SYSTEM_POWER		"system power"
1507b840e52Sphitran #define	SUPPORTED_BATTERY_COUNT	"supported_battery_count"
1517b840e52Sphitran 
1527b840e52Sphitran #define	BW_ENABLED		"enabled"
1537b840e52Sphitran #define	BW_POWEROFF_THRESHOLD	"warn capacity threshold"
1547b840e52Sphitran #define	BW_SHUTDOWN_THRESHOLD	"low capacity threshold"
1557b840e52Sphitran 
1567b840e52Sphitran #define	BIF_UNIT		"bif_unit"
1577b840e52Sphitran #define	BIF_DESIGN_CAP		"bif_design_cap"
1587b840e52Sphitran #define	BIF_LAST_CAP		"bif_last_cap"
1597b840e52Sphitran #define	BIF_TECH		"bif_tech"
1607b840e52Sphitran #define	BIF_VOLTAGE		"bif_voltage"
1617b840e52Sphitran #define	BIF_WARN_CAP		"bif_warn_cap"
1627b840e52Sphitran #define	BIF_LOW_CAP		"bif_low_cap"
1637b840e52Sphitran #define	BIF_GRAN1_CAP		"bif_gran1_cap"
1647b840e52Sphitran #define	BIF_GRAN2_CAP		"bif_gran2_cap"
1657b840e52Sphitran #define	BIF_MODEL		"bif_model"
1667b840e52Sphitran #define	BIF_SERIAL		"bif_serial"
1677b840e52Sphitran #define	BIF_TYPE		"bif_type"
1687b840e52Sphitran #define	BIF_OEM_INFO		"bif_oem_info"
1697b840e52Sphitran 
1707b840e52Sphitran #define	BST_STATE		"bst_state"
1717b840e52Sphitran #define	BST_RATE		"bst_rate"
1727b840e52Sphitran #define	BST_REM_CAP		"bst_rem_cap"
1737b840e52Sphitran #define	BST_VOLTAGE		"bst_voltage"
1747b840e52Sphitran 
1757b840e52Sphitran #define	PSR_AC_PRESENT		"psr_ac_present"
1767b840e52Sphitran 
177d2ec54f7Sphitran typedef struct acpi_drv_power_kstat_s {
178d2ec54f7Sphitran 	struct kstat_named	acpi_drv_power;
179d2ec54f7Sphitran 	struct kstat_named	acpi_drv_supported_battery_count;
180d2ec54f7Sphitran } acpi_drv_power_kstat_t;
1817b840e52Sphitran 
182d2ec54f7Sphitran typedef struct acpi_drv_warn_kstat_s {
183d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bw_enabled;
184d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bw_charge_warn;
185d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bw_charge_low;
186d2ec54f7Sphitran } acpi_drv_warn_kstat_t;
1877b840e52Sphitran 
1887b840e52Sphitran /* BIF kstat */
189d2ec54f7Sphitran typedef struct acpi_drv_bif_kstat_s {
190d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_unit;
191d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_design_cap;
192d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_last_cap;
193d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_tech;
194d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_voltage;
195d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_warn_cap;
196d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_low_cap;
197d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_gran1_cap;
198d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_gran2_cap;
199d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_model;
200d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_serial;
201d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_type;
202d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bif_oem_info;
203d2ec54f7Sphitran } acpi_drv_bif_kstat_t;
2047c478bd9Sstevel@tonic-gate 
2057b840e52Sphitran /* BST kstat */
206d2ec54f7Sphitran typedef struct acpi_drv_bst_kstat_s {
207d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bst_state;
208d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bst_rate;
209d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bst_rem_cap;
210d2ec54f7Sphitran 	struct kstat_named	acpi_drv_bst_voltage;
211d2ec54f7Sphitran } acpi_drv_bst_kstat_t;
212d2ec54f7Sphitran 
2132d6b5ea7SGuoli Shu /* acpi device types */
2142d6b5ea7SGuoli Shu enum acpi_drv_type {
2152d6b5ea7SGuoli Shu 	ACPI_DRV_TYPE_UNKNOWN,
2162d6b5ea7SGuoli Shu 	ACPI_DRV_TYPE_CBAT,
2172d6b5ea7SGuoli Shu 	ACPI_DRV_TYPE_AC,
2182d6b5ea7SGuoli Shu 	ACPI_DRV_TYPE_LID,
2192d6b5ea7SGuoli Shu 	ACPI_DRV_TYPE_DISPLAY,
2202d6b5ea7SGuoli Shu 	ACPI_DRV_TYPE_HOTKEY
221d2ec54f7Sphitran };
222d2ec54f7Sphitran 
223d2ec54f7Sphitran struct acpi_drv_output_info {
224d2ec54f7Sphitran 	uint32_t adr; /* unique ID for this output device */
225d2ec54f7Sphitran 	int nlev; /* number of brightness levels */
226d2ec54f7Sphitran };
227d2ec54f7Sphitran 
228d2ec54f7Sphitran struct acpi_drv_output_status {
229d2ec54f7Sphitran 	int state;
230d2ec54f7Sphitran 	int num_levels;
231d2ec54f7Sphitran 	int cur_level;
232d2ec54f7Sphitran 	int cur_level_index;
233d2ec54f7Sphitran };
2347c478bd9Sstevel@tonic-gate 
2352d6b5ea7SGuoli Shu #define	ACPI_DRV_OK			0
2362d6b5ea7SGuoli Shu #define	ACPI_DRV_ERR			-1
2372d6b5ea7SGuoli Shu 
238*28b6fd27SHans Rosenfeld #ifdef _KERNEL
239*28b6fd27SHans Rosenfeld 
240*28b6fd27SHans Rosenfeld #define	MINOR_SHIFT			8
241*28b6fd27SHans Rosenfeld #define	IDX_MASK			((1 << MINOR_SHIFT) - 1)
242*28b6fd27SHans Rosenfeld #define	MINOR_BATT(idx)			(ACPI_DRV_TYPE_CBAT << MINOR_SHIFT | \
243*28b6fd27SHans Rosenfeld 					(idx))
244*28b6fd27SHans Rosenfeld #define	MINOR_AC(idx)			(ACPI_DRV_TYPE_AC << MINOR_SHIFT | \
245*28b6fd27SHans Rosenfeld 					(idx))
246*28b6fd27SHans Rosenfeld #define	MINOR_LID(idx)			(ACPI_DRV_TYPE_LID << MINOR_SHIFT | \
247*28b6fd27SHans Rosenfeld 					(idx))
248*28b6fd27SHans Rosenfeld #define	MINOR_HOTKEY(idx)		(ACPI_DRV_TYPE_HOTKEY << MINOR_SHIFT \
249*28b6fd27SHans Rosenfeld 					| (idx))
250*28b6fd27SHans Rosenfeld #define	MINOR2IDX(minor)		((minor) & IDX_MASK)
251*28b6fd27SHans Rosenfeld #define	MINOR2TYPE(minor)		((minor) >> MINOR_SHIFT)
252*28b6fd27SHans Rosenfeld 
253*28b6fd27SHans Rosenfeld #endif /* _KERNEL */
254*28b6fd27SHans Rosenfeld 
2557c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
2567c478bd9Sstevel@tonic-gate }
2577c478bd9Sstevel@tonic-gate #endif
2587c478bd9Sstevel@tonic-gate 
259d2ec54f7Sphitran #endif /* _ACPI_DRV_H */
260