4 * Copyright 2000 Egbert Eich
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>
14 #include "xf86int10.h"
26 xf86Int10InfoPtr pInt10
;
34 } vbeInfoRec
, *vbeInfoPtr
;
36 #define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1)
37 #define VBE_VERSION_MINOR(x) (CARD8)(x)
39 extern _X_EXPORT vbeInfoPtr
VBEInit(xf86Int10InfoPtr pInt
, int entityIndex
);
40 extern _X_EXPORT vbeInfoPtr
VBEExtendedInit(xf86Int10InfoPtr pInt
,
41 int entityIndex
, int Flags
);
42 extern _X_EXPORT
void vbeFree(vbeInfoPtr pVbe
);
43 extern _X_EXPORT xf86MonPtr
vbeDoEDID(vbeInfoPtr pVbe
, pointer pDDCModule
);
47 typedef struct vbeControllerInfoBlock
{
48 CARD8 VbeSignature
[4];
51 CARD8 Capabilities
[4];
54 CARD16 OemSoftwareRev
;
55 CARD32 OemVendorNamePtr
;
56 CARD32 OemProductNamePtr
;
57 CARD32 OemProductRevPtr
;
60 } vbeControllerInfoRec
, *vbeControllerInfoPtr
;
62 #if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C)
63 #pragma pack() /* All GCC versions recognise this syntax */
68 #if !( defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) )
69 #define __attribute__(a)
72 typedef struct _VbeInfoBlock VbeInfoBlock
;
73 typedef struct _VbeModeInfoBlock VbeModeInfoBlock
;
74 typedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock
;
80 struct _VbeInfoBlock
{
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 */
88 /*CARD32 */ CARD16
*VideoModePtr
;
89 /* pointer to supported Super VGA modes */
91 CARD16 TotalMemory
; /* Number of 64kb memory blocks on board */
92 /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */
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
));
106 /* Return Super VGA Information */
107 extern _X_EXPORT VbeInfoBlock
*VBEGetVBEInfo(vbeInfoPtr pVbe
);
108 extern _X_EXPORT
void VBEFreeVBEInfo(VbeInfoBlock
* block
);
114 struct _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 */
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 */
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 */
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 */
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
));
170 /* Return VBE Mode Information */
171 extern _X_EXPORT VbeModeInfoBlock
*VBEGetModeInfo(vbeInfoPtr pVbe
, int mode
);
172 extern _X_EXPORT
void VBEFreeModeInfo(VbeModeInfoBlock
* block
);
178 #define CRTC_DBLSCAN (1<<0)
179 #define CRTC_INTERLACE (1<<1)
180 #define CRTC_NHSYNC (1<<2)
181 #define CRTC_NVSYNC (1<<3)
183 struct _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
));
196 /* VbeCRTCInfoBlock is in the VESA 3.0 specs */
198 extern _X_EXPORT Bool
VBESetVBEMode(vbeInfoPtr pVbe
, int mode
,
199 VbeCRTCInfoBlock
* crtc
);
205 extern _X_EXPORT Bool
VBEGetVBEMode(vbeInfoPtr pVbe
, int *mode
);
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
217 * function 0 called automatically if function 1 called without
218 * a previous call to function 0.
225 } vbeSaveRestoreFunction
;
227 extern _X_EXPORT Bool
229 VBESaveRestore(vbeInfoPtr pVbe
, vbeSaveRestoreFunction fuction
,
230 pointer
*memory
, int *size
, int *real_mode_pages
);
236 extern _X_EXPORT Bool
237 VBEBankSwitch(vbeInfoPtr pVbe
, unsigned int iBank
, int window
);
248 } vbeScanwidthCommand
;
250 #define VBESetLogicalScanline(pVbe, width) \
251 VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \
253 #define VBESetLogicalScanlineBytes(pVbe, width) \
254 VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \
256 #define VBEGetLogicalScanline(pVbe, pixels, bytes, max) \
257 VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \
259 #define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max) \
260 VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \
262 extern _X_EXPORT Bool
VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe
,
265 int *pixels
, int *bytes
,
273 extern _X_EXPORT Bool
VBESetDisplayStart(vbeInfoPtr pVbe
, int x
, int y
,
275 extern _X_EXPORT Bool
VBEGetDisplayStart(vbeInfoPtr pVbe
, int *x
, int *y
);
281 /* if bits is 0, then it is a GET */
282 extern _X_EXPORT
int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe
, int bits
);
289 * If getting a palette, the data argument is not used. It will return
291 * If setting a palette, it will return the pointer received on success,
294 extern _X_EXPORT CARD32
*VBESetGetPaletteData(vbeInfoPtr pVbe
, Bool set
,
295 int first
, int num
, CARD32
*data
,
298 #define VBEFreePaletteData(data) free(data)
304 typedef struct _VBEpmi
{
310 extern _X_EXPORT VBEpmi
*VBEGetVBEpmi(vbeInfoPtr pVbe
);
312 #define VESAFreeVBEpmi(pmi) free(pmi)
314 /* high level helper functions */
316 typedef struct _vbeModeInfoRec
{
321 struct _vbeModeInfoRec
*next
;
322 } vbeModeInfoRec
, *vbeModeInfoPtr
;
330 } vbeSaveRestoreRec
, *vbeSaveRestorePtr
;
332 extern _X_EXPORT
void
334 VBEVesaSaveRestore(vbeInfoPtr pVbe
, vbeSaveRestorePtr vbe_sr
,
335 vbeSaveRestoreFunction function
);
337 extern _X_EXPORT
int VBEGetPixelClock(vbeInfoPtr pVbe
, int mode
, int Clock
);
338 extern _X_EXPORT Bool
VBEDPMSSet(vbeInfoPtr pVbe
, int mode
);
348 int reserved_offscreen_mem_size
;
349 int reserved_offscreen_mem_pointer
;
353 extern _X_EXPORT
void VBEInterpretPanelID(ScrnInfoPtr pScrn
,
354 struct vbePanelID
*data
);
355 extern _X_EXPORT
struct vbePanelID
*VBEReadPanelID(vbeInfoPtr pVbe
);