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 | #define MIN_VESA_VERSION 0x200␊ |
39 | ␊ |
40 | #define SEG(address) \␊ |
41 | ((unsigned short)(((unsigned long)address & 0xffff0000) >> 4))␊ |
42 | ␊ |
43 | #define OFF(address) \␊ |
44 | ((unsigned short)((unsigned long)address & 0x0000ffff))␊ |
45 | ␊ |
46 | #define VBEMakeUInt32(x) \␊ |
47 | (((unsigned long)x##_high << 24) | \␊ |
48 | ((unsigned long)x##_2 << 16) | \␊ |
49 | ((unsigned long)x##_1 << 8) | \␊ |
50 | (unsigned long)x##_low)␊ |
51 | ␊ |
52 | #define VBEDecodeFP(t, fp) \␊ |
53 | ((t)(((fp ## _low) | ((fp ## _1 ) << 8)) + \␊ |
54 | (((fp ## _2) << 4) | ((fp ## _high ) << 12))))␊ |
55 | ␊ |
56 | /*␊ |
57 | * Functions␊ |
58 | */␊ |
59 | enum {␊ |
60 | funcGetControllerInfo = 0x4F00,␊ |
61 | funcGetModeInfo = 0x4F01,␊ |
62 | funcSetMode = 0x4F02,␊ |
63 | funcGetCurrentMode = 0x4F03,␊ |
64 | funcSaveRestoreState = 0x4F04,␊ |
65 | funcWindowControl = 0x4F05,␊ |
66 | funcGetSetScanLineLength = 0x4F06,␊ |
67 | funcGetSetDisplayStart = 0x4F07,␊ |
68 | funcGetSetPaletteFormat = 0x4F08,␊ |
69 | funcGetSetPaletteData = 0x4F09,␊ |
70 | funcGetProtModeInterdace = 0x4F0A,␊ |
71 | funcGetSetPixelClock = 0x4F0B␊ |
72 | };␊ |
73 | ␊ |
74 | enum {␊ |
75 | subfuncSet = 0x00,␊ |
76 | subfuncGet = 0x01,␊ |
77 | subfuncSetSecondary = 0x02,␊ |
78 | subfuncGetSecondary = 0x03␊ |
79 | };␊ |
80 | ␊ |
81 | /*␊ |
82 | * errors.␊ |
83 | */␊ |
84 | enum {␊ |
85 | errSuccess = 0,␊ |
86 | errFuncFailed = 1,␊ |
87 | errFuncNotSupported = 2,␊ |
88 | errFuncInvalid = 3␊ |
89 | };␊ |
90 | ␊ |
91 | /*␊ |
92 | * Per-controller info, returned in function 4f00.␊ |
93 | */␊ |
94 | typedef struct {␊ |
95 | unsigned char VESASignature[4];␊ |
96 | unsigned short VESAVersion;␊ |
97 | /*␊ |
98 | * Avoid packing problem...␊ |
99 | */␊ |
100 | unsigned char OEMStringPtr_low;␊ |
101 | unsigned char OEMStringPtr_1;␊ |
102 | unsigned char OEMStringPtr_2;␊ |
103 | unsigned char OEMStringPtr_high;␊ |
104 | unsigned char Capabilities_low;␊ |
105 | unsigned char Capabilities_1;␊ |
106 | unsigned char Capabilities_2;␊ |
107 | unsigned char Capabilities_high;␊ |
108 | unsigned char VideoModePtr_low;␊ |
109 | unsigned char VideoModePtr_1;␊ |
110 | unsigned char VideoModePtr_2;␊ |
111 | unsigned char VideoModePtr_high;␊ |
112 | unsigned short TotalMemory;␊ |
113 | unsigned char Reserved[236];␊ |
114 | unsigned char OEMData[256];␊ |
115 | } VBEInfoBlock;␊ |
116 | ␊ |
117 | /*␊ |
118 | * Capabilites␊ |
119 | */␊ |
120 | enum {␊ |
121 | capDACWidthIsSwitchableBit = (1 << 0), /* 1 = yes; 0 = no */␊ |
122 | capControllerIsNotVGACompatableBit = (1 << 1), /* 1 = no; 0 = yes */␊ |
123 | capOldRAMDAC = (1 << 2) /* 1 = yes; 0 = no */␊ |
124 | };␊ |
125 | ␊ |
126 | /*␊ |
127 | * Per-mode info, returned in function 4f02.␊ |
128 | */␊ |
129 | typedef struct {␊ |
130 | unsigned short ModeAttributes;␊ |
131 | unsigned char WinAAttributes;␊ |
132 | unsigned char WinBAttributes;␊ |
133 | unsigned short WinGranularity;␊ |
134 | unsigned short WinSize;␊ |
135 | unsigned short WinASegment;␊ |
136 | unsigned short WinABegment;␊ |
137 | void * WinFuncPtr;␊ |
138 | unsigned short BytesPerScanline;␊ |
139 | unsigned short XResolution;␊ |
140 | unsigned short YResolution;␊ |
141 | unsigned char XCharSize;␊ |
142 | unsigned char YCharSize;␊ |
143 | unsigned char NumberOfPlanes;␊ |
144 | unsigned char BitsPerPixel;␊ |
145 | unsigned char NumberOfBanks;␊ |
146 | unsigned char MemoryModel;␊ |
147 | unsigned char BankSize;␊ |
148 | unsigned char NumberOfImagePages;␊ |
149 | unsigned char Reserved;␊ |
150 | unsigned char RedMaskSize;␊ |
151 | unsigned char RedFieldPosition;␊ |
152 | unsigned char GreenMaskSize;␊ |
153 | unsigned char GreenFieldPosition;␊ |
154 | unsigned char BlueMaskSize;␊ |
155 | unsigned char BlueFieldPosition;␊ |
156 | unsigned char RsvdMaskSize;␊ |
157 | unsigned char RsvdFieldPosition;␊ |
158 | unsigned char DirectColorModeInfo;␊ |
159 | unsigned char PhysBasePtr_low;␊ |
160 | unsigned char PhysBasePtr_1;␊ |
161 | unsigned char PhysBasePtr_2;␊ |
162 | unsigned char PhysBasePtr_high;␊ |
163 | void * OffScreenMemOffset;␊ |
164 | unsigned short OffScreenMemSize;␊ |
165 | unsigned char Reserved1[206];␊ |
166 | } VBEModeInfoBlock;␊ |
167 | ␊ |
168 | /* ␊ |
169 | * ModeAttributes bits␊ |
170 | */␊ |
171 | enum {␊ |
172 | maModeIsSupportedBit = (1 << 0), /* mode is supported */␊ |
173 | maExtendedInfoAvailableBit = (1 << 1), /* extended info available */␊ |
174 | maOutputFuncSupportedBit = (1 << 2), /* output functions supported */␊ |
175 | maColorModeBit = (1 << 3), /* 1 = color; 0 = mono */␊ |
176 | maGraphicsModeBit = (1 << 4), /* 1 = graphics; 0 = text */␊ |
177 | maModeIsNotVGACompatableBit = (1 << 5), /* 1 = not compat; 0 = compat */␊ |
178 | maVGAMemoryModeNotAvailBit = (1 << 6), /* 1 = not avail; 0 = avail */␊ |
179 | maLinearFrameBufferAvailBit = (1 << 7) /* 1 = avail; 0 = not avail */␊ |
180 | };␊ |
181 | ␊ |
182 | /*␊ |
183 | * Modes␊ |
184 | */␊ |
185 | enum {␊ |
186 | mode640x400x256 = 0x100,␊ |
187 | mode640x480x256 = 0x101,␊ |
188 | mode800x600x16 = 0x102,␊ |
189 | mode800x600x256 = 0x103,␊ |
190 | mode1024x768x16 = 0x104,␊ |
191 | mode1024x768x256 = 0x105,␊ |
192 | mode1280x1024x16 = 0x106,␊ |
193 | mode1280x1024x256 = 0x107,␊ |
194 | mode80Cx60R = 0x108,␊ |
195 | mode132Cx25R = 0x109,␊ |
196 | mode132Cx43R = 0x10A,␊ |
197 | mode132Cx50R = 0x10B,␊ |
198 | mode132Cx60R = 0x10C,␊ |
199 | mode320x200x555 = 0x10D,␊ |
200 | mode320x200x565 = 0x10E,␊ |
201 | mode320x200x888 = 0x10F,␊ |
202 | mode640x480x555 = 0x110,␊ |
203 | mode640x480x565 = 0x111,␊ |
204 | mode640x480x888 = 0x112,␊ |
205 | mode800x600x555 = 0x113,␊ |
206 | mode800x600x565 = 0x114,␊ |
207 | mode800x600x888 = 0x115,␊ |
208 | mode1024x768x555 = 0x116,␊ |
209 | mode1024x768x565 = 0x117,␊ |
210 | mode1024x768x888 = 0x118,␊ |
211 | mode1280x1024x555 = 0x119,␊ |
212 | mode1280x1024x565 = 0x11A,␊ |
213 | mode1280x1024x888 = 0x11B,␊ |
214 | modeSpecial = 0x81FF,␊ |
215 | modeEndOfList = 0xFFFF␊ |
216 | };␊ |
217 | ␊ |
218 | /*␊ |
219 | * Get/Set VBE Mode parameters␊ |
220 | */␊ |
221 | enum {␊ |
222 | kCustomRefreshRateBit = (1 << 11),␊ |
223 | kLinearFrameBufferBit = (1 << 14),␊ |
224 | kPreserveMemoryBit = (1 << 15)␊ |
225 | };␊ |
226 | ␊ |
227 | /*␊ |
228 | * CRTC information block passed to function 4F02␊ |
229 | * to override default refresh rate.␊ |
230 | */␊ |
231 | #pragma pack(1)␊ |
232 | ␊ |
233 | typedef struct {␊ |
234 | unsigned short HTotal;␊ |
235 | unsigned short HSyncStart;␊ |
236 | unsigned short HSyncEnd;␊ |
237 | unsigned short VTotal;␊ |
238 | unsigned short VSyncStart;␊ |
239 | unsigned short VSyncEnd;␊ |
240 | unsigned char Flags;␊ |
241 | unsigned long PixelClock; /* in Hz */␊ |
242 | unsigned short RefreshRate; /* units of 0.01 Hz */␊ |
243 | unsigned char Reserved[40];␊ |
244 | } VBECRTCInfoBlock;␊ |
245 | ␊ |
246 | #pragma pack()␊ |
247 | ␊ |
248 | /*␊ |
249 | * Defined flags for 'Flags' field in VBECRTCInfoBlock.␊ |
250 | */␊ |
251 | enum {␊ |
252 | kCRTCDoubleScannedMode = (1 << 0),␊ |
253 | kCRTCInterlacedMode = (1 << 1),␊ |
254 | kCRTCNegativeHorizontalSync = (1 << 2),␊ |
255 | kCRTCNegativeVerticalSync = (1 << 3)␊ |
256 | };␊ |
257 | ␊ |
258 | /*␊ |
259 | * The type of paramter passed to generateCRTCTimings().␊ |
260 | */␊ |
261 | enum {␊ |
262 | kCRTCParamRefreshRate,␊ |
263 | kCRTCParamPixelClock␊ |
264 | };␊ |
265 | ␊ |
266 | /*␊ |
267 | * Palette␊ |
268 | */␊ |
269 | typedef unsigned long VBEPalette[256];␊ |
270 | ␊ |
271 | extern int getVBEInfo(void *vinfo_p);␊ |
272 | extern int getVBEModeInfo(int mode, void *minfo_p);␊ |
273 | extern int getVBEDACFormat(unsigned char *format);␊ |
274 | extern int setVBEDACFormat(unsigned char format);␊ |
275 | extern int setVBEPalette(void *palette);␊ |
276 | extern int getVBEPalette(void *palette);␊ |
277 | extern int setVBEMode(unsigned short mode, const VBECRTCInfoBlock *timing);␊ |
278 | extern int getVBECurrentMode(unsigned short *mode);␊ |
279 | extern int getVBEPixelClock(unsigned short mode, unsigned long *pixelClock);␊ |
280 | extern int generateCRTCTiming(unsigned short width,␊ |
281 | unsigned short height,␊ |
282 | unsigned long paramValue,␊ |
283 | int paramType,␊ |
284 | VBECRTCInfoBlock * timing);␊ |
285 | ␊ |
286 | #endif /* !__LIBSAIO_VBE_H */␊ |
287 | |