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