Annotation of kernel/bsd/dev/ppc/drvPMU/pmupriv.h, revision 1.1.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: #import <mach/std_types.h>
                     26: #import <kernserv/ns_timer.h>
                     27: #import <driverkit/IODirectDevice.h>
                     28: 
                     29: 
                     30:         typedef volatile unsigned char  *VIAAddress;   // This is an address on the bus
                     31: 
                     32: // **********************************************************************************
                     33: //
                     34: // VIA definitions
                     35: //
                     36: // **********************************************************************************
                     37: 
                     38: enum {                                 // port B
                     39:                                                // M2 uses VIA2
                     40:        M2Req           = 2,                            // Power manager handshake request
                     41:        M2Ack           = 1,                            // Power manager handshake acknowledge
                     42:                                                // Hooper uses VIA1
                     43:        HooperReq       = 4,                            // request
                     44:        HooperAck       = 3                             // acknowledge
                     45: };
                     46: 
                     47: enum {                                 // IFR/IER
                     48:        ifCA2 = 0,                              // CA2 interrupt
                     49:        ifCA1 = 1,                              // CA1 interrupt
                     50:        ifSR  = 2,                              // SR shift register done
                     51:        ifCB2 = 3,                              // CB2 interrupt
                     52:        ifCB1 = 4,                              // CB1 interrupt
                     53:        ifT2  = 5,                              // T2 timer2 interrupt
                     54:        ifT1  = 6,                              // T1 timer1 interrupt
                     55:        ifIRQ = 7                               // any interrupt
                     56: };
                     57: 
                     58: // **********************************************************************************
                     59: // bits in response to kPMUReadInt command
                     60: // **********************************************************************************
                     61: 
                     62: enum {
                     63:        kPMUMD0Int              = 0x01,   // interrupt type 0 (machine-specific)
                     64:        kPMUMD1Int              = 0x02,   // interrupt type 1 (machine-specific)
                     65:        kPMUMD2Int              = 0x04,   // interrupt type 2 (machine-specific)
                     66:        kPMUbrightnessInt       = 0x08,   // brightness button has been pressed, value changed
                     67:        kPMUADBint              = 0x10,   // ADB
                     68:        kPMUbattInt             = 0x20,   // battery
                     69:        kPMUenvironmentInt      = 0x40,   // environment
                     70:        kPMUoneSecInt           = 0x80    // one second interrupt
                     71: };
                     72: 
                     73: enum {                                 // when kPMUADBint is set
                     74:        kPMUautopoll            = 0x04          // input is autopoll data
                     75: };
                     76: 
                     77: // **********************************************************************************
                     78: // states of the ISR
                     79: // **********************************************************************************
                     80: 
                     81: enum {
                     82:        kPMUidle,
                     83:        kPMUxmtLen,
                     84:        kPMUxmtData,
                     85:        kPMUreadLen_cmd,
                     86:        kPMUrcvLen_cmd,
                     87:        kPMUreadData,
                     88:        kPMUrcvData_cmd,
                     89:        kPMUdone,
                     90:        kPMUreadLen_int,
                     91:        kPMUrcvLen_int,
                     92:        kPMUrcvData_int
                     93: };
                     94: 
                     95: 
                     96: enum {
                     97:        kPMUADBAddressField = 4
                     98: };
                     99: 
                    100: enum {
                    101:        kPMUResetADBBus = 0x00,
                    102:        kPMUFlushADB    = 0x01,
                    103:        kPMUWriteADB    = 0x08,
                    104:        kPMUReadADB     = 0x0C,
                    105:        kPMURWMaskADB   = 0x0C
                    106: };
                    107: 
                    108: #define MISC_LENGTH 8
                    109: 
                    110: struct PMURequest {
                    111:        struct PMUmachMessage * next;
                    112:        struct PMUmachMessage * prev;
                    113:        UInt32                  pmCommand;
                    114:        UInt32                  pmSLength1;
                    115:        UInt8 *                 pmSBuffer2;
                    116:        UInt32                  pmSLength2;
                    117:        UInt8 *                 pmRBuffer;
                    118:        Boolean                 pmFlag;
                    119:        pmCallback_func         pmCallback;
                    120:        id                      pmId;
                    121:        UInt32                  pmRefNum;
                    122:        UInt8                   pmSBuffer1[MISC_LENGTH];
                    123: };
                    124: 
                    125: typedef struct PMURequest PMURequest;
                    126: 
                    127: struct PMUmachMessage {
                    128:        msg_header_t    msgHeader;
                    129:        msg_type_t      msgType;
                    130:        PMURequest      msgBody;
                    131: };
                    132: 
                    133: typedef struct PMUmachMessage PMUmachMessage;
                    134: 
                    135: 
                    136: @interface ApplePMU : IODirectDevice <ADBservice, RTCservice, NVRAMservice, PowerService>
                    137: {
                    138: VIAAddress             VIA1_shift;             // pointers to VIA registers
                    139: VIAAddress             VIA1_auxillaryControl;
                    140: VIAAddress             VIA1_interruptFlag;
                    141: VIAAddress             VIA1_interruptEnable;
                    142: VIAAddress             VIA2_dataB;
                    143: UInt8                  PMreq;                  // req bit
                    144: UInt8                  PMack;                  // ack bit
                    145: UInt8                  savedPGEintEn;
                    146: UInt8                  savedSRintEn;
                    147: pmADBinput_func                ADBclient;              // Input handler in ADB client
                    148: id                     ADBid;                  // id of ADB client
                    149: pmCallback_func                RTCclient;              // Tick handler in RTC client
                    150: id                     RTCid;                  // id of RTC client
                    151: pmCallback_func                PWRclient;              // Button handler in Power Management client
                    152: id                     PWRid;                  // id of Power Management client
                    153: Boolean                        debugging;              // TRUE to avoid COP timeout during debugging
                    154: PMURequest *           clientRequest;
                    155: PMUmachMessage         localMachMessage;
                    156: UInt8                  firstChar;
                    157: UInt32                 charCountS1;
                    158: UInt32                 charCountS2;
                    159: UInt8 *                        dataPointer1;
                    160: UInt8 *                        dataPointer2;
                    161: UInt8 *                        dataPointer;
                    162: SInt32                 charCountR;
                    163: SInt32                 charCountR2;
                    164: UInt32                 PGE_ISR_state;
                    165: UInt8                  receivedByte;
                    166: UInt8                  interruptState[12];
                    167: PMUmachMessage *               queueHead;              // our command queue
                    168: PMUmachMessage *       queueTail;
                    169: port_t                 port;                   // our interrupt port
                    170: UInt32                 pollList;               // ADB autopoll device bitmap
                    171: Boolean                        autopollOn;             // TRUE: PMU is autopolling
                    172: Boolean                        adb_reading;            // TRUE: we have a register read outstanding
                    173: pmCallback_func                who_to_call;            // ADB client's callback for solicited input
                    174: id                     theirId;                // ADB client's id for input callback
                    175: UInt32                 theirRefNum;            // ADB client's refnum for input callback
                    176: ns_time_t              adb_read_timeout;       // timeout on read to absent adb device
                    177: Boolean                        PMU_int_pending;        // TRUE: PMU has requested service
                    178: }
                    179: 
                    180: 
                    181: + (Boolean)probe : (IODeviceDescription *)deviceDescription;   // initialize the PMU driver
                    182: 
                    183: - initFromDeviceDescription : (IODeviceDescription *)deviceDescription;
                    184: 
                    185: - free;                                                        // shut the driver down
                    186: 
                    187: - (void)interruptOccurred;
                    188: 
                    189: - (void)interruptOccurredAt:(int)localInterrupt;
                    190: 
                    191: - (void)timeoutOccurred;
                    192: 
                    193: - (void)receiveMsg;
                    194: 
                    195: 
                    196: 
                    197:                                                                // ADB protocol
                    198: - (void)registerForADBAutopoll :(pmADBinput_func)inputHandler
                    199:                                :(id)caller;
                    200: 
                    201: - (PMUStatus)ADBWrite  :(UInt32)DevAddr
                    202:                        :(UInt32)DevReg
                    203:                        :(UInt32)ByteCount
                    204:                        :(UInt8*)Buffer
                    205:                        :(UInt32)RefNum
                    206:                         :(id)Id
                    207:                        :(pmCallback_func)Callback;
                    208: 
                    209: - (PMUStatus)ADBRead   :(UInt32)DevAddr
                    210:                        :(UInt32)DevReg
                    211:                        :(UInt32)RefNum
                    212:                         :(id)Id
                    213:                        :(pmCallback_func)Callback;
                    214: 
                    215: - (PMUStatus)ADBReset  :(UInt32)Refnum
                    216:                         :(id)Id
                    217:                        :(pmCallback_func)Callback;
                    218: 
                    219: - (PMUStatus)ADBFlush  :(UInt32)DevAddr
                    220:                        :(UInt32)RefNum
                    221:                         :(id)Id
                    222:                        :(pmCallback_func)Callback;
                    223: 
                    224: - (PMUStatus)ADBSetPollList    :(UInt32)PollBitField
                    225:                                :(UInt32)RefNum
                    226:                                :(id)Id
                    227:                                :(pmCallback_func)Callback;
                    228: 
                    229: - (PMUStatus)ADBPollDisable    :(UInt32)RefNum
                    230:                                :(id)Id
                    231:                                :(pmCallback_func)Callback;
                    232: 
                    233: - (PMUStatus)ADBPollEnable      :(UInt32)RefNum
                    234:                                :(id)Id
                    235:                                :(pmCallback_func)Callback;
                    236: 
                    237: - (PMUStatus)ADBSetPollRate    :(UInt32)newRate
                    238:                                :(UInt32)RefNum
                    239:                                :(id)Id
                    240:                                :(pmCallback_func)Callback;
                    241: 
                    242: - (PMUStatus)ADBGetPollRate    :(UInt32 *)currentRate
                    243:                                :(UInt32)RefNum
                    244:                                :(id)Id
                    245:                                :(pmCallback_func)Callback;
                    246: 
                    247: - (PMUStatus)ADBSetAlternateKeyboard   :(UInt32)DevAddr
                    248:                                        :(UInt32)RefNum
                    249:                                        :(id)Id
                    250:                                        :(pmCallback_func)Callback;
                    251: 
                    252: - (void)poll_device;
                    253: 
                    254: 
                    255:                                                                // RTC protocol
                    256: - (void)registerForClockTicks  :(pmCallback_func)tickHandler
                    257:                                :(id)caller;
                    258: 
                    259: - (PMUStatus)setRealTimeClock  :(UInt8 *)newTime
                    260:                                :(UInt32)RefNum
                    261:                                :(id)Id
                    262:                                 :(pmCallback_func)Callback;
                    263: 
                    264: - (PMUStatus)getRealTimeClock  :(UInt8 *)currentTime
                    265:                                :(UInt32)RefNum
                    266:                                :(id)Id
                    267:                                :(pmCallback_func)Callback;
                    268: 
                    269: 
                    270:                                                                // NVRAM protocol
                    271: - (PMUStatus) readNVRAM :(UInt32)Offset
                    272:                        :(UInt32)Length
                    273:                        :(UInt8 *)Buffer
                    274:                        :(UInt32)RefNum
                    275:                         :(id)Id
                    276:                        :(pmCallback_func)Callback;
                    277: 
                    278: - (PMUStatus) writeNVRAM:(UInt32)Offset
                    279:                        :(UInt32)Length
                    280:                        :(UInt8 *)Buffer
                    281:                        :(UInt32)RefNum
                    282:                         :(id)Id
                    283:                        :(pmCallback_func)Callback;
                    284: 
                    285: 
                    286:                                                                // Power Management protocol
                    287: - (void)registerForPowerInterrupts     :(pmCallback_func)buttonHandler
                    288:                                        :(id)caller;
                    289: 
                    290: 
                    291:                                                                // Misc protocol
                    292: - (PMUStatus)sendMiscCommand    :(UInt32)Command
                    293:                                 :(UInt32)SLength
                    294:                                 :(UInt8 *)SBuffer
                    295:                                 :(UInt8 *)RBuffer
                    296:                                 :(UInt32)RefNum
                    297:                                :(id)Id
                    298:                                 :(pmCallback_func)Callback;
                    299: 
                    300: 
                    301: 
                    302: 
                    303:                                                                // private methods
                    304: 
                    305: - (void)ADBinput:(UInt32)theLength:(UInt8 *)theInput;
                    306: 
                    307: - (void)StartPMUTransmission:(PMURequest *)plugInMessage;
                    308: 
                    309: - (void)SendPMUByte:(UInt8)theByte;
                    310: 
                    311: - (void)ReadPMUByte:(UInt8*)theByte;
                    312: 
                    313: - (Boolean)WaitForAckLo;
                    314: 
                    315: - (Boolean)WaitForAckHi;
                    316: 
                    317: - (UInt8)GetPMUInterruptState;
                    318: 
                    319: - (void)RestorePMUInterrupt:(UInt8)savedPGEintEn;
                    320: 
                    321: - (void)DisablePMUInterrupt;
                    322: 
                    323: - (void)EnablePMUInterrupt;
                    324: 
                    325: - (void)AcknowledgePMUInterrupt;
                    326: 
                    327: - (UInt8)GetSRInterruptState;
                    328: 
                    329: - (void)RestoreSRInterrupt:(UInt8)savedSRintEn;
                    330: 
                    331: - (void)DisableSRInterrupt;
                    332: 
                    333: - (void)EnableSRInterrupt;
                    334: 
                    335: - (void)CheckRequestQueue;
                    336: 
                    337: @end
                    338: 
                    339: 
                    340: 
                    341: 
                    342: 
                    343: 
                    344: 
                    345: 
                    346: 
                    347: 

unix.superglobalmegacorp.com

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