Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xfree86 / vbe / vbe.h
CommitLineData
a09e091a
JB
1
2/*
3 * XFree86 vbe module
4 * Copyright 2000 Egbert Eich
5 *
6 * The mode query/save/set/restore functions from the vesa driver
7 * have been moved here.
8 * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
9 * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
10 */
11
12#ifndef _VBE_H
13#define _VBE_H
14#include "xf86int10.h"
15#include "xf86DDC.h"
16
17typedef enum {
18 DDC_UNCHECKED,
19 DDC_NONE,
20 DDC_1,
21 DDC_2,
22 DDC_1_2
23} ddc_lvl;
24
25typedef struct {
26 xf86Int10InfoPtr pInt10;
27 int version;
28 pointer memory;
29 int real_mode_base;
30 int num_pages;
31 Bool init_int10;
32 ddc_lvl ddc;
33 Bool ddc_blank;
34} vbeInfoRec, *vbeInfoPtr;
35
36#define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1)
37#define VBE_VERSION_MINOR(x) (CARD8)(x)
38
39extern _X_EXPORT vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex);
40extern _X_EXPORT vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt,
41 int entityIndex, int Flags);
42extern _X_EXPORT void vbeFree(vbeInfoPtr pVbe);
43extern _X_EXPORT xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule);
44
45#pragma pack(1)
46
47typedef struct vbeControllerInfoBlock {
48 CARD8 VbeSignature[4];
49 CARD16 VbeVersion;
50 CARD32 OemStringPtr;
51 CARD8 Capabilities[4];
52 CARD32 VideoModePtr;
53 CARD16 TotalMem;
54 CARD16 OemSoftwareRev;
55 CARD32 OemVendorNamePtr;
56 CARD32 OemProductNamePtr;
57 CARD32 OemProductRevPtr;
58 CARD8 Scratch[222];
59 CARD8 OemData[256];
60} vbeControllerInfoRec, *vbeControllerInfoPtr;
61
62#if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C)
63#pragma pack() /* All GCC versions recognise this syntax */
64#else
65#pragma pack(0)
66#endif
67
68#if !( defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) )
69#define __attribute__(a)
70#endif
71
72typedef struct _VbeInfoBlock VbeInfoBlock;
73typedef struct _VbeModeInfoBlock VbeModeInfoBlock;
74typedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock;
75
76/*
77 * INT 0
78 */
79
80struct _VbeInfoBlock {
81 /* VESA 1.2 fields */
82 CARD8 VESASignature[4]; /* VESA */
83 CARD16 VESAVersion; /* Higher byte major, lower byte minor */
84 /*CARD32 */ char *OEMStringPtr;
85 /* Pointer to OEM string */
86 CARD8 Capabilities[4]; /* Capabilities of the video environment */
87
88 /*CARD32 */ CARD16 *VideoModePtr;
89 /* pointer to supported Super VGA modes */
90
91 CARD16 TotalMemory; /* Number of 64kb memory blocks on board */
92 /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */
93
94 /* VESA 2 fields */
95 CARD16 OemSoftwareRev; /* VBE implementation Software revision */
96 /*CARD32 */ char *OemVendorNamePtr;
97 /* Pointer to Vendor Name String */
98 /*CARD32 */ char *OemProductNamePtr;
99 /* Pointer to Product Name String */
100 /*CARD32 */ char *OemProductRevPtr;
101 /* Pointer to Product Revision String */
102 CARD8 Reserved[222]; /* Reserved for VBE implementation */
103 CARD8 OemData[256]; /* Data Area for OEM Strings */
104} __attribute__ ((packed));
105
106/* Return Super VGA Information */
107extern _X_EXPORT VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe);
108extern _X_EXPORT void VBEFreeVBEInfo(VbeInfoBlock * block);
109
110/*
111 * INT 1
112 */
113
114struct _VbeModeInfoBlock {
115 CARD16 ModeAttributes; /* mode attributes */
116 CARD8 WinAAttributes; /* window A attributes */
117 CARD8 WinBAttributes; /* window B attributes */
118 CARD16 WinGranularity; /* window granularity */
119 CARD16 WinSize; /* window size */
120 CARD16 WinASegment; /* window A start segment */
121 CARD16 WinBSegment; /* window B start segment */
122 CARD32 WinFuncPtr; /* real mode pointer to window function */
123 CARD16 BytesPerScanline; /* bytes per scanline */
124
125 /* Mandatory information for VBE 1.2 and above */
126 CARD16 XResolution; /* horizontal resolution in pixels or characters */
127 CARD16 YResolution; /* vertical resolution in pixels or characters */
128 CARD8 XCharSize; /* character cell width in pixels */
129 CARD8 YCharSize; /* character cell height in pixels */
130 CARD8 NumberOfPlanes; /* number of memory planes */
131 CARD8 BitsPerPixel; /* bits per pixel */
132 CARD8 NumberOfBanks; /* number of banks */
133 CARD8 MemoryModel; /* memory model type */
134 CARD8 BankSize; /* bank size in KB */
135 CARD8 NumberOfImages; /* number of images */
136 CARD8 Reserved; /* 1 *//* reserved for page function */
137
138 /* Direct color fields (required for direct/6 and YUV/7 memory models) */
139 CARD8 RedMaskSize; /* size of direct color red mask in bits */
140 CARD8 RedFieldPosition; /* bit position of lsb of red mask */
141 CARD8 GreenMaskSize; /* size of direct color green mask in bits */
142 CARD8 GreenFieldPosition; /* bit position of lsb of green mask */
143 CARD8 BlueMaskSize; /* size of direct color blue mask in bits */
144 CARD8 BlueFieldPosition; /* bit position of lsb of blue mask */
145 CARD8 RsvdMaskSize; /* size of direct color reserved mask in bits */
146 CARD8 RsvdFieldPosition; /* bit position of lsb of reserved mask */
147 CARD8 DirectColorModeInfo; /* direct color mode attributes */
148
149 /* Mandatory information for VBE 2.0 and above */
150 CARD32 PhysBasePtr; /* physical address for flat memory frame buffer */
151 CARD32 Reserved32; /* 0 *//* Reserved - always set to 0 */
152 CARD16 Reserved16; /* 0 *//* Reserved - always set to 0 */
153
154 /* Mandatory information for VBE 3.0 and above */
155 CARD16 LinBytesPerScanLine; /* bytes per scan line for linear modes */
156 CARD8 BnkNumberOfImagePages; /* number of images for banked modes */
157 CARD8 LinNumberOfImagePages; /* number of images for linear modes */
158 CARD8 LinRedMaskSize; /* size of direct color red mask (linear modes) */
159 CARD8 LinRedFieldPosition; /* bit position of lsb of red mask (linear modes) */
160 CARD8 LinGreenMaskSize; /* size of direct color green mask (linear modes) */
161 CARD8 LinGreenFieldPosition; /* bit position of lsb of green mask (linear modes) */
162 CARD8 LinBlueMaskSize; /* size of direct color blue mask (linear modes) */
163 CARD8 LinBlueFieldPosition; /* bit position of lsb of blue mask (linear modes) */
164 CARD8 LinRsvdMaskSize; /* size of direct color reserved mask (linear modes) */
165 CARD8 LinRsvdFieldPosition; /* bit position of lsb of reserved mask (linear modes) */
166 CARD32 MaxPixelClock; /* maximum pixel clock (in Hz) for graphics mode */
167 CARD8 Reserved2[189]; /* remainder of VbeModeInfoBlock */
168} __attribute__ ((packed));
169
170/* Return VBE Mode Information */
171extern _X_EXPORT VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode);
172extern _X_EXPORT void VBEFreeModeInfo(VbeModeInfoBlock * block);
173
174/*
175 * INT2
176 */
177
178#define CRTC_DBLSCAN (1<<0)
179#define CRTC_INTERLACE (1<<1)
180#define CRTC_NHSYNC (1<<2)
181#define CRTC_NVSYNC (1<<3)
182
183struct _VbeCRTCInfoBlock {
184 CARD16 HorizontalTotal; /* Horizontal total in pixels */
185 CARD16 HorizontalSyncStart; /* Horizontal sync start in pixels */
186 CARD16 HorizontalSyncEnd; /* Horizontal sync end in pixels */
187 CARD16 VerticalTotal; /* Vertical total in lines */
188 CARD16 VerticalSyncStart; /* Vertical sync start in lines */
189 CARD16 VerticalSyncEnd; /* Vertical sync end in lines */
190 CARD8 Flags; /* Flags (Interlaced, Double Scan etc) */
191 CARD32 PixelClock; /* Pixel clock in units of Hz */
192 CARD16 RefreshRate; /* Refresh rate in units of 0.01 Hz */
193 CARD8 Reserved[40]; /* remainder of ModeInfoBlock */
194} __attribute__ ((packed));
195
196/* VbeCRTCInfoBlock is in the VESA 3.0 specs */
197
198extern _X_EXPORT Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode,
199 VbeCRTCInfoBlock * crtc);
200
201/*
202 * INT 3
203 */
204
205extern _X_EXPORT Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode);
206
207/*
208 * INT 4
209 */
210
211/* Save/Restore Super VGA video state */
212/* function values are (values stored in VESAPtr):
213 * 0 := query & allocate amount of memory to save state
214 * 1 := save state
215 * 2 := restore state
216 *
217 * function 0 called automatically if function 1 called without
218 * a previous call to function 0.
219 */
220
221typedef enum {
222 MODE_QUERY,
223 MODE_SAVE,
224 MODE_RESTORE
225} vbeSaveRestoreFunction;
226
227extern _X_EXPORT Bool
228
229VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction fuction,
230 pointer *memory, int *size, int *real_mode_pages);
231
232/*
233 * INT 5
234 */
235
236extern _X_EXPORT Bool
237 VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window);
238
239/*
240 * INT 6
241 */
242
243typedef enum {
244 SCANWID_SET,
245 SCANWID_GET,
246 SCANWID_SET_BYTES,
247 SCANWID_GET_MAX
248} vbeScanwidthCommand;
249
250#define VBESetLogicalScanline(pVbe, width) \
251 VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \
252 NULL, NULL, NULL)
253#define VBESetLogicalScanlineBytes(pVbe, width) \
254 VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \
255 NULL, NULL, NULL)
256#define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \
257 VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \
258 pixels, bytes, max)
259#define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \
260 VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \
261 pixels, bytes, max)
262extern _X_EXPORT Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe,
263 vbeScanwidthCommand
264 command, int width,
265 int *pixels, int *bytes,
266 int *max);
267
268/*
269 * INT 7
270 */
271
272/* 16 bit code */
273extern _X_EXPORT Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y,
274 Bool wait_retrace);
275extern _X_EXPORT Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y);
276
277/*
278 * INT 8
279 */
280
281/* if bits is 0, then it is a GET */
282extern _X_EXPORT int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits);
283
284/*
285 * INT 9
286 */
287
288/*
289 * If getting a palette, the data argument is not used. It will return
290 * the data.
291 * If setting a palette, it will return the pointer received on success,
292 * NULL on failure.
293 */
294extern _X_EXPORT CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set,
295 int first, int num, CARD32 *data,
296 Bool secondary,
297 Bool wait_retrace);
298#define VBEFreePaletteData(data) free(data)
299
300/*
301 * INT A
302 */
303
304typedef struct _VBEpmi {
305 int seg_tbl;
306 int tbl_off;
307 int tbl_len;
308} VBEpmi;
309
310extern _X_EXPORT VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe);
311
312#define VESAFreeVBEpmi(pmi) free(pmi)
313
314/* high level helper functions */
315
316typedef struct _vbeModeInfoRec {
317 int width;
318 int height;
319 int bpp;
320 int n;
321 struct _vbeModeInfoRec *next;
322} vbeModeInfoRec, *vbeModeInfoPtr;
323
324typedef struct {
325 CARD8 *state;
326 CARD8 *pstate;
327 int statePage;
328 int stateSize;
329 int stateMode;
330} vbeSaveRestoreRec, *vbeSaveRestorePtr;
331
332extern _X_EXPORT void
333
334VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
335 vbeSaveRestoreFunction function);
336
337extern _X_EXPORT int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock);
338extern _X_EXPORT Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode);
339
340struct vbePanelID {
341 short hsize;
342 short vsize;
343 short fptype;
344 char redbpp;
345 char greenbpp;
346 char bluebpp;
347 char reservedbpp;
348 int reserved_offscreen_mem_size;
349 int reserved_offscreen_mem_pointer;
350 char reserved[14];
351};
352
353extern _X_EXPORT void VBEInterpretPanelID(ScrnInfoPtr pScrn,
354 struct vbePanelID *data);
355extern _X_EXPORT struct vbePanelID *VBEReadPanelID(vbeInfoPtr pVbe);
356
357#endif