root/arch/i386/include/apmvar.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: apmvar.h,v 1.15 2002/03/14 01:26:33 millert Exp $     */
    2 
    3 /*
    4  *  Copyright (c) 1995 John T. Kohl
    5  *  All rights reserved.
    6  * 
    7  *  Redistribution and use in source and binary forms, with or without
    8  *  modification, are permitted provided that the following conditions
    9  *  are met:
   10  *  1. Redistributions of source code must retain the above copyright
   11  *     notice, this list of conditions and the following disclaimer.
   12  *  2. Redistributions in binary form must reproduce the above copyright
   13  *     notice, this list of conditions and the following disclaimer in the
   14  *     documentation and/or other materials provided with the distribution.
   15  *  3. The name of the author may not be used to endorse or promote products
   16  *     derived from this software without specific prior written permission.
   17  * 
   18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
   19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   21  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
   22  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   24  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   26  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
   27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   28  * POSSIBILITY OF SUCH DAMAGE.
   29  * 
   30  */
   31 #ifndef _I386_APMVAR_H_
   32 #define _I386_APMVAR_H_
   33 
   34 #include <sys/ioccom.h>
   35 
   36 /* Advanced Power Management (v1.0 and v1.1 specification)
   37  * functions/defines/etc.
   38  */
   39 
   40 #define APM_VERSION     0x0102
   41 
   42 /*
   43  * APM info word from boot loader
   44  */
   45 #define APM_16BIT_SUPPORTED     0x00010000
   46 #define APM_32BIT_SUPPORTED     0x00020000
   47 #define APM_IDLE_SLOWS          0x00040000
   48 #define APM_BIOS_PM_DISABLED    0x00080000
   49 #define APM_BIOS_PM_DISENGAGED  0x00100000
   50 #define APM_MAJOR(f)            (((f) >> 8) & 0xff)
   51 #define APM_MINOR(f)            ((f) & 0xff)
   52 #define APM_VERMASK             0x0000ffff
   53 #define APM_NOCLI               0x00010000
   54 #define APM_BEBATT              0x00020000
   55 
   56 /* APM error codes */
   57 #define APM_ERR_CODE(regs)      (((regs)->ax & 0xff00) >> 8)
   58 #define APM_ERR_PM_DISABLED     0x01
   59 #define APM_ERR_REALALREADY     0x02
   60 #define APM_ERR_NOTCONN         0x03
   61 #define APM_ERR_16ALREADY       0x05
   62 #define APM_ERR_16NOTSUPP       0x06
   63 #define APM_ERR_32ALREADY       0x07
   64 #define APM_ERR_32NOTSUPP       0x08
   65 #define APM_ERR_UNRECOG_DEV     0x09
   66 #define APM_ERR_ERANGE          0x0A
   67 #define APM_ERR_NOTENGAGED      0x0B
   68 #define APM_ERR_EOPNOSUPP       0x0C
   69 #define APM_ERR_RTIMER_DISABLED 0x0D
   70 #define APM_ERR_UNABLE          0x60
   71 #define APM_ERR_NOEVENTS        0x80
   72 #define APM_ERR_NOT_PRESENT     0x86
   73 
   74 #define APM_DEV_APM_BIOS        0x0000
   75 #define APM_DEV_ALLDEVS         0x0001
   76 /* device classes are high byte; device IDs go in low byte */
   77 #define         APM_DEV_DISPLAY(x)      (0x0100|((x)&0xff))
   78 #define         APM_DEV_DISK(x)         (0x0200|((x)&0xff))
   79 #define         APM_DEV_PARALLEL(x)     (0x0300|((x)&0xff))
   80 #define         APM_DEV_SERIAL(x)       (0x0400|((x)&0xff))
   81 #define         APM_DEV_NETWORK(x)      (0x0500|((x)&0xff))
   82 #define         APM_DEV_PCMCIA(x)       (0x0600|((x)&0xff))
   83 #define         APM_DEV_BATTERIES(x)    (0x8000|((x)&0xff))
   84 #define         APM_DEV_ALLUNITS        0xff
   85 /* 0x8100-0xDFFF - reserved     */
   86 /* 0xE000-0xEFFF - OEM-defined  */
   87 /* 0xF000-0xFFFF - reserved     */
   88 
   89 #define APM_INSTCHECK           0x5300  /* int15 only */
   90 #define         APM_16BIT_SUPPORT       0x01
   91 #define         APM_32BIT_SUPPORT       0x02
   92 #define         APM_CPUIDLE_SLOW        0x04
   93 #define         APM_DISABLED            0x08
   94 #define         APM_DISENGAGED          0x10
   95 
   96 #define APM_REAL_CONNECT        0x5301  /* int15 only */
   97 #define APM_PROT16_CONNECT      0x5302  /* int15 only */
   98 #define APM_PROT32_CONNECT      0x5303  /* int15 only */
   99 #define APM_DISCONNECT          0x5304  /* %bx = APM_DEV_APM_BIOS */
  100 
  101 #define APM_CPU_IDLE            0x5305
  102 #define APM_CPU_BUSY            0x5306
  103 
  104 #define APM_SET_PWR_STATE       0x5307
  105 #define         APM_SYS_READY           0x0000  /* %cx */
  106 #define         APM_SYS_STANDBY         0x0001
  107 #define         APM_SYS_SUSPEND         0x0002
  108 #define         APM_SYS_OFF             0x0003
  109 #define         APM_LASTREQ_INPROG      0x0004
  110 #define         APM_LASTREQ_REJECTED    0x0005
  111 /* 0x0006 - 0x001f      Reserved system states    */
  112 /* 0x0020 - 0x003f      OEM-defined system states */
  113 /* 0x0040 - 0x007f      OEM-defined device states */
  114 /* 0x0080 - 0xffff      Reserved device states    */
  115 
  116 /* system standby is device ID (%bx) 0x0001, APM_SYS_STANDBY */
  117 /* system suspend is device ID (%bx) 0x0001, APM_SYS_SUSPEND */
  118 
  119 #define APM_PWR_MGT_ENABLE      0x5308
  120 #define         APM_MGT_ALL     0xffff  /* %bx */
  121 #define         APM_MGT_DISABLE 0x0     /* %cx */
  122 #define         APM_MGT_ENABLE  0x1
  123 
  124 #define APM_SYSTEM_DEFAULTS     0x5309
  125 #define         APM_DEFAULTS_ALL        0xffff  /* %bx */
  126 
  127 #define APM_POWER_STATUS        0x530a
  128 #define         APM_AC_OFF              0x00
  129 #define         APM_AC_ON               0x01
  130 #define         APM_AC_BACKUP           0x02
  131 #define         APM_AC_UNKNOWN          0xff
  132 #define         APM_BATT_HIGH           0x00
  133 #define         APM_BATT_LOW            0x01
  134 #define         APM_BATT_CRITICAL       0x02
  135 #define         APM_BATT_CHARGING       0x03
  136 #define         APM_BATT_UNKNOWN        0xff
  137 #define         APM_BATT_FLAG_HIGH      0x01
  138 #define         APM_BATT_FLAG_LOW       0x02
  139 #define         APM_BATT_FLAG_CRITICAL  0x04
  140 #define         APM_BATT_FLAG_CHARGING  0x08
  141 #define         APM_BATT_FLAG_NOBATTERY 0x10
  142 #define         APM_BATT_FLAG_NOSYSBATT 0x80
  143 #define         APM_BATT_LIFE_UNKNOWN   0xff
  144 #define         BATT_STATE(regp) ((regp)->bx & 0xff)
  145 #define         BATT_FLAGS(regp) (((regp)->cx & 0xff00) >> 8)
  146 #define         AC_STATE(regp) (((regp)->bx & 0xff00) >> 8)
  147 #define         BATT_LIFE(regp) ((regp)->cx & 0xff) /* in % */
  148 /* Return time in minutes. According to the APM 1.2 spec:
  149         DX = Remaining battery life -- time units
  150                 Bit 15 = 0      Time units are seconds
  151                        = 1      Time units are minutes
  152                 Bits 14-0 =     Number of seconds or minutes */
  153 #define         BATT_REMAINING(regp) (((regp)->dx & 0x8000) ? \
  154                                       ((regp)->dx & 0x7fff) : \
  155                                       ((regp)->dx & 0x7fff)/60)
  156 #define         BATT_REM_VALID(regp) (((regp)->dx & 0xffff) != 0xffff)
  157 #define         BATT_COUNT(regp)        ((regp)->si)
  158 
  159 #define APM_GET_PM_EVENT        0x530b
  160 #define         APM_NOEVENT             0x0000
  161 #define         APM_STANDBY_REQ         0x0001 /* %bx on return */
  162 #define         APM_SUSPEND_REQ         0x0002
  163 #define         APM_NORMAL_RESUME       0x0003
  164 #define         APM_CRIT_RESUME         0x0004 /* suspend/resume happened
  165                                                   without us */
  166 #define         APM_BATTERY_LOW         0x0005
  167 #define         APM_POWER_CHANGE        0x0006
  168 #define         APM_UPDATE_TIME         0x0007
  169 #define         APM_CRIT_SUSPEND_REQ    0x0008
  170 #define         APM_USER_STANDBY_REQ    0x0009
  171 #define         APM_USER_SUSPEND_REQ    0x000A
  172 #define         APM_SYS_STANDBY_RESUME  0x000B
  173 #define         APM_CAPABILITY_CHANGE   0x000C  /* apm v1.2 */
  174 /* 0x000d - 0x00ff      Reserved system events */
  175 /* 0x0100 - 0x01ff      Reserved device events */
  176 /* 0x0200 - 0x02ff      OEM-defined APM events */
  177 /* 0x0300 - 0xffff      Reserved */
  178 #define         APM_EVENT_MASK          0xffff
  179 
  180 #define APM_EVENT_COMPOSE(t,i)  ((((i) & 0x7fff) << 16)|((t) & APM_EVENT_MASK))
  181 #define APM_EVENT_TYPE(e)       ((e) & APM_EVENT_MASK)
  182 #define APM_EVENT_INDEX(e)      ((e) >> 16)
  183 
  184 #define APM_GET_POWER_STATE     0x530c
  185 #define APM_DEVICE_MGMT_ENABLE  0x530d
  186 
  187 #define APM_DRIVER_VERSION      0x530e
  188 /* %bx should be DEV value (APM_DEV_APM_BIOS)
  189    %ch = driver major vno
  190    %cl = driver minor vno
  191    return: %ah = conn major; %al = conn minor
  192    */
  193 #define         APM_CONN_MINOR(regp) ((regp)->ax & 0xff)
  194 #define         APM_CONN_MAJOR(regp) (((regp)->ax & 0xff00) >> 8)
  195 
  196 #define APM_PWR_MGT_ENGAGE      0x530F
  197 #define         APM_MGT_DISENGAGE       0x0     /* %cx */
  198 #define         APM_MGT_ENGAGE          0x1
  199 
  200 /* %bx - APM_DEV_APM_BIOS
  201  * %bl - number of batteries
  202  * %cx - capabilities
  203  */
  204 #define APM_GET_CAPABILITIES    0x5310
  205 #define         APM_NBATTERIES(regp)    ((regp)->bx)
  206 #define         APM_GLOBAL_STANDBY      0x0001
  207 #define         APM_GLOBAL_SUSPEND      0x0002
  208 #define         APM_RTIMER_STANDBY      0x0004  /* resume time wakes up */
  209 #define         APM_RTIMER_SUSPEND      0x0008
  210 #define         APM_IRRING_STANDBY      0x0010  /* internal ring wakes up */
  211 #define         APM_IRRING_SUSPEND      0x0020
  212 #define         APM_PCCARD_STANDBY      0x0040  /* pccard wakes up */
  213 #define         APM_PCCARD_SUSPEND      0x0080
  214 
  215 /* %bx - APM_DEV_APM_BIOS
  216  * %cl - function
  217  *      for %cl=2 (set resume timer)
  218  * %ch - seconds in BCD
  219  * %dh - hours in BCD
  220  * %dl - minutes in BCD
  221  * %si - month in BCD (high), day in BCD (low)
  222  * %di - year in BCD
  223  */
  224 #define APM_RESUME_TIMER        0x5311
  225 #define         APM_RT_DISABLE  0x0
  226 #define         APM_RT_GET      0x1
  227 #define         APM_RT_SET      0x2
  228 
  229 /* %bx - APM_DEV_APM_BIOS
  230  * %cx - function
  231  */
  232 #define APM_RESUME_ON_RING      0x5312
  233 #define         APM_ROR_DISABLE 0x0
  234 #define         APM_ROR_ENABLE  0x1
  235 #define         APM_ROR_STATUS  0x2
  236 
  237 /* %bx - APM_EDV_APM_BIOS
  238  * %cx - function
  239  */
  240 #define APM_INACTIVITY_TIMER    0x5313
  241 #define         APM_IT_DISABLE  0x0
  242 #define         APM_IT_ENABLE   0x1
  243 #define         APM_IT_STATUS   0x2
  244 
  245 /* %bh - function */
  246 #define APM_OEM                 0x5380
  247 #define         APM_OEM_INSTCHECK       0x7f    /* %bx - OEM ID */
  248 
  249 /*
  250  * LP (Laptop Package)
  251  *
  252  * Copyright (C) 1994 by HOSOKAWA Tatsumi <hosokawa@mt.cs.keio.ac.jp>
  253  *
  254  * This software may be used, modified, copied, and distributed, in
  255  * both source and binary form provided that the above copyright and
  256  * these terms are retained. Under no circumstances is the author 
  257  * responsible for the proper functioning of this software, nor does 
  258  * the author assume any responsibility for damages incurred with its 
  259  * use.
  260  *
  261  * Sep., 1994   Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD)
  262  */
  263 
  264 #define APM_BATTERY_ABSENT 4
  265 
  266 struct apm_power_info {
  267         u_char battery_state;
  268         u_char ac_state;
  269         u_char battery_life;
  270         u_char spare1;
  271         u_int minutes_left;             /* estimate */
  272         u_int spare2[6];
  273 };
  274 
  275 struct apm_ctl {
  276         u_int dev;
  277         u_int mode;
  278 };
  279 
  280 #define APM_IOC_REJECT  _IOW('A', 0, struct apm_event_info) /* reject request # */
  281 #define APM_IOC_STANDBY _IO('A', 1)     /* put system into standby */
  282 #define APM_IOC_SUSPEND _IO('A', 2)     /* put system into suspend */
  283 #define APM_IOC_GETPOWER _IOR('A', 3, struct apm_power_info) /* fetch battery state */
  284 #define APM_IOC_DEV_CTL _IOW('A', 5, struct apm_ctl) /* put device into mode */
  285 #define APM_IOC_PRN_CTL _IOW('A', 6, int ) /* driver power status msg */
  286 #define         APM_PRINT_ON    0       /* driver power status displayed */
  287 #define         APM_PRINT_OFF   1       /* driver power status not displayed */
  288 #define         APM_PRINT_PCT   2       /* driver power status only displayed
  289                                            if the percentage changes */
  290 
  291 #ifdef _KERNEL
  292 extern void apm_cpu_busy(void);
  293 extern void apm_cpu_idle(void);
  294 extern void apminit(void);
  295 int apm_set_powstate(u_int devid, u_int powstate);
  296 int apm_kqfilter(dev_t dev, struct knote *kn);
  297 #endif /* _KERNEL */
  298 
  299 #endif /* _I386_APMVAR_H_ */

/* [<][>][^][v][top][bottom][index][help] */