Annotation of Examples/DriverKit/QVision/QVision_reloc.tproj/QVision.m, revision 1.1

1.1     ! root        1: /* Copyright (c) 1992, 1993 NeXT Computer, Inc.  All rights reserved. 
        !             2:  *
        !             3:  * QVision.m -- Compaq QVision display driver.
        !             4:  *
        !             5:  * HISTORY
        !             6:  * 30 Sep 92   Joe Pasqua
        !             7:  *      Created. 
        !             8:  * 29 June 1993        Derek B Clegg
        !             9:  *     Cleaned up for external release.
        !            10:  * Tue Aug 16 16:53:03 PDT 1994 James C. Lee
        !            11:  *     Add 3.3 bus support & 8-bit color support.
        !            12:  */
        !            13: #import <driverkit/i386/IOEISADeviceDescription.h>
        !            14: #import "QVision.h"
        !            15: 
        !            16: @implementation QVision
        !            17: 
        !            18: /* Set the brightness to `level'.
        !            19:  */
        !            20: - setBrightness:(int)level token:(int)t
        !            21: {
        !            22:     if (level < EV_SCREEN_MIN_BRIGHTNESS || level > EV_SCREEN_MAX_BRIGHTNESS) {
        !            23:        IOLog("QVision: Invalid arg to setBrightness: %d\n", level);
        !            24:        return nil;
        !            25:     }
        !            26:     brightnessLevel = level;
        !            27:     [self setGammaTable];
        !            28:     return self;
        !            29: }
        !            30: 
        !            31: /* Set the transfer tables.
        !            32:  */
        !            33: - setTransferTable:(unsigned int *)table count:(int)count
        !            34: {
        !            35:     int k;
        !            36:        IOBitsPerPixel bpp;
        !            37:        IOColorSpace cspace;
        !            38: 
        !            39:     if (redTransferTable != 0)
        !            40:        IOFree(redTransferTable, 3 * transferTableCount);
        !            41: 
        !            42:     transferTableCount = count;
        !            43: 
        !            44:     redTransferTable = IOMalloc(3 * count);
        !            45:     greenTransferTable = redTransferTable + count;
        !            46:     blueTransferTable = greenTransferTable + count;
        !            47: 
        !            48:        bpp = [self displayInfo]->bitsPerPixel;
        !            49:        cspace = [self displayInfo]->colorSpace;
        !            50: 
        !            51:        if (bpp == IO_8BitsPerPixel && cspace == IO_OneIsWhiteColorSpace) {
        !            52:                for (k = 0; k < count; k++) {
        !            53:                        redTransferTable[k] = greenTransferTable[k] =
        !            54:                        blueTransferTable[k] = table[k] & 0xFF;
        !            55:                }
        !            56:        } else if (cspace == IO_RGBColorSpace &&
        !            57:                (bpp == IO_8BitsPerPixel ||
        !            58:                bpp == IO_12BitsPerPixel ||
        !            59:                bpp == IO_15BitsPerPixel ||
        !            60:                bpp == IO_24BitsPerPixel))
        !            61:        {
        !            62:                for (k = 0; k < count; k++) {
        !            63:                        redTransferTable[k] = (table[k] >> 24) & 0xFF;
        !            64:                        greenTransferTable[k] = (table[k] >> 16) & 0xFF;
        !            65:                        blueTransferTable[k] = (table[k] >> 8) & 0xFF;
        !            66:                }
        !            67:        } else {
        !            68:                IOLog("%s: Can't set transfertable, unknown colorSpace (%d) & pixel depth (%d)\n",
        !            69:                        [self name], cspace, bpp);
        !            70:                IOFree(redTransferTable, 3 * count);
        !            71:                redTransferTable = 0;
        !            72:        }
        !            73:     [self setGammaTable];
        !            74:     return self;
        !            75: }
        !            76: 
        !            77: /* Put the display into linear framebuffer mode. This typically happens
        !            78:  * when the window server starts running.
        !            79:  */
        !            80: - (void)enterLinearMode
        !            81: {
        !            82:     /* Set up the chip to use the selected mode. */
        !            83:     [self initializeMode];
        !            84: 
        !            85:     /* Set the gamma-corrected gray-scale palette if necessary. */
        !            86:     [self setGammaTable];
        !            87: 
        !            88:     /* Enter linear mode. */
        !            89:     if ([self enableLinearFrameBuffer] == nil) {
        !            90:        IOLog("%s: Failed to enter linear mode.\n", [self name]);
        !            91:        return;
        !            92:     }
        !            93: }
        !            94: 
        !            95: /* Get the device out of whatever advanced linear mode it was using and back
        !            96:  * into a state where it can be used as a standard VGA device.
        !            97:  */
        !            98: - (void)revertToVGAMode
        !            99: {
        !           100:     /* Reset the VGA parameters. */
        !           101:     [self resetVGA];
        !           102: 
        !           103:     /* Let the superclass do whatever work it needs to do. */
        !           104:     [super revertToVGAMode];
        !           105: }
        !           106: 
        !           107: - initFromDeviceDescription:deviceDescription
        !           108: {
        !           109:     IODisplayInfo *displayInfo;
        !           110:     const IORange *range;
        !           111:     const QVisionMode *mode;
        !           112: 
        !           113:        // DEBUG
        !           114: //     IOBreakToDebugger();
        !           115:        
        !           116:     if ([super initFromDeviceDescription:deviceDescription] == nil)
        !           117:        return [super free];
        !           118: 
        !           119:     if ([self determineConfiguration] == nil) {
        !           120:        IOLog("Unknown configuration, abort.\n");
        !           121:        return [super free];
        !           122:     }
        !           123: 
        !           124:     if ([self selectMode] == nil)
        !           125:        return [super free];
        !           126: 
        !           127:     redTransferTable = greenTransferTable = blueTransferTable = 0;
        !           128:     transferTableCount = 0;
        !           129:     brightnessLevel = EV_SCREEN_MAX_BRIGHTNESS;
        !           130: 
        !           131:     range = [deviceDescription memoryRangeList];
        !           132:     if (range == 0) {
        !           133:        IOLog("%s: No memory range specified.\n", [self name]);
        !           134:        return [super free];
        !           135:     }
        !           136:     videoRamAddress = range[0].start;
        !           137: 
        !           138:     displayInfo = [self displayInfo];
        !           139:     mode = displayInfo->parameters;
        !           140: 
        !           141:     displayInfo->flags = IO_DISPLAY_HAS_TRANSFER_TABLE;
        !           142: 
        !           143:     displayInfo->frameBuffer =
        !           144:         (void *)[self mapFrameBufferAtPhysicalAddress:videoRamAddress
        !           145:             length:range[0].size];
        !           146:        IOLog("%s: physical address = 0x%08lx\n", [self name], videoRamAddress);
        !           147:     if (displayInfo->frameBuffer == 0)
        !           148:         return [super free];
        !           149: 
        !           150:     IOLog("%s: Initialized `%s'.\n", [self name], mode->name);
        !           151:     return self;
        !           152: }
        !           153: @end

unix.superglobalmegacorp.com

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