13e0a4e85SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * Include file for the interface to an APM BIOS 41da177e4SLinus Torvalds * Copyright 1994-2001 Stephen Rothwell (sfr@canb.auug.org.au) 51da177e4SLinus Torvalds */ 6607ca46eSDavid Howells #ifndef _LINUX_APM_H 7607ca46eSDavid Howells #define _LINUX_APM_H 81da177e4SLinus Torvalds 9607ca46eSDavid Howells #include <uapi/linux/apm_bios.h> 10ee8e7cfeSRusty Russell 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #define APM_CS (GDT_ENTRY_APMBIOS_BASE * 8) 131da177e4SLinus Torvalds #define APM_CS_16 (APM_CS + 8) 141da177e4SLinus Torvalds #define APM_DS (APM_CS_16 + 8) 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds /* Results of APM Installation Check */ 171da177e4SLinus Torvalds #define APM_16_BIT_SUPPORT 0x0001 181da177e4SLinus Torvalds #define APM_32_BIT_SUPPORT 0x0002 191da177e4SLinus Torvalds #define APM_IDLE_SLOWS_CLOCK 0x0004 201da177e4SLinus Torvalds #define APM_BIOS_DISABLED 0x0008 211da177e4SLinus Torvalds #define APM_BIOS_DISENGAGED 0x0010 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds /* 241da177e4SLinus Torvalds * Data for APM that is persistent across module unload/load 251da177e4SLinus Torvalds */ 261da177e4SLinus Torvalds struct apm_info { 271da177e4SLinus Torvalds struct apm_bios_info bios; 281da177e4SLinus Torvalds unsigned short connection_version; 291da177e4SLinus Torvalds int get_power_status_broken; 301da177e4SLinus Torvalds int get_power_status_swabinminutes; 311da177e4SLinus Torvalds int allow_ints; 321da177e4SLinus Torvalds int forbid_idle; 331da177e4SLinus Torvalds int realmode_power_off; 341da177e4SLinus Torvalds int disabled; 351da177e4SLinus Torvalds }; 361da177e4SLinus Torvalds 371da177e4SLinus Torvalds /* 381da177e4SLinus Torvalds * The APM function codes 391da177e4SLinus Torvalds */ 401da177e4SLinus Torvalds #define APM_FUNC_INST_CHECK 0x5300 411da177e4SLinus Torvalds #define APM_FUNC_REAL_CONN 0x5301 421da177e4SLinus Torvalds #define APM_FUNC_16BIT_CONN 0x5302 431da177e4SLinus Torvalds #define APM_FUNC_32BIT_CONN 0x5303 441da177e4SLinus Torvalds #define APM_FUNC_DISCONN 0x5304 451da177e4SLinus Torvalds #define APM_FUNC_IDLE 0x5305 461da177e4SLinus Torvalds #define APM_FUNC_BUSY 0x5306 471da177e4SLinus Torvalds #define APM_FUNC_SET_STATE 0x5307 481da177e4SLinus Torvalds #define APM_FUNC_ENABLE_PM 0x5308 491da177e4SLinus Torvalds #define APM_FUNC_RESTORE_BIOS 0x5309 501da177e4SLinus Torvalds #define APM_FUNC_GET_STATUS 0x530a 511da177e4SLinus Torvalds #define APM_FUNC_GET_EVENT 0x530b 521da177e4SLinus Torvalds #define APM_FUNC_GET_STATE 0x530c 531da177e4SLinus Torvalds #define APM_FUNC_ENABLE_DEV_PM 0x530d 541da177e4SLinus Torvalds #define APM_FUNC_VERSION 0x530e 551da177e4SLinus Torvalds #define APM_FUNC_ENGAGE_PM 0x530f 561da177e4SLinus Torvalds #define APM_FUNC_GET_CAP 0x5310 571da177e4SLinus Torvalds #define APM_FUNC_RESUME_TIMER 0x5311 581da177e4SLinus Torvalds #define APM_FUNC_RESUME_ON_RING 0x5312 591da177e4SLinus Torvalds #define APM_FUNC_TIMER 0x5313 601da177e4SLinus Torvalds 611da177e4SLinus Torvalds /* 621da177e4SLinus Torvalds * Function code for APM_FUNC_RESUME_TIMER 631da177e4SLinus Torvalds */ 641da177e4SLinus Torvalds #define APM_FUNC_DISABLE_TIMER 0 651da177e4SLinus Torvalds #define APM_FUNC_GET_TIMER 1 661da177e4SLinus Torvalds #define APM_FUNC_SET_TIMER 2 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds /* 691da177e4SLinus Torvalds * Function code for APM_FUNC_RESUME_ON_RING 701da177e4SLinus Torvalds */ 711da177e4SLinus Torvalds #define APM_FUNC_DISABLE_RING 0 721da177e4SLinus Torvalds #define APM_FUNC_ENABLE_RING 1 731da177e4SLinus Torvalds #define APM_FUNC_GET_RING 2 741da177e4SLinus Torvalds 751da177e4SLinus Torvalds /* 761da177e4SLinus Torvalds * Function code for APM_FUNC_TIMER_STATUS 771da177e4SLinus Torvalds */ 781da177e4SLinus Torvalds #define APM_FUNC_TIMER_DISABLE 0 791da177e4SLinus Torvalds #define APM_FUNC_TIMER_ENABLE 1 801da177e4SLinus Torvalds #define APM_FUNC_TIMER_GET 2 811da177e4SLinus Torvalds 821da177e4SLinus Torvalds /* 831da177e4SLinus Torvalds * in arch/i386/kernel/setup.c 841da177e4SLinus Torvalds */ 851da177e4SLinus Torvalds extern struct apm_info apm_info; 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds /* 881da177e4SLinus Torvalds * This is the "All Devices" ID communicated to the BIOS 891da177e4SLinus Torvalds */ 901da177e4SLinus Torvalds #define APM_DEVICE_BALL ((apm_info.connection_version > 0x0100) ? \ 911da177e4SLinus Torvalds APM_DEVICE_ALL : APM_DEVICE_OLD_ALL) 921da177e4SLinus Torvalds #endif /* LINUX_APM_H */ 93