Annotation of XNU/iokit/Drivers/platform/drvAppleNVRAM/AppleNVRAM.cpp, revision 1.1.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:  *  16 Feb 1998 suurballe  Created.
                     24:  */
                     25: 
                     26: #include <IOKit/IOLib.h>
                     27: #include "AppleNVRAM.h"
                     28: 
                     29: 
                     30: #define super IONVRAMController
                     31: OSDefineMetaClassAndStructors(AppleNVRAM, IONVRAMController)
                     32: 
                     33: 
                     34: // **********************************************************************************
                     35: // start
                     36: //
                     37: // **********************************************************************************
                     38: bool AppleNVRAM::start ( IOService * nub )
                     39: {
                     40:     IOItemCount numRanges;
                     41:     IOMemoryMap * map;
                     42:         
                     43:     nvram_kind = NVRAM_NONE;
                     44:     nvram_data = NULL;
                     45:     nvram_port = NULL;
                     46: 
                     47:     numRanges = nub->getDeviceMemoryCount( );
                     48:     
                     49:     if ( numRanges == 1 ) {
                     50:         nvram_kind = NVRAM_IOMEM;
                     51:         if( 0 == (map = nub->mapDeviceMemoryWithIndex( 0 )) ) {
                     52:                  return false;
                     53:         }
                     54:         nvram_data = (unsigned char *)map->getVirtualAddress();
                     55:         return super::start( nub );
                     56:     }
                     57:     if ( numRanges == 2 ) {
                     58:         nvram_kind = NVRAM_PORT;
                     59:         if( 0 == (map = nub->mapDeviceMemoryWithIndex( 0 )) ) {
                     60:                  return false;
                     61:         }
                     62:         nvram_port = (unsigned char *)map->getVirtualAddress();
                     63:         if( 0 == (map = nub->mapDeviceMemoryWithIndex( 1 )) ) {
                     64:                  return false;
                     65:         }
                     66:         nvram_data = (unsigned char *)map->getVirtualAddress();
                     67:         return super::start( nub );
                     68:     }
                     69:     return false;
                     70: }
                     71: 
                     72: 
                     73: 
                     74: // **********************************************************************************
                     75: // openNVRAM
                     76: //
                     77: //
                     78: // **********************************************************************************
                     79: IOReturn AppleNVRAM::openNVRAM ( void )
                     80: {
                     81:     if (nvram_kind == NVRAM_NONE) {
                     82:         return (kNoNVRAM);
                     83:     }
                     84:     return kNoError;
                     85: }
                     86: 
                     87: // **********************************************************************************
                     88: // readNVRAM
                     89: //
                     90: // The NVRAM driver is calling to read part of the NVRAM. 
                     91: //
                     92: // **********************************************************************************
                     93: IOReturn AppleNVRAM::readNVRAM ( UInt32 Offset, IOByteCount * Length, UInt8 * Buffer )
                     94: {
                     95: IOByteCount    i;
                     96: UInt8 *                client_buffer = Buffer;
                     97: UInt32         our_offset = Offset;
                     98: 
                     99: if (nvram_kind == NVRAM_NONE) {
                    100:     return (kNoNVRAM);
                    101: }
                    102: 
                    103: if ( (Buffer == NULL) ||
                    104:          (*Length == 0) ||
                    105:          (*Length > 8192) ||
                    106:          (Offset > 8192) ||
                    107:          ((*Length + Offset) > 8192) ) {
                    108:         return kParameterError;
                    109: }
                    110: 
                    111: switch (nvram_kind) {
                    112:     case       NVRAM_IOMEM:
                    113:         for (i = 0; i < *Length; i++,our_offset++)  {
                    114:             *client_buffer++ = nvram_data[our_offset << 4];
                    115:             eieio();
                    116:         }
                    117:         break;
                    118: 
                    119:     case       NVRAM_PORT:
                    120:         for (i = 0; i < *Length; i++,our_offset++) {
                    121:             *nvram_port = our_offset >> 5;
                    122:             eieio();
                    123:             *client_buffer++ = nvram_data[(our_offset & 0x1f) << 4];
                    124:             eieio();
                    125:         }
                    126:         break;
                    127: }
                    128: 
                    129: return kNoError;
                    130: }
                    131: 
                    132: 
                    133: // **********************************************************************************
                    134: // writeNVRAM
                    135: //
                    136: // The NVRAM driver is calling to write part of the NVRAM.  We translate this into
                    137: // single-byte PMU commands and enqueue them to our command queue.
                    138: //
                    139: // **********************************************************************************
                    140: IOReturn AppleNVRAM::writeNVRAM ( UInt32 Offset, IOByteCount * Length, UInt8 * Buffer )
                    141: {
                    142: IOByteCount    i;
                    143: UInt32         our_offset = Offset;
                    144: UInt8 *                client_buffer = Buffer;
                    145: 
                    146: if (nvram_kind == NVRAM_NONE) {
                    147:     return (kNoNVRAM);
                    148: }
                    149: 
                    150: if ( (Buffer == NULL) ||
                    151:          (*Length == 0) ||
                    152:          (*Length > 8192) ||
                    153:          (Offset > 8192) ||
                    154:          ((*Length + Offset) > 8192) ) {
                    155:         return kParameterError;
                    156: }
                    157: 
                    158: switch (nvram_kind) {
                    159:     case       NVRAM_IOMEM:
                    160:         for (i = 0; i < *Length; i++,our_offset++)  {
                    161:             nvram_data[our_offset << 4] = *client_buffer++;
                    162:             eieio();
                    163:         }
                    164:         break;
                    165: 
                    166:     case       NVRAM_PORT:
                    167:         for (i = 0; i < *Length; i++, our_offset++) {
                    168:             *nvram_port = our_offset >> 5;
                    169:             eieio();
                    170:             nvram_data[(our_offset & 0x1f) << 4] = *client_buffer++;
                    171:             eieio();
                    172:         }
                    173:         break;
                    174: }
                    175: return kNoError;
                    176: }

unix.superglobalmegacorp.com

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