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 | |