]>
Commit | Line | Data |
---|---|---|
14c7c974 | 1 | /* |
57c72a9a | 2 | * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved. |
14c7c974 A |
3 | * |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
57c72a9a | 6 | * Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights |
4f6e3300 A |
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 | |
57c72a9a | 9 | * Source License Version 2.0 (the "License"). You may not use this file |
4f6e3300 A |
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. | |
14c7c974 A |
13 | * |
14 | * The Original Code and all software distributed under the License are | |
4f6e3300 | 15 | * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
14c7c974 A |
16 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
17 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
4f6e3300 A |
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. | |
14c7c974 A |
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 | ||
14c7c974 A |
38 | #define MIN_VESA_VERSION 0x200 |
39 | ||
40 | #define SEG(address) \ | |
41 | ((unsigned short)(((unsigned long)address & 0xffff0000) >> 4)) | |
75b89a82 A |
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)))) | |
14c7c974 A |
55 | |
56 | /* | |
75b89a82 | 57 | * Functions |
14c7c974 A |
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, | |
f083c6c3 A |
70 | funcGetProtModeInterdace = 0x4F0A, |
71 | funcGetSetPixelClock = 0x4F0B | |
14c7c974 A |
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[242]; | |
114 | } VBEInfoBlock; | |
115 | ||
116 | /* | |
117 | * Capabilites | |
118 | */ | |
119 | enum { | |
75b89a82 A |
120 | capDACWidthIsSwitchableBit = (1 << 0), /* 1 = yes; 0 = no */ |
121 | capControllerIsNotVGACompatableBit = (1 << 1), /* 1 = no; 0 = yes */ | |
122 | capOldRAMDAC = (1 << 2) /* 1 = yes; 0 = no */ | |
14c7c974 A |
123 | }; |
124 | ||
125 | /* | |
126 | * Per-mode info, returned in function 4f02. | |
127 | */ | |
128 | typedef struct { | |
129 | unsigned short ModeAttributes; | |
130 | unsigned char WinAAttributes; | |
131 | unsigned char WinBAttributes; | |
132 | unsigned short WinGranularity; | |
133 | unsigned short WinSize; | |
134 | unsigned short WinASegment; | |
135 | unsigned short WinABegment; | |
136 | void * WinFuncPtr; | |
137 | unsigned short BytesPerScanline; | |
138 | unsigned short XResolution; | |
139 | unsigned short YResolution; | |
140 | unsigned char XCharSize; | |
141 | unsigned char YCharSize; | |
142 | unsigned char NumberOfPlanes; | |
143 | unsigned char BitsPerPixel; | |
144 | unsigned char NumberOfBanks; | |
145 | unsigned char MemoryModel; | |
146 | unsigned char BankSize; | |
147 | unsigned char NumberOfImagePages; | |
148 | unsigned char Reserved; | |
149 | unsigned char RedMaskSize; | |
150 | unsigned char RedFieldPosition; | |
151 | unsigned char GreenMaskSize; | |
152 | unsigned char GreenFieldPosition; | |
153 | unsigned char BlueMaskSize; | |
154 | unsigned char BlueFieldPosition; | |
155 | unsigned char RsvdMaskSize; | |
156 | unsigned char RsvdFieldPosition; | |
157 | unsigned char DirectColorModeInfo; | |
158 | unsigned char PhysBasePtr_low; | |
159 | unsigned char PhysBasePtr_1; | |
160 | unsigned char PhysBasePtr_2; | |
161 | unsigned char PhysBasePtr_high; | |
162 | void * OffScreenMemOffset; | |
163 | unsigned short OffScreenMemSize; | |
164 | unsigned char Reserved1[206]; | |
165 | } VBEModeInfoBlock; | |
166 | ||
167 | /* | |
168 | * ModeAttributes bits | |
169 | */ | |
170 | enum { | |
171 | maModeIsSupportedBit = (1 << 0), /* mode is supported */ | |
172 | maExtendedInfoAvailableBit = (1 << 1), /* extended info available */ | |
173 | maOutputFuncSupportedBit = (1 << 2), /* output functions supported */ | |
174 | maColorModeBit = (1 << 3), /* 1 = color; 0 = mono */ | |
175 | maGraphicsModeBit = (1 << 4), /* 1 = graphics; 0 = text */ | |
176 | maModeIsNotVGACompatableBit = (1 << 5), /* 1 = not compat; 0 = compat */ | |
177 | maVGAMemoryModeNotAvailBit = (1 << 6), /* 1 = not avail; 0 = avail */ | |
178 | maLinearFrameBufferAvailBit = (1 << 7) /* 1 = avail; 0 = not avail */ | |
179 | }; | |
180 | ||
181 | /* | |
75b89a82 | 182 | * Modes |
14c7c974 A |
183 | */ |
184 | enum { | |
185 | mode640x400x256 = 0x100, | |
186 | mode640x480x256 = 0x101, | |
187 | mode800x600x16 = 0x102, | |
188 | mode800x600x256 = 0x103, | |
189 | mode1024x768x16 = 0x104, | |
190 | mode1024x768x256 = 0x105, | |
191 | mode1280x1024x16 = 0x106, | |
192 | mode1280x1024x256 = 0x107, | |
193 | mode80Cx60R = 0x108, | |
194 | mode132Cx25R = 0x109, | |
195 | mode132Cx43R = 0x10A, | |
196 | mode132Cx50R = 0x10B, | |
197 | mode132Cx60R = 0x10C, | |
198 | mode320x200x555 = 0x10D, | |
199 | mode320x200x565 = 0x10E, | |
200 | mode320x200x888 = 0x10F, | |
201 | mode640x480x555 = 0x110, | |
202 | mode640x480x565 = 0x111, | |
203 | mode640x480x888 = 0x112, | |
204 | mode800x600x555 = 0x113, | |
205 | mode800x600x565 = 0x114, | |
206 | mode800x600x888 = 0x115, | |
207 | mode1024x768x555 = 0x116, | |
208 | mode1024x768x565 = 0x117, | |
209 | mode1024x768x888 = 0x118, | |
210 | mode1280x1024x555 = 0x119, | |
211 | mode1280x1024x565 = 0x11A, | |
212 | mode1280x1024x888 = 0x11B, | |
75b89a82 A |
213 | modeSpecial = 0x81FF, |
214 | modeEndOfList = 0xFFFF | |
14c7c974 A |
215 | }; |
216 | ||
217 | /* | |
75b89a82 | 218 | * Get/Set VBE Mode parameters |
14c7c974 A |
219 | */ |
220 | enum { | |
f083c6c3 | 221 | kCustomRefreshRateBit = (1 << 11), |
14c7c974 A |
222 | kLinearFrameBufferBit = (1 << 14), |
223 | kPreserveMemoryBit = (1 << 15) | |
224 | }; | |
225 | ||
f083c6c3 A |
226 | /* |
227 | * CRTC information block passed to function 4F02 | |
228 | * to override default refresh rate. | |
229 | */ | |
230 | #pragma pack(1) | |
231 | ||
232 | typedef struct { | |
233 | unsigned short HTotal; | |
234 | unsigned short HSyncStart; | |
235 | unsigned short HSyncEnd; | |
236 | unsigned short VTotal; | |
237 | unsigned short VSyncStart; | |
238 | unsigned short VSyncEnd; | |
239 | unsigned char Flags; | |
240 | unsigned long PixelClock; /* in Hz */ | |
241 | unsigned short RefreshRate; /* units of 0.01 Hz */ | |
242 | unsigned char Reserved[40]; | |
243 | } VBECRTCInfoBlock; | |
244 | ||
bba600dd | 245 | #pragma pack() |
f083c6c3 A |
246 | |
247 | /* | |
248 | * Defined flags for 'Flags' field in VBECRTCInfoBlock. | |
249 | */ | |
250 | enum { | |
251 | kCRTCDoubleScannedMode = (1 << 0), | |
252 | kCRTCInterlacedMode = (1 << 1), | |
253 | kCRTCNegativeHorizontalSync = (1 << 2), | |
254 | kCRTCNegativeVerticalSync = (1 << 3) | |
255 | }; | |
256 | ||
257 | /* | |
258 | * The type of paramter passed to generateCRTCTimings(). | |
259 | */ | |
260 | enum { | |
261 | kCRTCParamRefreshRate, | |
262 | kCRTCParamPixelClock | |
263 | }; | |
264 | ||
14c7c974 A |
265 | /* |
266 | * Palette | |
267 | */ | |
268 | typedef unsigned long VBEPalette[256]; | |
269 | ||
270 | extern int getVBEInfo(void *vinfo_p); | |
271 | extern int getVBEModeInfo(int mode, void *minfo_p); | |
272 | extern int getVBEDACFormat(unsigned char *format); | |
273 | extern int setVBEDACFormat(unsigned char format); | |
274 | extern int setVBEPalette(void *palette); | |
275 | extern int getVBEPalette(void *palette); | |
f083c6c3 | 276 | extern int setVBEMode(unsigned short mode, const VBECRTCInfoBlock *timing); |
14c7c974 | 277 | extern int getVBECurrentMode(unsigned short *mode); |
f083c6c3 A |
278 | extern int getVBEPixelClock(unsigned short mode, unsigned long *pixelClock); |
279 | extern int generateCRTCTiming(unsigned short width, | |
280 | unsigned short height, | |
281 | unsigned long paramValue, | |
282 | int paramType, | |
283 | VBECRTCInfoBlock * timing); | |
14c7c974 A |
284 | |
285 | #endif /* !__LIBSAIO_VBE_H */ |