Annotation of Examples/DriverKit/QVision/QVision_reloc.tproj/QVision.m, revision 1.1.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.