Annotation of XNU/iokit/Drivers/platform/drvApplePMU/IOPMUNVRAMController.cpp, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * The contents of this file constitute Original Code as defined in and
        !             7:  * are subject to the Apple Public Source License Version 1.1 (the
        !             8:  * "License").  You may not use this file except in compliance with the
        !             9:  * License.  Please obtain a copy of the License at
        !            10:  * http://www.apple.com/publicsource and read it before using this file.
        !            11:  * 
        !            12:  * This Original Code and all software distributed under the License are
        !            13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            17:  * License for the specific language governing rights and limitations
        !            18:  * under the License.
        !            19:  * 
        !            20:  * @APPLE_LICENSE_HEADER_END@
        !            21:  */
        !            22: /*
        !            23:  *  1 Dec 1998 suurballe  Created.
        !            24:  */
        !            25: 
        !            26: #include <IOKit/IOSyncer.h>
        !            27: #include "IOPMUNVRAMController.h"
        !            28: #include "pmupriv.h"
        !            29: 
        !            30: #define super IONVRAMController
        !            31: OSDefineMetaClassAndStructors(IOPMUNVRAMController, IONVRAMController)
        !            32: 
        !            33: 
        !            34: // **********************************************************************************
        !            35: // init
        !            36: //
        !            37: // **********************************************************************************
        !            38: bool IOPMUNVRAMController::init ( OSDictionary * properties, ApplePMU * driver )
        !            39: {
        !            40:     PMUdriver = driver;
        !            41: 
        !            42:     return super::init(properties);
        !            43: }
        !            44: 
        !            45: 
        !            46: 
        !            47: // **********************************************************************************
        !            48: // openNVRAM
        !            49: //
        !            50: //
        !            51: // **********************************************************************************
        !            52: IOReturn IOPMUNVRAMController::openNVRAM ( void )
        !            53: {
        !            54:     return kPMUNoError;
        !            55: }
        !            56: 
        !            57: 
        !            58: // **********************************************************************************
        !            59: // readNVRAM
        !            60: //
        !            61: // The NVRAM driver is calling to read part of the NVRAM.  We translate this into
        !            62: // single-byte PMU commands and enqueue them to its command queue.
        !            63: //
        !            64: // **********************************************************************************
        !            65: IOReturn IOPMUNVRAMController::readNVRAM ( UInt32 Offset, IOByteCount * Length, UInt8 * Buffer )
        !            66: {
        !            67: PMUrequest     request;
        !            68: IOByteCount    i;
        !            69: UInt8 *                client_buffer = Buffer;
        !            70: UInt32         our_offset = Offset;
        !            71: 
        !            72: if ( (Buffer == NULL) ||
        !            73:          (*Length == 0) ||
        !            74:          (*Length > 8192) ||
        !            75:          (Offset > 8192) ||
        !            76:          ((*Length + Offset) > 8192) ) {
        !            77:         return kPMUParameterError;
        !            78: }
        !            79: 
        !            80: for ( i = 0; i < *Length ; i++ ) {
        !            81:         request.sync = IOSyncer::create();
        !            82:         request.pmCommand = kPMUNVRAMRead;
        !            83:         request.pmFlag = false;
        !            84:         request.pmSLength1 = 2;
        !            85:         request.pmSBuffer2 = NULL;
        !            86:         request.pmSLength2 = 0;
        !            87:         request.pmRBuffer = client_buffer++;
        !            88:         request.pmSBuffer1[0] = our_offset >> 8;
        !            89:         request.pmSBuffer1[1] = our_offset++;
        !            90: 
        !            91:         PMUdriver->enqueueCommand(&request);
        !            92:         request.sync->wait();                  // wait till done
        !            93: }
        !            94: 
        !            95: return kPMUNoError;
        !            96: }
        !            97: 
        !            98: 
        !            99: // **********************************************************************************
        !           100: // writeNVRAM
        !           101: //
        !           102: // The NVRAM driver is calling to write part of the NVRAM.  We translate this into
        !           103: // single-byte PMU commands and enqueue them to our command queue.
        !           104: //
        !           105: // **********************************************************************************
        !           106: IOReturn IOPMUNVRAMController::writeNVRAM ( UInt32 Offset, IOByteCount * Length, UInt8 * Buffer )
        !           107: {
        !           108: PMUrequest     request;
        !           109: IOByteCount    i;
        !           110: UInt32         our_offset = Offset;
        !           111: UInt8 *                client_buffer = Buffer;
        !           112: 
        !           113: if ( (Buffer == NULL) ||
        !           114:          (*Length == 0) ||
        !           115:          (*Length > 8192) ||
        !           116:          (Offset > 8192) ||
        !           117:          ((*Length + Offset) > 8192) ) {
        !           118:         return kPMUParameterError;
        !           119: }
        !           120: 
        !           121: for ( i = 0; i < *Length ; i++ ) {
        !           122:         request.sync = IOSyncer::create();
        !           123:         request.pmCommand = kPMUNVRAMWrite;
        !           124:         request.pmFlag = false;
        !           125:         request.pmSLength1 = 3;
        !           126:         request.pmSBuffer2 = NULL;
        !           127:         request.pmSLength2 = 0;
        !           128:         request.pmRBuffer = NULL;
        !           129:         request.pmSBuffer1[0] = our_offset >> 8;
        !           130:         request.pmSBuffer1[1] = our_offset++;
        !           131:         request.pmSBuffer1[2] = *client_buffer++;
        !           132: 
        !           133:         PMUdriver->enqueueCommand(&request);
        !           134:         request.sync->wait();                  // wait till done
        !           135: }
        !           136: 
        !           137: return kPMUNoError;
        !           138: }

unix.superglobalmegacorp.com

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