xref: /openbsd-src/sys/dev/acpi/acpidev.h (revision 99446a6d6053c09ce578b8707502aa059661f189)
1*99446a6dSkettenis /* $OpenBSD: acpidev.h,v 1.45 2024/08/06 17:38:56 kettenis Exp $ */
2cefd38a9Smarco /*
3cefd38a9Smarco  * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
4cefd38a9Smarco  * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
5cefd38a9Smarco  *
6cefd38a9Smarco  * Permission to use, copy, modify, and distribute this software for any
7cefd38a9Smarco  * purpose with or without fee is hereby granted, provided that the above
8cefd38a9Smarco  * copyright notice and this permission notice appear in all copies.
9cefd38a9Smarco  *
10cefd38a9Smarco  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11cefd38a9Smarco  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12cefd38a9Smarco  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13cefd38a9Smarco  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14cefd38a9Smarco  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15cefd38a9Smarco  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16cefd38a9Smarco  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17cefd38a9Smarco  */
18cefd38a9Smarco 
19cefd38a9Smarco #ifndef __DEV_ACPI_ACPIDEV_H__
20cefd38a9Smarco #define __DEV_ACPI_ACPIDEV_H__
21cefd38a9Smarco 
2290b9003dSmarco #include <sys/sensors.h>
2390b9003dSmarco #include <sys/rwlock.h>
243cd93248Sgwk #include <dev/acpi/acpireg.h>
25a7e2cbadSjcs #include <dev/acpi/smbus.h>
2690b9003dSmarco 
27101477eeSmarco #define DEVNAME(s)  ((s)->sc_dev.dv_xname)
28101477eeSmarco 
29*99446a6dSkettenis #define ACPIDEV_NOPOLL		0x0000
30*99446a6dSkettenis #define ACPIDEV_POLL		0x0001
31*99446a6dSkettenis #define ACPIDEV_WAKEUP		0x0002
3225ae5cf1Smarco 
33cefd38a9Smarco /*
34cefd38a9Smarco  * _BIF (Battery InFormation)
35cefd38a9Smarco  * Arguments: none
36cefd38a9Smarco  * Results  : package _BIF (Battery InFormation)
37cefd38a9Smarco  * Package {
38cefd38a9Smarco  * 	// ASCIIZ is ASCII character string terminated with a 0x00.
39cefd38a9Smarco  * 	Power Unit			//DWORD
40cefd38a9Smarco  * 	Design Capacity			//DWORD
41cefd38a9Smarco  * 	Last Full Charge Capacity	//DWORD
42cefd38a9Smarco  * 	Battery Technology		//DWORD
43cefd38a9Smarco  * 	Design Voltage			//DWORD
44cefd38a9Smarco  * 	Design Capacity of Warning	//DWORD
45cefd38a9Smarco  * 	Design Capacity of Low		//DWORD
46cefd38a9Smarco  * 	Battery Capacity Granularity 1	//DWORD
47cefd38a9Smarco  * 	Battery Capacity Granularity 2	//DWORD
48cefd38a9Smarco  * 	Model Number			//ASCIIZ
49cefd38a9Smarco  * 	Serial Number			//ASCIIZ
50cefd38a9Smarco  * 	Battery Type			//ASCIIZ
51cefd38a9Smarco  * 	OEM Information			//ASCIIZ
52cefd38a9Smarco  * }
53254e4542Sjcs  *
54eca66a7eSjcs  * _BIX (Battery Information Extended)
55254e4542Sjcs  * Arguments: none
56eca66a7eSjcs  * Results  : package _BIX (Battery Information Extended)
57254e4542Sjcs  * Package {
58254e4542Sjcs  * 	// ASCIIZ is ASCII character string terminated with a 0x00.
59254e4542Sjcs  *	Revision			//Integer
60254e4542Sjcs  * 	Power Unit			//DWORD
61254e4542Sjcs  * 	Design Capacity			//DWORD
62254e4542Sjcs  * 	Last Full Charge Capacity	//DWORD
63254e4542Sjcs  * 	Battery Technology		//DWORD
64254e4542Sjcs  * 	Design Voltage			//DWORD
65254e4542Sjcs  * 	Design Capacity of Warning	//DWORD
66254e4542Sjcs  * 	Design Capacity of Low		//DWORD
67254e4542Sjcs  * 	Cycle Count			//DWORD
68254e4542Sjcs  * 	Measurement Accuracy		//DWORD
69254e4542Sjcs  * 	Max Sampling Time		//DWORD
70254e4542Sjcs  * 	Min Sampling Time		//DWORD
71254e4542Sjcs  * 	Max Averaging Interval		//DWORD
72254e4542Sjcs  * 	Min Averaging Interval		//DWORD
73254e4542Sjcs  * 	Battery Capacity Granularity 1	//DWORD
74254e4542Sjcs  * 	Battery Capacity Granularity 2	//DWORD
75254e4542Sjcs  * 	Model Number			//ASCIIZ
76254e4542Sjcs  * 	Serial Number			//ASCIIZ
77254e4542Sjcs  * 	Battery Type			//ASCIIZ
78254e4542Sjcs  * 	OEM Information			//ASCIIZ
79254e4542Sjcs  * }
80cefd38a9Smarco  */
81254e4542Sjcs struct acpibat_bix {
82d2eaebe9Skettenis 	uint8_t		bix_revision;
83d2eaebe9Skettenis 	uint32_t	bix_power_unit;
84254e4542Sjcs #define BIX_POWER_MW		0x00
85254e4542Sjcs #define BIX_POWER_MA		0x01
86d2eaebe9Skettenis 	uint32_t	bix_capacity;
87254e4542Sjcs #define BIX_UNKNOWN		0xffffffff
88d2eaebe9Skettenis 	uint32_t	bix_last_capacity;
89d2eaebe9Skettenis 	uint32_t	bix_technology;
90254e4542Sjcs #define BIX_TECH_PRIMARY	0x00
91254e4542Sjcs #define BIX_TECH_SECONDARY	0x01
92d2eaebe9Skettenis 	uint32_t	bix_voltage;
93d2eaebe9Skettenis 	uint32_t	bix_warning;
94d2eaebe9Skettenis 	uint32_t	bix_low;
95d2eaebe9Skettenis 	uint32_t	bix_cycle_count;
96d2eaebe9Skettenis 	uint32_t	bix_accuracy;
97d2eaebe9Skettenis 	uint32_t	bix_max_sample;
98d2eaebe9Skettenis 	uint32_t	bix_min_sample;
99d2eaebe9Skettenis 	uint32_t	bix_max_avg;
100d2eaebe9Skettenis 	uint32_t	bix_min_avg;
101d2eaebe9Skettenis 	uint32_t	bix_cap_granu1;
102d2eaebe9Skettenis 	uint32_t	bix_cap_granu2;
103254e4542Sjcs 	char		bix_model[20];
104254e4542Sjcs 	char		bix_serial[20];
105254e4542Sjcs 	char		bix_type[20];
106254e4542Sjcs 	char		bix_oem[20];
107cefd38a9Smarco };
108cefd38a9Smarco 
109cefd38a9Smarco /*
110cefd38a9Smarco  * _OSC Definition for Control Method Battery
111cefd38a9Smarco  * Arguments: none
112cefd38a9Smarco  * Results  : DWORD flags
113cefd38a9Smarco  */
114cefd38a9Smarco #define CMB_OSC_UUID		"f18fc78b-0f15-4978-b793-53f833a1d35b"
115cefd38a9Smarco #define   CMB_OSC_GRANULARITY	0x01
116cefd38a9Smarco #define   CMB_OSC_WAKE_ON_LOW	0x02
117cefd38a9Smarco 
118cefd38a9Smarco /*
119cefd38a9Smarco  * _BST (Battery STatus)
120cefd38a9Smarco  * Arguments: none
121cefd38a9Smarco  * Results  : package _BST (Battery STatus)
122cefd38a9Smarco  * Package {
123cefd38a9Smarco  * 	Battery State			//DWORD
124cefd38a9Smarco  * 	Battery Present Rate		//DWORD
125cefd38a9Smarco  * 	Battery Remaining Capacity	//DWORD
126cefd38a9Smarco  * 	Battery Present Voltage		//DWORD
127cefd38a9Smarco  * }
128cefd38a9Smarco  *
129cefd38a9Smarco  * Per the spec section 10.2.2.3
130cefd38a9Smarco  * Remaining Battery Percentage[%] = (Battery Remaining Capacity [=0 ~ 100] /
131cefd38a9Smarco  *     Last Full Charged Capacity[=100]) * 100
132cefd38a9Smarco  *
133cefd38a9Smarco  * Remaining Battery Life [h] = Battery Remaining Capacity [mAh/mWh] /
134cefd38a9Smarco  *     Battery Present Rate [=0xFFFFFFFF] = unknown
135cefd38a9Smarco  */
136cefd38a9Smarco struct acpibat_bst {
137d2eaebe9Skettenis 	uint32_t	bst_state;
138cefd38a9Smarco #define BST_DISCHARGE		0x01
139cefd38a9Smarco #define BST_CHARGE		0x02
140cefd38a9Smarco #define BST_CRITICAL		0x04
141d2eaebe9Skettenis 	uint32_t	bst_rate;
142cefd38a9Smarco #define BST_UNKNOWN		0xffffffff
143d2eaebe9Skettenis 	uint32_t	bst_capacity;
144d2eaebe9Skettenis 	uint32_t	bst_voltage;
145cefd38a9Smarco };
146cefd38a9Smarco 
147cefd38a9Smarco /*
148cefd38a9Smarco  * _BTP (Battery Trip Point)
149cefd38a9Smarco  * Arguments: DWORD level
150cefd38a9Smarco  * Results  : none
151cefd38a9Smarco  */
152cefd38a9Smarco #define BTP_CLEAR_TRIP_POINT	0x00
153cefd38a9Smarco 
154cefd38a9Smarco /*
155cefd38a9Smarco  * _BTM (Battery TiMe)
156cefd38a9Smarco  * Arguments: DWORD rate of discharge
157cefd38a9Smarco  * Results  : DWORD time in seconds or error/unknown
158cefd38a9Smarco  */
159cefd38a9Smarco #define BTM_CURRENT_RATE	0x00
160cefd38a9Smarco 
161cefd38a9Smarco #define BTM_RATE_TOO_LARGE	0x00
162cefd38a9Smarco #define BTM_CRITICAL		0x00
163cefd38a9Smarco #define BTM_UNKNOWN		0xffffffff
164cefd38a9Smarco 
165cefd38a9Smarco /*
166cefd38a9Smarco  * _BMD (Battery Maintenance Data)
167cefd38a9Smarco  * Arguments: none
168cefd38a9Smarco  * Results  : package _BMD (Battery Maintenance Data)
169cefd38a9Smarco  * Package {
170cefd38a9Smarco  * 	Status Flags		//DWORD
171cefd38a9Smarco  * 	Capability Flags	//DWORD
172cefd38a9Smarco  * 	Recalibrate Count	//DWORD
173cefd38a9Smarco  * 	Quick Recalibrate Time	//DWORD
174cefd38a9Smarco  * 	Slow Recalibrate Time	//DWORD
175cefd38a9Smarco  * }
176cefd38a9Smarco  */
177cefd38a9Smarco struct acpibat_bmd {
178d2eaebe9Skettenis 	uint32_t	bmd_status;
179cefd38a9Smarco #define BMD_AML_CALIBRATE_CYCLE	0x01
180cefd38a9Smarco #define BMD_CHARGING_DISABLED	0x02
181cefd38a9Smarco #define BMD_DISCHARGE_WHILE_AC	0x04
182cefd38a9Smarco #define BMD_RECALIBRATE_BAT	0x08
183cefd38a9Smarco #define BMD_GOTO_STANDBY_SPEED	0x10
184d2eaebe9Skettenis 	uint32_t	bmd_capability;
185cefd38a9Smarco #define BMD_CB_AML_CALIBRATION	0x01
186cefd38a9Smarco #define BMD_CB_DISABLE_CHARGER	0x02
187cefd38a9Smarco #define BMD_CB_DISCH_WHILE_AC	0x04
188cefd38a9Smarco #define BMD_CB_AFFECT_ALL_BATT	0x08
189cefd38a9Smarco #define BMD_CB_FULL_CHRG_FIRST	0x10
190d2eaebe9Skettenis 	uint32_t	bmd_recalibrate_count;
191cefd38a9Smarco #define BMD_ONLY_CALIB_IF_ST3	0x00	/* only recal when status bit 3 set */
192d2eaebe9Skettenis 	uint32_t	bmd_quick_recalibrate_time;
193cefd38a9Smarco #define BMD_UNKNOWN		0xffffffff
194d2eaebe9Skettenis 	uint32_t	bmd_slow_recalibrate_time;
195cefd38a9Smarco };
196cefd38a9Smarco 
197cefd38a9Smarco /*
198cefd38a9Smarco  * _BMC (Battery Maintenance Control)
199cefd38a9Smarco  * Arguments: DWORD flags
200cefd38a9Smarco  * Results  : none
201cefd38a9Smarco  */
202cefd38a9Smarco #define BMC_AML_CALIBRATE	0x01
203cefd38a9Smarco #define BMC_DISABLE_CHARGING	0x02
204cefd38a9Smarco #define BMC_ALLOW_AC_DISCHARGE	0x04
205cefd38a9Smarco 
206cefd38a9Smarco /* AC device */
207cefd38a9Smarco /*
208cefd38a9Smarco  * _PSR (Power Source)
209cefd38a9Smarco  * Arguments: none
210cefd38a9Smarco  * Results  : DWORD status
211cefd38a9Smarco  */
2123b65ef04Smarco #define PSR_OFFLINE		0x00
2133b65ef04Smarco #define PSR_ONLINE		0x01
214cefd38a9Smarco 
215cefd38a9Smarco /*
216cefd38a9Smarco  * _PCL (Power Consumer List)
217cefd38a9Smarco  * Arguments: none
218cefd38a9Smarco  * Results  : LIST of Power Class pointers
219cefd38a9Smarco  */
220cefd38a9Smarco 
2219dec3a39Smarco /* hpet device */
222cefd38a9Smarco #define	HPET_REG_SIZE		1024
223cefd38a9Smarco 
224cefd38a9Smarco #define	HPET_CAPABILITIES	0x000
225cefd38a9Smarco #define	HPET_CONFIGURATION	0x010
226cefd38a9Smarco #define	HPET_INTERRUPT_STATUS	0x020
227cefd38a9Smarco #define	HPET_MAIN_COUNTER	0x0F0
228cefd38a9Smarco #define	HPET_TIMER0_CONFIG	0x100
229cefd38a9Smarco #define	HPET_TIMER0_COMPARE	0x108
230cefd38a9Smarco #define	HPET_TIMER0_INTERRUPT	0x110
2314be5b5b8Smlarkin #define	HPET_TIMER1_CONFIG	((0x20 * 1) + HPET_TIMER0_CONFIG)
2324be5b5b8Smlarkin #define	HPET_TIMER1_COMPARE	((0x20 * 1) + HPET_TIMER0_COMPARE)
2334be5b5b8Smlarkin #define	HPET_TIMER1_INTERRUPT	((0x20 * 1) + HPET_TIMER0_INTERRUPT)
2344be5b5b8Smlarkin #define	HPET_TIMER2_CONFIG	((0x20 * 2) + HPET_TIMER0_CONFIG)
2354be5b5b8Smlarkin #define	HPET_TIMER2_COMPARE	((0x20 * 2) + HPET_TIMER0_COMPARE)
2364be5b5b8Smlarkin #define	HPET_TIMER2_INTERRUPT	((0x20 * 2) + HPET_TIMER0_INTERRUPT)
237cefd38a9Smarco 
238a02f4b6cSmlarkin /* Max period is 10^8 fs (100 ns) == 0x5F5E100 as per the HPET SDM */
239a02f4b6cSmlarkin #define HPET_MAX_PERIOD		0x5F5E100
240a02f4b6cSmlarkin 
2413b44f0e1Sjordan #define STA_PRESENT   (1L << 0)
2421fc7e64aSkettenis #define STA_ENABLED   (1L << 1)
243dd403494Smarco #define STA_SHOW_UI   (1L << 2)
244dd403494Smarco #define STA_DEV_OK    (1L << 3)
2453b44f0e1Sjordan #define STA_BATTERY   (1L << 4)
2463b44f0e1Sjordan 
2478b65fcb3Smarco /*
2488b65fcb3Smarco  * _PSS (Performance Supported States)
2498b65fcb3Smarco  * Arguments: none
2508b65fcb3Smarco  * Results  : package _PSS (Performance Supported States)
2518b65fcb3Smarco  * Package {
2528b65fcb3Smarco  *	CoreFreq		//DWORD
2538b65fcb3Smarco  *	Power			//DWORD
2548b65fcb3Smarco  *	TransitionLatency	//DWORD
2558b65fcb3Smarco  *	BusMasterLatency	//DWORD
2568b65fcb3Smarco  *	Control			//DWORD
2578b65fcb3Smarco  * 	Status			//DWORD
2588b65fcb3Smarco  * }
2598b65fcb3Smarco  */
2608b65fcb3Smarco struct acpicpu_pss {
261d2eaebe9Skettenis 	uint32_t	pss_core_freq;
262d2eaebe9Skettenis 	uint32_t	pss_power;
263d2eaebe9Skettenis 	uint32_t	pss_trans_latency;
264d2eaebe9Skettenis 	uint32_t	pss_bus_latency;
265d2eaebe9Skettenis 	uint32_t	pss_ctrl;
266d2eaebe9Skettenis 	uint32_t	pss_status;
2678b65fcb3Smarco };
2688b65fcb3Smarco 
2693cd93248Sgwk int acpicpu_fetch_pss(struct acpicpu_pss **);
2703cd93248Sgwk void acpicpu_set_notify(void (*)(struct acpicpu_pss *, int));
271af736efeSmarco /*
272af736efeSmarco  * XXX this is returned in a buffer and is not a "natural" type.
273af736efeSmarco  *
274af736efeSmarco  * GRD (Generic Register Descriptor )
275af736efeSmarco  *
276af736efeSmarco  */
277af736efeSmarco struct acpi_grd {
278d2eaebe9Skettenis 	uint8_t		grd_descriptor;
279d2eaebe9Skettenis 	uint16_t	grd_length;
2803027e9c6Smarco 	struct acpi_gas	grd_gas;
281af736efeSmarco } __packed;
282af736efeSmarco 
283af736efeSmarco /*
284af736efeSmarco  * _PCT (Performance Control )
285af736efeSmarco  * Arguments: none
286af736efeSmarco  * Results  : package _PCT (Performance Control)
287af736efeSmarco  * Package {
288af736efeSmarco  *	Perf_Ctrl_register	//Register
289af736efeSmarco  *	Perf_Status_register	//Register
290af736efeSmarco  * }
291af736efeSmarco  */
292af736efeSmarco struct acpicpu_pct {
293af736efeSmarco 	struct acpi_grd	pct_ctrl;
294af736efeSmarco 	struct acpi_grd	pct_status;
295af736efeSmarco };
296af736efeSmarco 
29790b9003dSmarco /* softc for fake apm devices */
29890b9003dSmarco struct acpiac_softc {
29990b9003dSmarco 	struct device		sc_dev;
30090b9003dSmarco 
30190b9003dSmarco 	struct acpi_softc	*sc_acpi;
30290b9003dSmarco 	struct aml_node		*sc_devnode;
30390b9003dSmarco 
30490b9003dSmarco 	int			sc_ac_stat;
30590b9003dSmarco 
306275cbf62Sderaadt 	struct ksensor		sc_sens[1];
307275cbf62Sderaadt 	struct ksensordev	sc_sensdev;
30890b9003dSmarco };
30990b9003dSmarco 
31090b9003dSmarco struct acpibat_softc {
31190b9003dSmarco 	struct device		sc_dev;
31290b9003dSmarco 
31390b9003dSmarco 	struct acpi_softc	*sc_acpi;
31490b9003dSmarco 	struct aml_node		*sc_devnode;
31590b9003dSmarco 
316254e4542Sjcs 	struct acpibat_bix	sc_bix;
317254e4542Sjcs 	int			sc_use_bif;
31890b9003dSmarco 	struct acpibat_bst	sc_bst;
31990b9003dSmarco 	volatile int		sc_bat_present;
32090b9003dSmarco 
321254e4542Sjcs 	struct ksensor		sc_sens[10];
322275cbf62Sderaadt 	struct ksensordev	sc_sensdev;
32390b9003dSmarco };
324f2f7c420Smk 
325f402adeaSjordan TAILQ_HEAD(aml_nodelisth, aml_nodelist);
326f402adeaSjordan 
327f2f7c420Smk struct acpidock_softc {
328f2f7c420Smk 	struct device		sc_dev;
329f2f7c420Smk 
330f2f7c420Smk 	struct acpi_softc	*sc_acpi;
331f2f7c420Smk 	struct aml_node		*sc_devnode;
332f2f7c420Smk 
333f402adeaSjordan 	struct aml_nodelisth	sc_deps_h;
3342b11adf0Smk 	struct aml_nodelist	*sc_deps;
3352b11adf0Smk 
3364ee99e23Smk 	struct ksensor		sc_sens;
337275cbf62Sderaadt 	struct ksensordev	sc_sensdev;
338a4ffe32eSmk 
339f2f7c420Smk 	int			sc_docked;
340f2f7c420Smk 	int			sc_sta;
341f2f7c420Smk 
342f2f7c420Smk #define ACPIDOCK_STATUS_UNKNOWN		-1
343f2f7c420Smk #define ACPIDOCK_STATUS_UNDOCKED	0
344f2f7c420Smk #define ACPIDOCK_STATUS_DOCKED		1
345f2f7c420Smk };
346f2f7c420Smk 
347f2f7c420Smk #define ACPIDOCK_EVENT_INSERT	0
348e097d8aaSjordan #define ACPIDOCK_EVENT_DEVCHECK 1
349f2f7c420Smk #define	ACPIDOCK_EVENT_EJECT	3
350f2f7c420Smk 
3511c450453Sjordan #define ACPIEC_MAX_EVENTS	256
3521c450453Sjordan 
3531c450453Sjordan struct acpiec_event {
3541c450453Sjordan 	struct aml_node *event;
3551c450453Sjordan };
3561c450453Sjordan 
3571c450453Sjordan struct acpiec_softc {
3581c450453Sjordan 	struct device		sc_dev;
3591c450453Sjordan 
360abde4af0Smarco 	int			sc_ecbusy;
361abde4af0Smarco 
3621c450453Sjordan 	/* command/status register */
36311acbd79Spirofti 	bus_size_t		sc_ec_sc;
3641c450453Sjordan 	bus_space_tag_t		sc_cmd_bt;
3651c450453Sjordan 	bus_space_handle_t	sc_cmd_bh;
3661c450453Sjordan 
3671c450453Sjordan 	/* data register */
36811acbd79Spirofti 	bus_size_t		sc_ec_data;
3691c450453Sjordan 	bus_space_tag_t		sc_data_bt;
3701c450453Sjordan 	bus_space_handle_t	sc_data_bh;
3711c450453Sjordan 
3721c450453Sjordan 	struct acpi_softc	*sc_acpi;
3731c450453Sjordan 	struct aml_node		*sc_devnode;
374d2eaebe9Skettenis 	uint32_t		sc_gpe;
3751c450453Sjordan 	struct acpiec_event	sc_events[ACPIEC_MAX_EVENTS];
3761c450453Sjordan 	int			sc_gotsci;
377d6d5f422Spirofti 	int			sc_glk;
37880aee224Sbentley 	int			sc_cantburst;
3791c450453Sjordan };
380f2f7c420Smk 
3817b7683c7Smarco void		acpibtn_disable_psw(void);
3827b7683c7Smarco void		acpibtn_enable_psw(void);
38310b29720Smlarkin int		acpibtn_numopenlids(void);
384a7e2cbadSjcs 
385a7e2cbadSjcs struct acpisbs_battery {
386a7e2cbadSjcs 	uint16_t mode;			/* bit flags */
387a7e2cbadSjcs 	int	 units;
388a7e2cbadSjcs #define	ACPISBS_UNITS_MW		0
389a7e2cbadSjcs #define	ACPISBS_UNITS_MA		1
390a7e2cbadSjcs 	uint16_t at_rate;		/* mAh or mWh */
391a7e2cbadSjcs 	uint16_t temperature;		/* 0.1 degK */
392a7e2cbadSjcs 	uint16_t voltage;		/* mV */
393a7e2cbadSjcs 	uint16_t current;		/* mA */
394a7e2cbadSjcs 	uint16_t avg_current;		/* mA */
395a7e2cbadSjcs 	uint16_t rel_charge;		/* percent of last_capacity */
396a7e2cbadSjcs 	uint16_t abs_charge;		/* percent of design_capacity */
397a7e2cbadSjcs 	uint16_t capacity;		/* mAh */
398a7e2cbadSjcs 	uint16_t full_capacity;		/* mAh, when fully charged */
399a7e2cbadSjcs 	uint16_t run_time;		/* minutes */
400a7e2cbadSjcs 	uint16_t avg_empty_time;	/* minutes */
401a7e2cbadSjcs 	uint16_t avg_full_time;		/* minutes until full */
402a7e2cbadSjcs 	uint16_t charge_current;	/* mA */
403a7e2cbadSjcs 	uint16_t charge_voltage;	/* mV */
404a7e2cbadSjcs 	uint16_t status;		/* bit flags */
405a7e2cbadSjcs 	uint16_t cycle_count;		/* cycles */
406a7e2cbadSjcs 	uint16_t design_capacity;	/* mAh */
407a7e2cbadSjcs 	uint16_t design_voltage;	/* mV */
408a7e2cbadSjcs 	uint16_t spec;			/* formatted */
409a7e2cbadSjcs 	uint16_t manufacture_date;	/* formatted */
410a7e2cbadSjcs 	uint16_t serial;		/* number */
411a7e2cbadSjcs 
412a7e2cbadSjcs #define	ACPISBS_VALUE_UNKNOWN		65535
413a7e2cbadSjcs 
414a7e2cbadSjcs 	char	 manufacturer[SMBUS_DATA_SIZE];
415a7e2cbadSjcs 	char	 device_name[SMBUS_DATA_SIZE];
416a7e2cbadSjcs 	char	 device_chemistry[SMBUS_DATA_SIZE];
417a7e2cbadSjcs 	char	 oem_data[SMBUS_DATA_SIZE];
418a7e2cbadSjcs };
419a7e2cbadSjcs 
420a7e2cbadSjcs struct acpisbs_softc {
421a7e2cbadSjcs 	struct device		sc_dev;
422a7e2cbadSjcs 
423a7e2cbadSjcs 	struct acpi_softc	*sc_acpi;
424a7e2cbadSjcs 	struct aml_node		*sc_devnode;
425a7e2cbadSjcs 	struct acpiec_softc     *sc_ec;
426a7e2cbadSjcs 	uint8_t			sc_ec_base;
427a7e2cbadSjcs 
428a7e2cbadSjcs 	struct acpisbs_battery	sc_battery;
429a7e2cbadSjcs 	int			sc_batteries_present;
430a7e2cbadSjcs 
431a7e2cbadSjcs 	struct ksensor		*sc_sensors;
432a7e2cbadSjcs 	struct ksensordev	sc_sensordev;
433a7e2cbadSjcs 	struct sensor_task	*sc_sensor_task;
434a7e2cbadSjcs 	struct timeval		sc_lastpoll;
435a7e2cbadSjcs };
436a7e2cbadSjcs 
437cefd38a9Smarco #endif /* __DEV_ACPI_ACPIDEV_H__ */
438