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