|
|
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: * Boot video dumb frambuffer shim ! 24: */ ! 25: ! 26: #include "IOBootFramebuffer.h" ! 27: ! 28: enum { kTheDisplayMode = 10 }; ! 29: ! 30: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ ! 31: ! 32: #undef super ! 33: #define super IOFramebuffer ! 34: ! 35: OSDefineMetaClassAndStructors(IOBootFramebuffer, IOFramebuffer) ! 36: ! 37: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ ! 38: ! 39: IOService * IOBootFramebuffer::probe( IOService * provider, ! 40: SInt32 * score ) ! 41: { ! 42: PE_Video bootDisplay; ! 43: IOService * ret = 0; ! 44: IOReturn err; ! 45: ! 46: do { ! 47: ! 48: if( !provider->getProperty("AAPL,boot-display")) ! 49: continue; ! 50: ! 51: err = getPlatform()->getConsoleInfo( &bootDisplay ); ! 52: if( err || (bootDisplay.v_baseAddr == 0)) ! 53: continue; ! 54: ! 55: if (false == super::probe( provider, score )) ! 56: continue; ! 57: ! 58: *score = 0; ! 59: ret = this; // Success ! 60: ! 61: } while( false); ! 62: ! 63: return( ret); ! 64: } ! 65: ! 66: ! 67: const char * IOBootFramebuffer::getPixelFormats( void ) ! 68: { ! 69: const char * ret; ! 70: PE_Video bootDisplay; ! 71: ! 72: getPlatform()->getConsoleInfo( &bootDisplay); ! 73: ! 74: switch( bootDisplay.v_depth) { ! 75: case 8: ! 76: default: ! 77: ret = IO8BitIndexedPixels; ! 78: break; ! 79: case 15: ! 80: case 16: ! 81: ret = IO16BitDirectPixels; ! 82: break; ! 83: case 24: ! 84: case 32: ! 85: ret = IO32BitDirectPixels; ! 86: break; ! 87: } ! 88: ! 89: return( ret); ! 90: } ! 91: ! 92: IOItemCount IOBootFramebuffer::getDisplayModeCount( void ) ! 93: { ! 94: return( 1); ! 95: } ! 96: ! 97: IOReturn IOBootFramebuffer::getDisplayModes( ! 98: IODisplayModeID * allDisplayModes ) ! 99: { ! 100: ! 101: *allDisplayModes = kTheDisplayMode; ! 102: return( kIOReturnSuccess); ! 103: } ! 104: ! 105: IOReturn IOBootFramebuffer::getInformationForDisplayMode( ! 106: IODisplayModeID /* displayMode */, ! 107: IODisplayModeInformation * info ) ! 108: { ! 109: PE_Video bootDisplay; ! 110: ! 111: getPlatform()->getConsoleInfo( &bootDisplay); ! 112: ! 113: bzero( info, sizeof( *info)); ! 114: ! 115: info->maxDepthIndex = 0; ! 116: info->nominalWidth = bootDisplay.v_width; ! 117: info->nominalHeight = bootDisplay.v_height; ! 118: info->refreshRate = 75 << 16; ! 119: ! 120: return( kIOReturnSuccess); ! 121: } ! 122: ! 123: UInt64 IOBootFramebuffer::getPixelFormatsForDisplayMode( ! 124: IODisplayModeID /* displayMode */, IOIndex /* depth */ ) ! 125: { ! 126: return( 1); ! 127: } ! 128: ! 129: IOReturn IOBootFramebuffer::getPixelInformation( ! 130: IODisplayModeID displayMode, IOIndex depth, ! 131: IOPixelAperture aperture, IOPixelInformation * info ) ! 132: { ! 133: PE_Video bootDisplay; ! 134: ! 135: if( aperture || depth || (displayMode != kTheDisplayMode) ) ! 136: return( kIOReturnUnsupportedMode); ! 137: ! 138: getPlatform()->getConsoleInfo( &bootDisplay); ! 139: ! 140: bzero( info, sizeof( *info)); ! 141: ! 142: info->activeWidth = bootDisplay.v_width; ! 143: info->activeHeight = bootDisplay.v_height; ! 144: info->bytesPerRow = bootDisplay.v_rowBytes & 0x7fff; ! 145: info->bytesPerPlane = 0; ! 146: ! 147: switch( bootDisplay.v_depth ) { ! 148: case 8: ! 149: default: ! 150: strcpy(info->pixelFormat, IO8BitIndexedPixels ); ! 151: info->pixelType = kIOCLUTPixels; ! 152: info->componentMasks[0] = 0xff; ! 153: info->bitsPerPixel = 8; ! 154: info->componentCount = 1; ! 155: info->bitsPerComponent = 8; ! 156: break; ! 157: case 15: ! 158: case 16: ! 159: strcpy(info->pixelFormat, IO16BitDirectPixels ); ! 160: info->pixelType = kIORGBDirectPixels; ! 161: info->componentMasks[0] = 0x7c00; ! 162: info->componentMasks[1] = 0x03e0; ! 163: info->componentMasks[2] = 0x001f; ! 164: info->bitsPerPixel = 16; ! 165: info->componentCount = 3; ! 166: info->bitsPerComponent = 5; ! 167: break; ! 168: case 24: ! 169: case 32: ! 170: strcpy(info->pixelFormat, IO32BitDirectPixels ); ! 171: info->pixelType = kIORGBDirectPixels; ! 172: info->componentMasks[0] = 0x00ff0000; ! 173: info->componentMasks[1] = 0x0000ff00; ! 174: info->componentMasks[2] = 0x000000ff; ! 175: info->bitsPerPixel = 32; ! 176: info->componentCount = 3; ! 177: info->bitsPerComponent = 8; ! 178: break; ! 179: } ! 180: ! 181: return( kIOReturnSuccess); ! 182: } ! 183: ! 184: IOReturn IOBootFramebuffer::getCurrentDisplayMode( ! 185: IODisplayModeID * displayMode, IOIndex * depth ) ! 186: { ! 187: if( displayMode) ! 188: *displayMode = kTheDisplayMode; ! 189: if( depth) ! 190: *depth = 0; ! 191: ! 192: return( kIOReturnSuccess); ! 193: } ! 194: ! 195: IODeviceMemory * IOBootFramebuffer::getApertureRange( IOPixelAperture aper ) ! 196: { ! 197: IOReturn err; ! 198: IOPixelInformation info; ! 199: IOByteCount bytes; ! 200: PE_Video bootDisplay; ! 201: ! 202: getPlatform()->getConsoleInfo( &bootDisplay); ! 203: ! 204: err = getPixelInformation( kTheDisplayMode, 0, aper, ! 205: &info ); ! 206: if( err) ! 207: return( 0 ); ! 208: ! 209: bytes = (info.bytesPerRow * info.activeHeight) + 128; ! 210: ! 211: return( IODeviceMemory::withRange( bootDisplay.v_baseAddr, bytes )); ! 212: } ! 213: ! 214: bool IOBootFramebuffer::isConsoleDevice( void ) ! 215: { ! 216: return( (0 != getProvider()->getProperty("AAPL,boot-display")) ); ! 217: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.