acpidev.h revision 1.31
1/* $OpenBSD: acpidev.h,v 1.31 2010/08/03 16:55:06 marco Exp $ */ 2/* 3 * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org> 4 * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19#ifndef __DEV_ACPI_ACPIDEV_H__ 20#define __DEV_ACPI_ACPIDEV_H__ 21 22#include <sys/sensors.h> 23#include <sys/rwlock.h> 24#include <dev/acpi/acpireg.h> 25 26#define DEVNAME(s) ((s)->sc_dev.dv_xname) 27 28#define ACPIDEV_NOPOLL 0 29#define ACPIDEV_POLL 1 30 31/* 32 * _BIF (Battery InFormation) 33 * Arguments: none 34 * Results : package _BIF (Battery InFormation) 35 * Package { 36 * // ASCIIZ is ASCII character string terminated with a 0x00. 37 * Power Unit //DWORD 38 * Design Capacity //DWORD 39 * Last Full Charge Capacity //DWORD 40 * Battery Technology //DWORD 41 * Design Voltage //DWORD 42 * Design Capacity of Warning //DWORD 43 * Design Capacity of Low //DWORD 44 * Battery Capacity Granularity 1 //DWORD 45 * Battery Capacity Granularity 2 //DWORD 46 * Model Number //ASCIIZ 47 * Serial Number //ASCIIZ 48 * Battery Type //ASCIIZ 49 * OEM Information //ASCIIZ 50 * } 51 */ 52struct acpibat_bif { 53 u_int32_t bif_power_unit; 54#define BIF_POWER_MW 0x00 55#define BIF_POWER_MA 0x01 56 u_int32_t bif_capacity; 57#define BIF_UNKNOWN 0xffffffff 58 u_int32_t bif_last_capacity; 59 u_int32_t bif_technology; 60#define BIF_TECH_PRIMARY 0x00 61#define BIF_TECH_SECONDARY 0x01 62 u_int32_t bif_voltage; 63 u_int32_t bif_warning; 64 u_int32_t bif_low; 65 u_int32_t bif_cap_granu1; 66 u_int32_t bif_cap_granu2; 67 char bif_model[20]; 68 char bif_serial[20]; 69 char bif_type[20]; 70 char bif_oem[20]; 71}; 72 73/* 74 * _OSC Definition for Control Method Battery 75 * Arguments: none 76 * Results : DWORD flags 77 */ 78#define CMB_OSC_UUID "f18fc78b-0f15-4978-b793-53f833a1d35b" 79#define CMB_OSC_GRANULARITY 0x01 80#define CMB_OSC_WAKE_ON_LOW 0x02 81 82/* 83 * _BST (Battery STatus) 84 * Arguments: none 85 * Results : package _BST (Battery STatus) 86 * Package { 87 * Battery State //DWORD 88 * Battery Present Rate //DWORD 89 * Battery Remaining Capacity //DWORD 90 * Battery Present Voltage //DWORD 91 * } 92 * 93 * Per the spec section 10.2.2.3 94 * Remaining Battery Percentage[%] = (Battery Remaining Capacity [=0 ~ 100] / 95 * Last Full Charged Capacity[=100]) * 100 96 * 97 * Remaining Battery Life [h] = Battery Remaining Capacity [mAh/mWh] / 98 * Battery Present Rate [=0xFFFFFFFF] = unknown 99 */ 100struct acpibat_bst { 101 u_int32_t bst_state; 102#define BST_DISCHARGE 0x01 103#define BST_CHARGE 0x02 104#define BST_CRITICAL 0x04 105 u_int32_t bst_rate; 106#define BST_UNKNOWN 0xffffffff 107 u_int32_t bst_capacity; 108 u_int32_t bst_voltage; 109}; 110 111/* 112 * _BTP (Battery Trip Point) 113 * Arguments: DWORD level 114 * Results : none 115 */ 116#define BTP_CLEAR_TRIP_POINT 0x00 117 118/* 119 * _BTM (Battery TiMe) 120 * Arguments: DWORD rate of discharge 121 * Results : DWORD time in seconds or error/unknown 122 */ 123#define BTM_CURRENT_RATE 0x00 124 125#define BTM_RATE_TOO_LARGE 0x00 126#define BTM_CRITICAL 0x00 127#define BTM_UNKNOWN 0xffffffff 128 129/* 130 * _BMD (Battery Maintenance Data) 131 * Arguments: none 132 * Results : package _BMD (Battery Maintenance Data) 133 * Package { 134 * Status Flags //DWORD 135 * Capability Flags //DWORD 136 * Recalibrate Count //DWORD 137 * Quick Recalibrate Time //DWORD 138 * Slow Recalibrate Time //DWORD 139 * } 140 */ 141struct acpibat_bmd { 142 u_int32_t bmd_status; 143#define BMD_AML_CALIBRATE_CYCLE 0x01 144#define BMD_CHARGING_DISABLED 0x02 145#define BMD_DISCHARGE_WHILE_AC 0x04 146#define BMD_RECALIBRATE_BAT 0x08 147#define BMD_GOTO_STANDBY_SPEED 0x10 148 u_int32_t bmd_capability; 149#define BMD_CB_AML_CALIBRATION 0x01 150#define BMD_CB_DISABLE_CHARGER 0x02 151#define BMD_CB_DISCH_WHILE_AC 0x04 152#define BMD_CB_AFFECT_ALL_BATT 0x08 153#define BMD_CB_FULL_CHRG_FIRST 0x10 154 u_int32_t bmd_recalibrate_count; 155#define BMD_ONLY_CALIB_IF_ST3 0x00 /* only recal when status bit 3 set */ 156 u_int32_t bmd_quick_recalibrate_time; 157#define BMD_UNKNOWN 0xffffffff 158 u_int32_t bmd_slow_recalibrate_time; 159}; 160 161/* 162 * _BMC (Battery Maintenance Control) 163 * Arguments: DWORD flags 164 * Results : none 165 */ 166#define BMC_AML_CALIBRATE 0x01 167#define BMC_DISABLE_CHARGING 0x02 168#define BMC_ALLOW_AC_DISCHARGE 0x04 169 170/* AC device */ 171/* 172 * _PSR (Power Source) 173 * Arguments: none 174 * Results : DWORD status 175 */ 176#define PSR_OFFLINE 0x00 177#define PSR_ONLINE 0x01 178 179/* 180 * _PCL (Power Consumer List) 181 * Arguments: none 182 * Results : LIST of Power Class pointers 183 */ 184 185/* hpet device */ 186#define HPET_REG_SIZE 1024 187 188#define HPET_CAPABILITIES 0x000 189#define HPET_CONFIGURATION 0x010 190#define HPET_INTERRUPT_STATUS 0x020 191#define HPET_MAIN_COUNTER 0x0F0 192#define HPET_TIMER0_CONFIG 0x100 193#define HPET_TIMER0_COMPARE 0x108 194#define HPET_TIMER0_INTERRUPT 0x110 195#define HPET_TIMER1_CONFIG 0x200 196#define HPET_TIMER1_COMPARE 0x208 197#define HPET_TIMER1_INTERRUPT 0x310 198#define HPET_TIMER2_CONFIG 0x400 199#define HPET_TIMER2_COMPARE 0x408 200#define HPET_TIMER2_INTERRUPT 0x510 201 202#define STA_PRESENT (1L << 0) 203#define STA_ENABLED (1L << 1) 204#define STA_SHOW_UI (1L << 2) 205#define STA_DEV_OK (1L << 3) 206#define STA_BATTERY (1L << 4) 207 208/* 209 * _PSS (Performance Supported States) 210 * Arguments: none 211 * Results : package _PSS (Performance Supported States) 212 * Package { 213 * CoreFreq //DWORD 214 * Power //DWORD 215 * TransitionLatency //DWORD 216 * BusMasterLatency //DWORD 217 * Control //DWORD 218 * Status //DWORD 219 * } 220 */ 221struct acpicpu_pss { 222 u_int32_t pss_core_freq; 223 u_int32_t pss_power; 224 u_int32_t pss_trans_latency; 225 u_int32_t pss_bus_latency; 226 u_int32_t pss_ctrl; 227 u_int32_t pss_status; 228}; 229 230int acpicpu_fetch_pss(struct acpicpu_pss **); 231void acpicpu_set_notify(void (*)(struct acpicpu_pss *, int)); 232/* 233 * XXX this is returned in a buffer and is not a "natural" type. 234 * 235 * GRD (Generic Register Descriptor ) 236 * 237 */ 238struct acpi_grd { 239 u_int8_t grd_descriptor; 240 u_int16_t grd_length; 241 struct acpi_gas grd_gas; 242} __packed; 243 244/* 245 * _PCT (Performance Control ) 246 * Arguments: none 247 * Results : package _PCT (Performance Control) 248 * Package { 249 * Perf_Ctrl_register //Register 250 * Perf_Status_register //Register 251 * } 252 */ 253struct acpicpu_pct { 254 struct acpi_grd pct_ctrl; 255 struct acpi_grd pct_status; 256}; 257 258/* softc for fake apm devices */ 259struct acpiac_softc { 260 struct device sc_dev; 261 262 struct acpi_softc *sc_acpi; 263 struct aml_node *sc_devnode; 264 265 int sc_ac_stat; 266 267 struct ksensor sc_sens[1]; 268 struct ksensordev sc_sensdev; 269}; 270 271struct acpibat_softc { 272 struct device sc_dev; 273 274 struct acpi_softc *sc_acpi; 275 struct aml_node *sc_devnode; 276 277 struct acpibat_bif sc_bif; 278 struct acpibat_bst sc_bst; 279 volatile int sc_bat_present; 280 281 struct ksensor sc_sens[8]; 282 struct ksensordev sc_sensdev; 283}; 284 285TAILQ_HEAD(aml_nodelisth, aml_nodelist); 286 287struct acpidock_softc { 288 struct device sc_dev; 289 290 struct acpi_softc *sc_acpi; 291 struct aml_node *sc_devnode; 292 293 struct aml_nodelisth sc_deps_h; 294 struct aml_nodelist *sc_deps; 295 296 struct ksensor sc_sens; 297 struct ksensordev sc_sensdev; 298 299 int sc_docked; 300 int sc_sta; 301 302#define ACPIDOCK_STATUS_UNKNOWN -1 303#define ACPIDOCK_STATUS_UNDOCKED 0 304#define ACPIDOCK_STATUS_DOCKED 1 305}; 306 307#define ACPIDOCK_EVENT_INSERT 0 308#define ACPIDOCK_EVENT_DEVCHECK 1 309#define ACPIDOCK_EVENT_EJECT 3 310 311#define ACPIEC_MAX_EVENTS 256 312 313struct acpiec_event { 314 struct aml_node *event; 315}; 316 317struct acpiec_softc { 318 struct device sc_dev; 319 320 int sc_ecbusy; 321 322 /* command/status register */ 323 bus_space_tag_t sc_cmd_bt; 324 bus_space_handle_t sc_cmd_bh; 325 326 /* data register */ 327 bus_space_tag_t sc_data_bt; 328 bus_space_handle_t sc_data_bh; 329 330 struct acpi_softc *sc_acpi; 331 struct aml_node *sc_devnode; 332 u_int32_t sc_gpe; 333 struct acpiec_event sc_events[ACPIEC_MAX_EVENTS]; 334 int sc_gotsci; 335}; 336 337#endif /* __DEV_ACPI_ACPIDEV_H__ */ 338