| 1 | /*␊ |
| 2 | * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.␊ |
| 3 | *␊ |
| 4 | * @APPLE_LICENSE_HEADER_START@␊ |
| 5 | * ␊ |
| 6 | * Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights␊ |
| 7 | * Reserved. This file contains Original Code and/or Modifications of␊ |
| 8 | * Original Code as defined in and that are subject to the Apple Public␊ |
| 9 | * Source License Version 2.0 (the "License"). You may not use this file␊ |
| 10 | * except in compliance with the License. Please obtain a copy of the␊ |
| 11 | * License at http://www.apple.com/publicsource and read it before using␊ |
| 12 | * this file.␊ |
| 13 | * ␊ |
| 14 | * The Original Code and all software distributed under the License are␊ |
| 15 | * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
| 16 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
| 17 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
| 18 | * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the␊ |
| 19 | * License for the specific language governing rights and limitations␊ |
| 20 | * under the License.␊ |
| 21 | * ␊ |
| 22 | * @APPLE_LICENSE_HEADER_END@␊ |
| 23 | */␊ |
| 24 | // Copyright 1997 by Apple Computer, Inc., all rights reserved.␊ |
| 25 | /* Copyright 1996-1997 NeXT Software, Inc.␊ |
| 26 | *␊ |
| 27 | * vesa.h - mode info obtained via int10␊ |
| 28 | *␊ |
| 29 | * Revision History␊ |
| 30 | * ----------------␊ |
| 31 | * 30 Jul 1996 Doug Mitchell at NeXT␊ |
| 32 | * Created.␊ |
| 33 | */␊ |
| 34 | ␊ |
| 35 | #ifndef __LIBSAIO_VBE_H␊ |
| 36 | #define __LIBSAIO_VBE_H␊ |
| 37 | ␊ |
| 38 | //#include "edid.h"␉␉␉//Azi:autoresolution <-- included in␊ |
| 39 | #include "autoresolution.h"␊ |
| 40 | //#include "../modules/AutoResolution/autoresolution.h" //Azi: reminder␊ |
| 41 | ␊ |
| 42 | #define MIN_VESA_VERSION 0x200␊ |
| 43 | ␊ |
| 44 | #define SEG(address) \␊ |
| 45 | ((unsigned short)(((unsigned long)address & 0xffff0000) >> 4))␊ |
| 46 | ␊ |
| 47 | #define OFF(address) \␊ |
| 48 | ((unsigned short)((unsigned long)address & 0x0000ffff))␊ |
| 49 | ␊ |
| 50 | #define VBEMakeUInt32(x) \␊ |
| 51 | (((unsigned long)x##_high << 24) | \␊ |
| 52 | ((unsigned long)x##_2 << 16) | \␊ |
| 53 | ((unsigned long)x##_1 << 8) | \␊ |
| 54 | (unsigned long)x##_low)␊ |
| 55 | ␊ |
| 56 | #define VBEDecodeFP(t, fp) \␊ |
| 57 | ((t)(((fp ## _low) | ((fp ## _1 ) << 8)) + \␊ |
| 58 | (((fp ## _2) << 4) | ((fp ## _high ) << 12))))␊ |
| 59 | ␊ |
| 60 | /*␊ |
| 61 | * Functions␊ |
| 62 | */␊ |
| 63 | enum {␊ |
| 64 | funcGetControllerInfo = 0x4F00,␊ |
| 65 | funcGetModeInfo = 0x4F01,␊ |
| 66 | funcSetMode = 0x4F02,␊ |
| 67 | funcGetCurrentMode = 0x4F03,␊ |
| 68 | funcSaveRestoreState = 0x4F04,␊ |
| 69 | funcWindowControl = 0x4F05,␊ |
| 70 | funcGetSetScanLineLength = 0x4F06,␊ |
| 71 | funcGetSetDisplayStart = 0x4F07,␊ |
| 72 | funcGetSetPaletteFormat = 0x4F08,␊ |
| 73 | funcGetSetPaletteData = 0x4F09,␊ |
| 74 | funcGetProtModeInterdace = 0x4F0A,␊ |
| 75 | funcGetSetPixelClock = 0x4F0B␊ |
| 76 | };␊ |
| 77 | ␊ |
| 78 | enum {␊ |
| 79 | subfuncSet = 0x00,␊ |
| 80 | subfuncGet = 0x01,␊ |
| 81 | subfuncSetSecondary = 0x02,␊ |
| 82 | subfuncGetSecondary = 0x03␊ |
| 83 | };␊ |
| 84 | ␊ |
| 85 | /*␊ |
| 86 | * errors.␊ |
| 87 | */␊ |
| 88 | enum {␊ |
| 89 | errSuccess = 0,␊ |
| 90 | errFuncFailed = 1,␊ |
| 91 | errFuncNotSupported = 2,␊ |
| 92 | errFuncInvalid = 3␊ |
| 93 | };␊ |
| 94 | ␊ |
| 95 | /*␊ |
| 96 | * Per-controller info, returned in function 4f00.␊ |
| 97 | */␊ |
| 98 | typedef struct {␊ |
| 99 | unsigned char VESASignature[4];␊ |
| 100 | unsigned short VESAVersion;␊ |
| 101 | /*␊ |
| 102 | * Avoid packing problem...␊ |
| 103 | */␊ |
| 104 | unsigned char OEMStringPtr_low;␊ |
| 105 | unsigned char OEMStringPtr_1;␊ |
| 106 | unsigned char OEMStringPtr_2;␊ |
| 107 | unsigned char OEMStringPtr_high;␊ |
| 108 | unsigned char Capabilities_low;␊ |
| 109 | unsigned char Capabilities_1;␊ |
| 110 | unsigned char Capabilities_2;␊ |
| 111 | unsigned char Capabilities_high;␊ |
| 112 | unsigned char VideoModePtr_low;␊ |
| 113 | unsigned char VideoModePtr_1;␊ |
| 114 | unsigned char VideoModePtr_2;␊ |
| 115 | unsigned char VideoModePtr_high;␊ |
| 116 | unsigned short TotalMemory;␊ |
| 117 | unsigned char Reserved[236];␊ |
| 118 | unsigned char OEMData[256];␊ |
| 119 | } VBEInfoBlock;␊ |
| 120 | ␊ |
| 121 | /*␊ |
| 122 | * Capabilites␊ |
| 123 | */␊ |
| 124 | enum {␊ |
| 125 | capDACWidthIsSwitchableBit = (1 << 0), /* 1 = yes; 0 = no */␊ |
| 126 | capControllerIsNotVGACompatableBit = (1 << 1), /* 1 = no; 0 = yes */␊ |
| 127 | capOldRAMDAC = (1 << 2) /* 1 = yes; 0 = no */␊ |
| 128 | };␊ |
| 129 | ␊ |
| 130 | /*␊ |
| 131 | * Per-mode info, returned in function 4f02.␊ |
| 132 | */␊ |
| 133 | typedef struct {␊ |
| 134 | unsigned short ModeAttributes;␊ |
| 135 | unsigned char WinAAttributes;␊ |
| 136 | unsigned char WinBAttributes;␊ |
| 137 | unsigned short WinGranularity;␊ |
| 138 | unsigned short WinSize;␊ |
| 139 | unsigned short WinASegment;␊ |
| 140 | unsigned short WinABegment;␊ |
| 141 | void * WinFuncPtr;␊ |
| 142 | unsigned short BytesPerScanline;␊ |
| 143 | unsigned short XResolution;␊ |
| 144 | unsigned short YResolution;␊ |
| 145 | unsigned char XCharSize;␊ |
| 146 | unsigned char YCharSize;␊ |
| 147 | unsigned char NumberOfPlanes;␊ |
| 148 | unsigned char BitsPerPixel;␊ |
| 149 | unsigned char NumberOfBanks;␊ |
| 150 | unsigned char MemoryModel;␊ |
| 151 | unsigned char BankSize;␊ |
| 152 | unsigned char NumberOfImagePages;␊ |
| 153 | unsigned char Reserved;␊ |
| 154 | unsigned char RedMaskSize;␊ |
| 155 | unsigned char RedFieldPosition;␊ |
| 156 | unsigned char GreenMaskSize;␊ |
| 157 | unsigned char GreenFieldPosition;␊ |
| 158 | unsigned char BlueMaskSize;␊ |
| 159 | unsigned char BlueFieldPosition;␊ |
| 160 | unsigned char RsvdMaskSize;␊ |
| 161 | unsigned char RsvdFieldPosition;␊ |
| 162 | unsigned char DirectColorModeInfo;␊ |
| 163 | unsigned char PhysBasePtr_low;␊ |
| 164 | unsigned char PhysBasePtr_1;␊ |
| 165 | unsigned char PhysBasePtr_2;␊ |
| 166 | unsigned char PhysBasePtr_high;␊ |
| 167 | void * OffScreenMemOffset;␊ |
| 168 | unsigned short OffScreenMemSize;␊ |
| 169 | unsigned char Reserved1[206];␊ |
| 170 | } VBEModeInfoBlock;␊ |
| 171 | ␊ |
| 172 | /* ␊ |
| 173 | * ModeAttributes bits␊ |
| 174 | */␊ |
| 175 | enum {␊ |
| 176 | maModeIsSupportedBit = (1 << 0), /* mode is supported */␊ |
| 177 | maExtendedInfoAvailableBit = (1 << 1), /* extended info available */␊ |
| 178 | maOutputFuncSupportedBit = (1 << 2), /* output functions supported */␊ |
| 179 | maColorModeBit = (1 << 3), /* 1 = color; 0 = mono */␊ |
| 180 | maGraphicsModeBit = (1 << 4), /* 1 = graphics; 0 = text */␊ |
| 181 | maModeIsNotVGACompatableBit = (1 << 5), /* 1 = not compat; 0 = compat */␊ |
| 182 | maVGAMemoryModeNotAvailBit = (1 << 6), /* 1 = not avail; 0 = avail */␊ |
| 183 | maLinearFrameBufferAvailBit = (1 << 7) /* 1 = avail; 0 = not avail */␊ |
| 184 | };␊ |
| 185 | ␊ |
| 186 | /*␊ |
| 187 | * Modes␊ |
| 188 | */␊ |
| 189 | enum {␊ |
| 190 | mode640x400x256 = 0x100,␊ |
| 191 | mode640x480x256 = 0x101,␊ |
| 192 | mode800x600x16 = 0x102,␊ |
| 193 | mode800x600x256 = 0x103,␊ |
| 194 | mode1024x768x16 = 0x104,␊ |
| 195 | mode1024x768x256 = 0x105,␊ |
| 196 | mode1280x1024x16 = 0x106,␊ |
| 197 | mode1280x1024x256 = 0x107,␊ |
| 198 | mode80Cx60R = 0x108,␊ |
| 199 | mode132Cx25R = 0x109,␊ |
| 200 | mode132Cx43R = 0x10A,␊ |
| 201 | mode132Cx50R = 0x10B,␊ |
| 202 | mode132Cx60R = 0x10C,␊ |
| 203 | mode320x200x555 = 0x10D,␊ |
| 204 | mode320x200x565 = 0x10E,␊ |
| 205 | mode320x200x888 = 0x10F,␊ |
| 206 | mode640x480x555 = 0x110,␊ |
| 207 | mode640x480x565 = 0x111,␊ |
| 208 | mode640x480x888 = 0x112,␊ |
| 209 | mode800x600x555 = 0x113,␊ |
| 210 | mode800x600x565 = 0x114,␊ |
| 211 | mode800x600x888 = 0x115,␊ |
| 212 | mode1024x768x555 = 0x116,␊ |
| 213 | mode1024x768x565 = 0x117,␊ |
| 214 | mode1024x768x888 = 0x118,␊ |
| 215 | mode1280x1024x555 = 0x119,␊ |
| 216 | mode1280x1024x565 = 0x11A,␊ |
| 217 | mode1280x1024x888 = 0x11B,␊ |
| 218 | modeSpecial = 0x81FF,␊ |
| 219 | modeEndOfList = 0xFFFF␊ |
| 220 | };␊ |
| 221 | ␊ |
| 222 | /*␊ |
| 223 | * Get/Set VBE Mode parameters␊ |
| 224 | */␊ |
| 225 | enum {␊ |
| 226 | kCustomRefreshRateBit = (1 << 11),␊ |
| 227 | kLinearFrameBufferBit = (1 << 14),␊ |
| 228 | kPreserveMemoryBit = (1 << 15)␊ |
| 229 | };␊ |
| 230 | ␊ |
| 231 | /*␊ |
| 232 | * CRTC information block passed to function 4F02␊ |
| 233 | * to override default refresh rate.␊ |
| 234 | */␊ |
| 235 | #pragma pack(1)␊ |
| 236 | ␊ |
| 237 | typedef struct {␊ |
| 238 | unsigned short HTotal;␊ |
| 239 | unsigned short HSyncStart;␊ |
| 240 | unsigned short HSyncEnd;␊ |
| 241 | unsigned short VTotal;␊ |
| 242 | unsigned short VSyncStart;␊ |
| 243 | unsigned short VSyncEnd;␊ |
| 244 | unsigned char Flags;␊ |
| 245 | unsigned long PixelClock; /* in Hz */␊ |
| 246 | unsigned short RefreshRate; /* units of 0.01 Hz */␊ |
| 247 | unsigned char Reserved[40];␊ |
| 248 | } VBECRTCInfoBlock;␊ |
| 249 | ␊ |
| 250 | #pragma pack()␊ |
| 251 | ␊ |
| 252 | /*␊ |
| 253 | * Defined flags for 'Flags' field in VBECRTCInfoBlock.␊ |
| 254 | */␊ |
| 255 | enum {␊ |
| 256 | kCRTCDoubleScannedMode = (1 << 0),␊ |
| 257 | kCRTCInterlacedMode = (1 << 1),␊ |
| 258 | kCRTCNegativeHorizontalSync = (1 << 2),␊ |
| 259 | kCRTCNegativeVerticalSync = (1 << 3)␊ |
| 260 | };␊ |
| 261 | ␊ |
| 262 | /*␊ |
| 263 | * The type of paramter passed to generateCRTCTimings().␊ |
| 264 | */␊ |
| 265 | enum {␊ |
| 266 | kCRTCParamRefreshRate,␊ |
| 267 | kCRTCParamPixelClock␊ |
| 268 | };␊ |
| 269 | ␊ |
| 270 | /*␊ |
| 271 | * Palette␊ |
| 272 | */␊ |
| 273 | typedef unsigned long VBEPalette[256];␊ |
| 274 | ␊ |
| 275 | /*␊ |
| 276 | * DDC - AutoResolution␊ |
| 277 | */␊ |
| 278 | extern int getEDID(void *ddcblock, uint8_t blocksleft);␊ |
| 279 | ␊ |
| 280 | extern int getVBEInfo(void *vinfo_p);␊ |
| 281 | extern int getVBEModeInfo(int mode, void *minfo_p);␊ |
| 282 | extern int getVBEDACFormat(unsigned char *format);␊ |
| 283 | extern int setVBEDACFormat(unsigned char format);␊ |
| 284 | extern int setVBEPalette(void *palette);␊ |
| 285 | extern int getVBEPalette(void *palette);␊ |
| 286 | extern int setVBEMode(unsigned short mode, const VBECRTCInfoBlock *timing);␊ |
| 287 | extern int getVBECurrentMode(unsigned short *mode);␊ |
| 288 | extern int getVBEPixelClock(unsigned short mode, unsigned long *pixelClock);␊ |
| 289 | extern int generateCRTCTiming(unsigned short width,␊ |
| 290 | unsigned short height,␊ |
| 291 | unsigned long paramValue,␊ |
| 292 | int paramType,␊ |
| 293 | VBECRTCInfoBlock * timing);␊ |
| 294 | ␊ |
| 295 | #endif /* !__LIBSAIO_VBE_H */␊ |
| 296 | |