Annotation of kernel/machdep/i386/APM_BIOS.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7:  * Reserved.  This file contains Original Code and/or Modifications of
        !             8:  * Original Code as defined in and that are subject to the Apple Public
        !             9:  * Source License Version 1.1 (the "License").  You may not use this file
        !            10:  * except in compliance with the License.  Please obtain a copy of the
        !            11:  * License at http://www.apple.com/publicsource and read it before using
        !            12:  * this file.
        !            13:  * 
        !            14:  * The Original Code and all software distributed under the License are
        !            15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            19:  * License for the specific language governing rights and limitations
        !            20:  * under the License.
        !            21:  * 
        !            22:  * @APPLE_LICENSE_HEADER_END@
        !            23:  */
        !            24: 
        !            25: /*
        !            26:  * Copyright 1994 NeXT Computer, Inc.
        !            27:  * All rights reserved.
        !            28:  */
        !            29: 
        !            30: #ifdef KERNEL_PRIVATE
        !            31: 
        !            32: #import <mach/mach_types.h>
        !            33: 
        !            34: #import <machdep/i386/seg.h>
        !            35: #import <machdep/i386/bios.h>
        !            36: 
        !            37: #import <kern/power.h>
        !            38: 
        !            39: #import <architecture/i386/frame.h>
        !            40: 
        !            41: /* APM 1.0 */
        !            42: #define APM_BIOS_CODE          0x53
        !            43: #define APM_BIOS_IDLE          0x05
        !            44: #define APM_BIOS_BUSY          0x06
        !            45: #define APM_BIOS_SETSTATE      0x07
        !            46: #define APM_BIOS_DISABLE       0x08
        !            47: #define APM_BIOS_DEFAULT       0x09
        !            48: #define APM_BIOS_GETSTATUS     0x0A
        !            49: #define APM_BIOS_GETEVENT      0x0B
        !            50: 
        !            51: /* APM 1.1 */
        !            52: #define APM_BIOS_GETSTATE      0x0C
        !            53: #define APM_BIOS_ENBL_DEVICE   0x0D
        !            54: #define APM_BIOS_VERSION       0x0E
        !            55: #define APM_BIOS_ENGAGE                0x0F
        !            56: 
        !            57: static unsigned long APM_BIOS_addr;
        !            58: 
        !            59: static inline void
        !            60: initBIOSBuf(
        !            61:     biosBuf_t *bb,
        !            62:     unsigned char code
        !            63: )
        !            64: {
        !            65:     union {
        !            66:        unsigned short  data;
        !            67:        sel_t           sel;
        !            68:     } u;
        !            69: 
        !            70:     bb->eax.r.h = APM_BIOS_CODE;
        !            71:     bb->eax.r.l = code;
        !            72:     u.sel = APMCODE32_SEL; 
        !            73:     bb->cs = u.data;
        !            74:     u.sel = KDS_SEL;
        !            75:     bb->ds = u.data;
        !            76:     bb->addr = APM_BIOS_addr;
        !            77: }
        !            78: 
        !            79: static inline PMReturn
        !            80: BIOSToPM(
        !            81:     int biosReturn
        !            82: )
        !            83: {
        !            84:     if (biosReturn == 0x00)
        !            85:        return PM_R_UNKNOWN;
        !            86:     else
        !            87:        return (PMReturn)pm_err(biosReturn);
        !            88: }
        !            89: 
        !            90: /*
        !            91:  * Inlines for APM BIOS calls.
        !            92:  */
        !            93: 
        !            94: static inline PMReturn
        !            95: APMBIOS_Idle()
        !            96: {
        !            97:     biosBuf_t bb;
        !            98: 
        !            99:     initBIOSBuf(&bb, APM_BIOS_IDLE);
        !           100:     bios32(&bb);
        !           101:     if ((bb.flags & EFL_CF) == 0)
        !           102:        return PM_R_SUCCESS;
        !           103:     else
        !           104:        return BIOSToPM(bb.eax.r.h);
        !           105: }
        !           106: 
        !           107: static inline PMReturn
        !           108: APMBIOS_Busy()
        !           109: {
        !           110:     biosBuf_t bb;
        !           111:     
        !           112:     initBIOSBuf(&bb, APM_BIOS_BUSY);
        !           113:     bios32(&bb);
        !           114:     if ((bb.flags & EFL_CF) == 0)
        !           115:        return PM_R_SUCCESS;
        !           116:     else
        !           117:        return BIOSToPM(bb.eax.r.h);
        !           118: }
        !           119: 
        !           120: static inline PMReturn
        !           121: APMBIOS_SetPowerState(
        !           122:     unsigned short deviceID,
        !           123:     unsigned short stateID
        !           124: )
        !           125: {
        !           126:     biosBuf_t bb;
        !           127: 
        !           128:     initBIOSBuf(&bb, APM_BIOS_SETSTATE);
        !           129:     bb.ebx.rx = deviceID;
        !           130:     bb.ecx.rx = stateID;
        !           131:     bios32(&bb);
        !           132:     if ((bb.flags & EFL_CF) == 0)
        !           133:        return PM_R_SUCCESS;
        !           134:     else
        !           135:        return BIOSToPM(bb.eax.r.h);
        !           136: }
        !           137: 
        !           138: static inline PMReturn
        !           139: APMBIOS_GetPowerStatus(
        !           140:     unsigned char *line_status,
        !           141:     unsigned char *batt_status,
        !           142:     unsigned char *batt_life
        !           143: )
        !           144: {
        !           145:     biosBuf_t bb;
        !           146: 
        !           147:     initBIOSBuf(&bb, APM_BIOS_GETSTATUS);
        !           148:     bb.ebx.rx = 0x0001;
        !           149:     bios32(&bb);
        !           150:     if ((bb.flags & EFL_CF) == 0) {
        !           151:        *line_status = bb.ebx.r.h;
        !           152:        *batt_status = bb.ebx.r.l;
        !           153:        *batt_life = bb.ecx.r.l;
        !           154:        return PM_R_SUCCESS;
        !           155:     }
        !           156:     return BIOSToPM(bb.eax.r.h);
        !           157: }
        !           158: 
        !           159: static inline PMReturn
        !           160: APMBIOS_GetPowerEvent(
        !           161:     unsigned short *event_code
        !           162: )
        !           163: {
        !           164:     biosBuf_t bb;
        !           165: 
        !           166:     initBIOSBuf(&bb, APM_BIOS_GETEVENT);
        !           167:     bios32(&bb);
        !           168:     if ((bb.flags & EFL_CF) == 0) {
        !           169:        *event_code = bb.ebx.rx;
        !           170:        return PM_R_SUCCESS;
        !           171:     }
        !           172:     return BIOSToPM(bb.eax.r.h);
        !           173: }
        !           174: 
        !           175: static inline PMReturn
        !           176: APMBIOS_SetSystemPowerManagement(
        !           177:     int        enabled
        !           178: )
        !           179: {
        !           180:     biosBuf_t bb;
        !           181:     
        !           182:     initBIOSBuf(&bb, APM_BIOS_DISABLE);
        !           183:     bb.ecx.rx = enabled ? 1 : 0;
        !           184:     bb.ebx.rx = 0xFFFF;        // entire system
        !           185:     bios32(&bb);
        !           186:     if ((bb.flags & EFL_CF) == 0)
        !           187:        return PM_R_SUCCESS;
        !           188:     return BIOSToPM(bb.eax.r.h);
        !           189: }
        !           190: 
        !           191: static inline PMReturn
        !           192: APMBIOS_RestoreDefaults(void)
        !           193: {
        !           194:     biosBuf_t bb;
        !           195:     
        !           196:     initBIOSBuf(&bb, APM_BIOS_DEFAULT);
        !           197:     bb.ebx.rx = 0xFFFF;
        !           198:     bios32(&bb);
        !           199:     if ((bb.flags & EFL_CF) == 0)
        !           200:        return PM_R_SUCCESS;
        !           201:     return BIOSToPM(bb.eax.r.h);
        !           202: }
        !           203: 
        !           204: 
        !           205: #endif /* KERNEL_PRIVATE */
        !           206: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.