|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.