apm_bios.h revision 55205
1214518Srpaulo/* 2190214Srpaulo * APM (Advanced Power Management) BIOS Device Driver 3190214Srpaulo * 4190214Srpaulo * Copyright (c) 1994-1995 by HOSOKAWA, Tatsumi <hosokawa@mt.cs.keio.ac.jp> 5190214Srpaulo * 6190214Srpaulo * This software may be used, modified, copied, and distributed, in 7190214Srpaulo * both source and binary form provided that the above copyright and 8190214Srpaulo * these terms are retained. Under no circumstances is the author 9190214Srpaulo * responsible for the proper functioning of this software, nor does 10190214Srpaulo * the author assume any responsibility for damages incurred with its 11190214Srpaulo * use. 12190214Srpaulo * 13190214Srpaulo * Aug, 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD) 14190214Srpaulo * 15190214Srpaulo * $FreeBSD: head/sys/i386/include/apm_bios.h 55205 1999-12-29 04:46:21Z peter $ 16190214Srpaulo */ 17190214Srpaulo 18190214Srpaulo#ifndef _MACHINE_APM_BIOS_H_ 19190214Srpaulo#define _MACHINE_APM_BIOS_H_ 20190214Srpaulo 21190214Srpaulo#ifndef _KERNEL 22190214Srpaulo#include <sys/types.h> 23190214Srpaulo#endif 24190214Srpaulo#include <sys/ioccom.h> 25190214Srpaulo 26190214Srpaulo/* BIOS id */ 27190214Srpaulo#ifdef PC98 28190214Srpaulo#define APM_BIOS 0x9a 29190214Srpaulo#define APM_INT 0x1f 30190214Srpaulo#else 31190214Srpaulo#define APM_BIOS 0x53 32190214Srpaulo#define APM_INT 0x15 33190214Srpaulo#endif 34190214Srpaulo 35190214Srpaulo/* APM flags */ 36190214Srpaulo#define APM_16BIT_SUPPORT 0x01 37190214Srpaulo#define APM_32BIT_SUPPORT 0x02 38190214Srpaulo#define APM_CPUIDLE_SLOW 0x04 39190214Srpaulo#define APM_DISABLED 0x08 40190214Srpaulo#define APM_DISENGAGED 0x10 41190214Srpaulo 42190214Srpaulo/* APM initializer physical address */ 43190214Srpaulo#define APM_OURADDR 0x00080000 44190214Srpaulo 45190214Srpaulo/* APM functions */ 46190214Srpaulo#define APM_INSTCHECK 0x00 47190214Srpaulo#define APM_REALCONNECT 0x01 48251129Sdelphij#define APM_PROT16CONNECT 0x02 49190214Srpaulo#define APM_PROT32CONNECT 0x03 50190214Srpaulo#define APM_DISCONNECT 0x04 51190214Srpaulo#define APM_CPUIDLE 0x05 52190214Srpaulo#define APM_CPUBUSY 0x06 53190214Srpaulo#define APM_SETPWSTATE 0x07 54190214Srpaulo#define APM_ENABLEDISABLEPM 0x08 55190214Srpaulo#define APM_RESTOREDEFAULT 0x09 56190214Srpaulo#ifdef PC98 57190214Srpaulo#define APM_GETPWSTATUS 0x3a 58190214Srpaulo#else 59190214Srpaulo#define APM_GETPWSTATUS 0x0a 60190214Srpaulo#endif 61190214Srpaulo#define APM_GETPMEVENT 0x0b 62251129Sdelphij#define APM_GETPWSTATE 0x0c 63190214Srpaulo#define APM_ENABLEDISABLEDPM 0x0d 64190214Srpaulo#ifdef PC98 65190214Srpaulo#define APM_DRVVERSION 0x3e 66190214Srpaulo#else 67190214Srpaulo#define APM_DRVVERSION 0x0e 68190214Srpaulo#endif 69190214Srpaulo#define APM_ENGAGEDISENGAGEPM 0x0f 70235426Sdelphij#define APM_GETCAPABILITIES 0x10 71235426Sdelphij#define APM_RESUMETIMER 0x11 72190214Srpaulo#define APM_RESUMEONRING 0x12 73190214Srpaulo#define APM_TIMERREQUESTS 0x13 74190214Srpaulo#define APM_OEMFUNC 0x80 75190214Srpaulo 76190214Srpaulo/* error code */ 77190214Srpaulo#define APME_OK 0x00 78190214Srpaulo#define APME_PMDISABLED 0x01 79190214Srpaulo#define APME_REALESTABLISHED 0x02 80190214Srpaulo#define APME_NOTCONNECTED 0x03 81190214Srpaulo#define APME_PROT16ESTABLISHED 0x05 82190214Srpaulo#define APME_PROT16NOTSUPPORTED 0x06 83235426Sdelphij#define APME_PROT32ESTABLISHED 0x07 84235426Sdelphij#define APME_PROT32NOTDUPPORTED 0x08 85190214Srpaulo#define APME_UNKNOWNDEVICEID 0x09 86190214Srpaulo#define APME_OUTOFRANGE 0x0a 87190214Srpaulo#define APME_NOTENGAGED 0x0b 88190214Srpaulo#define APME_CANTENTERSTATE 0x60 89190214Srpaulo#define APME_NOPMEVENT 0x80 90190214Srpaulo#define APME_NOAPMPRESENT 0x86 91190214Srpaulo 92190214Srpaulo 93190214Srpaulo/* device code */ 94190214Srpaulo#define PMDV_APMBIOS 0x0000 95190214Srpaulo#define PMDV_ALLDEV 0x0001 96190214Srpaulo#define PMDV_DISP0 0x0100 97190214Srpaulo#define PMDV_DISP1 0x0101 98251129Sdelphij#define PMDV_2NDSTORAGE0 0x0200 99190214Srpaulo#define PMDV_2NDSTORAGE1 0x0201 100190214Srpaulo#define PMDV_2NDSTORAGE2 0x0202 101190214Srpaulo#define PMDV_2NDSTORAGE3 0x0203 102190214Srpaulo#define PMDV_PARALLEL0 0x0300 103190214Srpaulo#define PMDV_PARALLEL1 0x0301 104190214Srpaulo#define PMDV_SERIAL0 0x0400 105190214Srpaulo#define PMDV_SERIAL1 0x0401 106190214Srpaulo#define PMDV_SERIAL2 0x0402 107190214Srpaulo#define PMDV_SERIAL3 0x0403 108190214Srpaulo#define PMDV_SERIAL4 0x0404 109190214Srpaulo#define PMDV_SERIAL5 0x0405 110190214Srpaulo#define PMDV_SERIAL6 0x0406 111190214Srpaulo#define PMDV_SERIAL7 0x0407 112190214Srpaulo#define PMDV_NET0 0x0500 113190214Srpaulo#define PMDV_NET1 0x0501 114190214Srpaulo#define PMDV_NET2 0x0502 115190214Srpaulo#define PMDV_NET3 0x0503 116190214Srpaulo#define PMDV_PCMCIA0 0x0600 117190214Srpaulo#define PMDV_PCMCIA1 0x0601 118190214Srpaulo#define PMDV_PCMCIA2 0x0602 119190214Srpaulo#define PMDV_PCMCIA3 0x0603 120190214Srpaulo/* 0x0700 - 0xdfff Reserved */ 121190214Srpaulo/* 0xe000 - 0xefff OEM-defined power device IDs */ 122190214Srpaulo/* 0xf000 - 0xffff Reserved */ 123190214Srpaulo 124190214Srpaulo/* Power state */ 125190214Srpaulo#define PMST_APMENABLED 0x0000 126190214Srpaulo#define PMST_STANDBY 0x0001 127190214Srpaulo#define PMST_SUSPEND 0x0002 128190214Srpaulo#define PMST_OFF 0x0003 129190214Srpaulo#define PMST_LASTREQNOTIFY 0x0004 130190214Srpaulo#define PMST_LASTREQREJECT 0x0005 131190214Srpaulo/* 0x0006 - 0x001f Reserved system states */ 132190214Srpaulo/* 0x0020 - 0x003f OEM-defined system states */ 133190214Srpaulo/* 0x0040 - 0x007f OEM-defined device states */ 134190214Srpaulo/* 0x0080 - 0xffff Reserved device states */ 135190214Srpaulo 136190214Srpaulo#if !defined(ASSEMBLER) && !defined(INITIALIZER) 137190214Srpaulo 138190214Srpaulo/* C definitions */ 139190214Srpaulostruct apmhook { 140190214Srpaulo struct apmhook *ah_next; 141190214Srpaulo int (*ah_fun) __P((void *ah_arg)); 142190214Srpaulo void *ah_arg; 143190214Srpaulo const char *ah_name; 144190214Srpaulo int ah_order; 145190214Srpaulo}; 146190214Srpaulo#define APM_HOOK_NONE (-1) 147190214Srpaulo#define APM_HOOK_SUSPEND 0 148190214Srpaulo#define APM_HOOK_RESUME 1 149190214Srpaulo#define NAPM_HOOK 2 150190214Srpaulo 151190214Srpaulo#ifdef _KERNEL 152190214Srpaulo 153190214Srpaulovoid apm_suspend(int state); 154190214Srpaulostruct apmhook *apm_hook_establish (int apmh, struct apmhook *); 155190214Srpaulovoid apm_hook_disestablish (int apmh, struct apmhook *); 156190214Srpaulovoid apm_cpu_idle(void); 157190214Srpaulovoid apm_cpu_busy(void); 158190214Srpaulo 159190214Srpaulo#endif 160190214Srpaulo 161190214Srpaulo#endif /* !ASSEMBLER && !INITIALIZER */ 162190214Srpaulo 163190214Srpaulo#define APM_MIN_ORDER 0x00 164190214Srpaulo#define APM_MID_ORDER 0x80 165251129Sdelphij#define APM_MAX_ORDER 0xff 166190214Srpaulo 167190214Srpaulo/* power management event code */ 168190214Srpaulo#define PMEV_NOEVENT 0x0000 169190214Srpaulo#define PMEV_STANDBYREQ 0x0001 170190214Srpaulo#define PMEV_SUSPENDREQ 0x0002 171190214Srpaulo#define PMEV_NORMRESUME 0x0003 172190214Srpaulo#define PMEV_CRITRESUME 0x0004 173190214Srpaulo#define PMEV_BATTERYLOW 0x0005 174190214Srpaulo#define PMEV_POWERSTATECHANGE 0x0006 175190214Srpaulo#define PMEV_UPDATETIME 0x0007 176190214Srpaulo#define PMEV_CRITSUSPEND 0x0008 177190214Srpaulo#define PMEV_USERSTANDBYREQ 0x0009 178190214Srpaulo#define PMEV_USERSUSPENDREQ 0x000a 179190214Srpaulo#define PMEV_STANDBYRESUME 0x000b 180190214Srpaulo#define PMEV_CAPABILITIESCHANGE 0x000c 181190214Srpaulo/* 0x000d - 0x00ff Reserved system events */ 182190214Srpaulo/* 0x0100 - 0x01ff Reserved device events */ 183251129Sdelphij/* 0x0200 - 0x02ff OEM-defined APM events */ 184190214Srpaulo/* 0x0300 - 0xffff Reserved */ 185190214Srpaulo#define PMEV_DEFAULT 0xffffffff /* used for customization */ 186190214Srpaulo 187190214Srpaulo#if !defined(ASSEMBLER) && !defined(INITIALIZER) 188190214Srpaulo 189251129Sdelphij/* 190190214Srpaulo * Old apm_info structure, returned by the APMIO_GETINFO_OLD ioctl. This 191251129Sdelphij * is for backward compatibility with old executables. 192190214Srpaulo */ 193251129Sdelphijtypedef struct apm_info_old { 194190214Srpaulo u_int ai_major; /* APM major version */ 195190214Srpaulo u_int ai_minor; /* APM minor version */ 196190214Srpaulo u_int ai_acline; /* AC line status */ 197190214Srpaulo u_int ai_batt_stat; /* Battery status */ 198190214Srpaulo u_int ai_batt_life; /* Remaining battery life */ 199190214Srpaulo u_int ai_status; /* Status of APM support (enabled/disabled) */ 200190214Srpaulo} *apm_info_old_t; 201190214Srpaulo 202190214Srpaulo/* 203190214Srpaulo * Structure returned by the APMIO_GETINFO ioctl. 204190214Srpaulo * 205190214Srpaulo * In the comments below, the parenthesized numbers indicate the minimum 206190214Srpaulo * value of ai_infoversion for which each field is valid. 207190214Srpaulo */ 208190214Srpaulotypedef struct apm_info { 209190214Srpaulo u_int ai_infoversion; /* Indicates which fields are valid */ 210190214Srpaulo u_int ai_major; /* APM major version (0) */ 211190214Srpaulo u_int ai_minor; /* APM minor version (0) */ 212190214Srpaulo u_int ai_acline; /* AC line status (0) */ 213190214Srpaulo u_int ai_batt_stat; /* Battery status (0) */ 214190214Srpaulo u_int ai_batt_life; /* Remaining battery life in percent (0) */ 215190214Srpaulo int ai_batt_time; /* Remaining battery time in seconds (0) */ 216190214Srpaulo u_int ai_status; /* True if enabled (0) */ 217190214Srpaulo u_int ai_batteries; /* Number of batteries (1) */ 218190214Srpaulo u_int ai_capabilities;/* APM Capabilities (1) */ 219190214Srpaulo u_int ai_spare[6]; /* For future expansion */ 220190214Srpaulo} *apm_info_t; 221190214Srpaulo 222190214Srpaulostruct apm_bios_arg { 223190214Srpaulo u_long eax; 224190214Srpaulo u_long ebx; 225190214Srpaulo u_long ecx; 226190214Srpaulo u_long edx; 227190214Srpaulo u_long esi; 228190214Srpaulo u_long edi; 229190214Srpaulo}; 230190214Srpaulo 231190214Srpaulostruct apm_event_info { 232190214Srpaulo u_int type; 233190214Srpaulo u_int index; 234190214Srpaulo u_int spare[8]; 235190214Srpaulo}; 236190214Srpaulo 237190214Srpaulo#define APMIO_SUSPEND _IO('P', 1) 238190214Srpaulo#define APMIO_GETINFO_OLD _IOR('P', 2, struct apm_info_old) 239190214Srpaulo#define APMIO_ENABLE _IO('P', 5) 240190214Srpaulo#define APMIO_DISABLE _IO('P', 6) 241190214Srpaulo#define APMIO_HALTCPU _IO('P', 7) 242190214Srpaulo#define APMIO_NOTHALTCPU _IO('P', 8) 243190214Srpaulo#define APMIO_DISPLAY _IOW('P', 9, int) 244190214Srpaulo#define APMIO_BIOS _IOWR('P', 10, struct apm_bios_arg) 245190214Srpaulo#define APMIO_GETINFO _IOR('P', 11, struct apm_info) 246190214Srpaulo#define APMIO_STANDBY _IO('P', 12) 247190214Srpaulo/* for /dev/apmctl */ 248190214Srpaulo#define APMIO_NEXTEVENT _IOR('A', 100, struct apm_event_info) 249190214Srpaulo#define APMIO_REJECTLASTREQ _IO('P', 101) 250190214Srpaulo 251190214Srpaulo#endif /* !ASSEMBLER && !INITIALIZER */ 252190214Srpaulo 253190214Srpaulo#endif /* !_MACHINE_APM_BIOS_H_ */ 254190214Srpaulo