Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xfree86 / vgahw / vgaHW.h
1
2 /*
3 * Copyright (c) 1997,1998 The XFree86 Project, Inc.
4 *
5 * Loosely based on code bearing the following copyright:
6 *
7 * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
8 *
9 * Author: Dirk Hohndel
10 */
11
12 #ifndef _VGAHW_H
13 #define _VGAHW_H
14
15 #include <X11/X.h>
16 #include "misc.h"
17 #include "input.h"
18 #include "scrnintstr.h"
19 #include "colormapst.h"
20
21 #include "xf86str.h"
22 #include "xf86Pci.h"
23
24 #include "xf86DDC.h"
25
26 #include "globals.h"
27 #include <X11/extensions/dpmsconst.h>
28
29 extern _X_EXPORT int vgaHWGetIndex(void);
30
31 /*
32 * access macro
33 */
34 #define VGAHWPTR(p) ((vgaHWPtr)((p)->privates[vgaHWGetIndex()].ptr))
35
36 /* Standard VGA registers */
37 #define VGA_ATTR_INDEX 0x3C0
38 #define VGA_ATTR_DATA_W 0x3C0
39 #define VGA_ATTR_DATA_R 0x3C1
40 #define VGA_IN_STAT_0 0x3C2 /* read */
41 #define VGA_MISC_OUT_W 0x3C2 /* write */
42 #define VGA_ENABLE 0x3C3
43 #define VGA_SEQ_INDEX 0x3C4
44 #define VGA_SEQ_DATA 0x3C5
45 #define VGA_DAC_MASK 0x3C6
46 #define VGA_DAC_READ_ADDR 0x3C7
47 #define VGA_DAC_WRITE_ADDR 0x3C8
48 #define VGA_DAC_DATA 0x3C9
49 #define VGA_FEATURE_R 0x3CA /* read */
50 #define VGA_MISC_OUT_R 0x3CC /* read */
51 #define VGA_GRAPH_INDEX 0x3CE
52 #define VGA_GRAPH_DATA 0x3CF
53
54 #define VGA_IOBASE_MONO 0x3B0
55 #define VGA_IOBASE_COLOR 0x3D0
56
57 #define VGA_CRTC_INDEX_OFFSET 0x04
58 #define VGA_CRTC_DATA_OFFSET 0x05
59 #define VGA_IN_STAT_1_OFFSET 0x0A /* read */
60 #define VGA_FEATURE_W_OFFSET 0x0A /* write */
61
62 /* default number of VGA registers stored internally */
63 #define VGA_NUM_CRTC 25
64 #define VGA_NUM_SEQ 5
65 #define VGA_NUM_GFX 9
66 #define VGA_NUM_ATTR 21
67
68 /* Flags for vgaHWSave() and vgaHWRestore() */
69 #define VGA_SR_MODE 0x01
70 #define VGA_SR_FONTS 0x02
71 #define VGA_SR_CMAP 0x04
72 #define VGA_SR_ALL (VGA_SR_MODE | VGA_SR_FONTS | VGA_SR_CMAP)
73
74 /* Defaults for the VGA memory window */
75 #define VGA_DEFAULT_PHYS_ADDR 0xA0000
76 #define VGA_DEFAULT_MEM_SIZE (64 * 1024)
77
78 /*
79 * vgaRegRec contains settings of standard VGA registers.
80 */
81 typedef struct {
82 unsigned char MiscOutReg; /* */
83 unsigned char *CRTC; /* Crtc Controller */
84 unsigned char *Sequencer; /* Video Sequencer */
85 unsigned char *Graphics; /* Video Graphics */
86 unsigned char *Attribute; /* Video Atribute */
87 unsigned char DAC[768]; /* Internal Colorlookuptable */
88 unsigned char numCRTC; /* number of CRTC registers, def=VGA_NUM_CRTC */
89 unsigned char numSequencer; /* number of seq registers, def=VGA_NUM_SEQ */
90 unsigned char numGraphics; /* number of gfx registers, def=VGA_NUM_GFX */
91 unsigned char numAttribute; /* number of attr registers, def=VGA_NUM_ATTR */
92 } vgaRegRec, *vgaRegPtr;
93
94 typedef struct _vgaHWRec *vgaHWPtr;
95
96 typedef void (*vgaHWWriteIndexProcPtr) (vgaHWPtr hwp, CARD8 indx, CARD8 value);
97 typedef CARD8 (*vgaHWReadIndexProcPtr) (vgaHWPtr hwp, CARD8 indx);
98 typedef void (*vgaHWWriteProcPtr) (vgaHWPtr hwp, CARD8 value);
99 typedef CARD8 (*vgaHWReadProcPtr) (vgaHWPtr hwp);
100 typedef void (*vgaHWMiscProcPtr) (vgaHWPtr hwp);
101
102 /*
103 * vgaHWRec contains per-screen information required by the vgahw module.
104 *
105 * Note, the palette referred to by the paletteEnabled, enablePalette and
106 * disablePalette is the 16-entry (+overscan) EGA-compatible palette accessed
107 * via the first 17 attribute registers and not the main 8-bit palette.
108 */
109 typedef struct _vgaHWRec {
110 pointer Base; /* Address of "VGA" memory */
111 int MapSize; /* Size of "VGA" memory */
112 unsigned long MapPhys; /* phys location of VGA mem */
113 int IOBase; /* I/O Base address */
114 CARD8 *MMIOBase; /* Pointer to MMIO start */
115 int MMIOOffset; /* base + offset + vgareg
116 = mmioreg */
117 pointer FontInfo1; /* save area for fonts in
118 plane 2 */
119 pointer FontInfo2; /* save area for fonts in
120 plane 3 */
121 pointer TextInfo; /* save area for text */
122 vgaRegRec SavedReg; /* saved registers */
123 vgaRegRec ModeReg; /* register settings for
124 current mode */
125 Bool ShowOverscan;
126 Bool paletteEnabled;
127 Bool cmapSaved;
128 ScrnInfoPtr pScrn;
129 vgaHWWriteIndexProcPtr writeCrtc;
130 vgaHWReadIndexProcPtr readCrtc;
131 vgaHWWriteIndexProcPtr writeGr;
132 vgaHWReadIndexProcPtr readGr;
133 vgaHWReadProcPtr readST00;
134 vgaHWReadProcPtr readST01;
135 vgaHWReadProcPtr readFCR;
136 vgaHWWriteProcPtr writeFCR;
137 vgaHWWriteIndexProcPtr writeAttr;
138 vgaHWReadIndexProcPtr readAttr;
139 vgaHWWriteIndexProcPtr writeSeq;
140 vgaHWReadIndexProcPtr readSeq;
141 vgaHWWriteProcPtr writeMiscOut;
142 vgaHWReadProcPtr readMiscOut;
143 vgaHWMiscProcPtr enablePalette;
144 vgaHWMiscProcPtr disablePalette;
145 vgaHWWriteProcPtr writeDacMask;
146 vgaHWReadProcPtr readDacMask;
147 vgaHWWriteProcPtr writeDacWriteAddr;
148 vgaHWWriteProcPtr writeDacReadAddr;
149 vgaHWWriteProcPtr writeDacData;
150 vgaHWReadProcPtr readDacData;
151 pointer ddc;
152 struct pci_io_handle *io;
153 vgaHWReadProcPtr readEnable;
154 vgaHWWriteProcPtr writeEnable;
155 struct pci_device *dev;
156 } vgaHWRec;
157
158 /* Some macros that VGA drivers can use in their ChipProbe() function */
159 #define OVERSCAN 0x11 /* Index of OverScan register */
160
161 /* Flags that define how overscan correction should take place */
162 #define KGA_FIX_OVERSCAN 1 /* overcan correction required */
163 #define KGA_ENABLE_ON_ZERO 2 /* if possible enable display at beginning */
164 /* of next scanline/frame */
165 #define KGA_BE_TOT_DEC 4 /* always fix problem by setting blank end */
166 /* to total - 1 */
167 #define BIT_PLANE 3 /* Which plane we write to in mono mode */
168 #define BITS_PER_GUN 6
169 #define COLORMAP_SIZE 256
170
171 #define DACDelay(hw) \
172 do { \
173 (hw)->readST01((hw)); \
174 (hw)->readST01((hw)); \
175 } while (0)
176
177 /* Function Prototypes */
178
179 /* vgaHW.c */
180
181 typedef void vgaHWProtectProc(ScrnInfoPtr, Bool);
182 typedef void vgaHWBlankScreenProc(ScrnInfoPtr, Bool);
183
184 extern _X_EXPORT void vgaHWSetStdFuncs(vgaHWPtr hwp);
185 extern _X_EXPORT void vgaHWSetMmioFuncs(vgaHWPtr hwp, CARD8 *base, int offset);
186 extern _X_EXPORT void vgaHWProtect(ScrnInfoPtr pScrn, Bool on);
187 extern _X_EXPORT vgaHWProtectProc *vgaHWProtectWeak(void);
188 extern _X_EXPORT Bool vgaHWSaveScreen(ScreenPtr pScreen, int mode);
189 extern _X_EXPORT void vgaHWBlankScreen(ScrnInfoPtr pScrn, Bool on);
190 extern _X_EXPORT vgaHWBlankScreenProc *vgaHWBlankScreenWeak(void);
191 extern _X_EXPORT void vgaHWSeqReset(vgaHWPtr hwp, Bool start);
192 extern _X_EXPORT void vgaHWRestoreFonts(ScrnInfoPtr scrninfp,
193 vgaRegPtr restore);
194 extern _X_EXPORT void vgaHWRestoreMode(ScrnInfoPtr scrninfp, vgaRegPtr restore);
195 extern _X_EXPORT void vgaHWRestoreColormap(ScrnInfoPtr scrninfp,
196 vgaRegPtr restore);
197 extern _X_EXPORT void vgaHWRestore(ScrnInfoPtr scrninfp, vgaRegPtr restore,
198 int flags);
199 extern _X_EXPORT void vgaHWSaveFonts(ScrnInfoPtr scrninfp, vgaRegPtr save);
200 extern _X_EXPORT void vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save);
201 extern _X_EXPORT void vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save);
202 extern _X_EXPORT void vgaHWSave(ScrnInfoPtr scrninfp, vgaRegPtr save,
203 int flags);
204 extern _X_EXPORT Bool vgaHWInit(ScrnInfoPtr scrnp, DisplayModePtr mode);
205 extern _X_EXPORT Bool vgaHWSetRegCounts(ScrnInfoPtr scrp, int numCRTC,
206 int numSequencer, int numGraphics,
207 int numAttribute);
208 extern _X_EXPORT Bool vgaHWCopyReg(vgaRegPtr dst, vgaRegPtr src);
209 extern _X_EXPORT Bool vgaHWGetHWRec(ScrnInfoPtr scrp);
210 extern _X_EXPORT void vgaHWFreeHWRec(ScrnInfoPtr scrp);
211 extern _X_EXPORT Bool vgaHWMapMem(ScrnInfoPtr scrp);
212 extern _X_EXPORT void vgaHWUnmapMem(ScrnInfoPtr scrp);
213 extern _X_EXPORT void vgaHWGetIOBase(vgaHWPtr hwp);
214 extern _X_EXPORT void vgaHWLock(vgaHWPtr hwp);
215 extern _X_EXPORT void vgaHWUnlock(vgaHWPtr hwp);
216 extern _X_EXPORT void vgaHWEnable(vgaHWPtr hwp);
217 extern _X_EXPORT void vgaHWDisable(vgaHWPtr hwp);
218 extern _X_EXPORT void vgaHWDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode,
219 int flags);
220 extern _X_EXPORT Bool vgaHWHandleColormaps(ScreenPtr pScreen);
221 extern _X_EXPORT void vgaHWddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed);
222 extern _X_EXPORT CARD32 vgaHWHBlankKGA(DisplayModePtr mode, vgaRegPtr regp,
223 int nBits, unsigned int Flags);
224 extern _X_EXPORT CARD32 vgaHWVBlankKGA(DisplayModePtr mode, vgaRegPtr regp,
225 int nBits, unsigned int Flags);
226 extern _X_EXPORT Bool vgaHWAllocDefaultRegs(vgaRegPtr regp);
227
228 extern _X_EXPORT DDC1SetSpeedProc vgaHWddc1SetSpeedWeak(void);
229 extern _X_EXPORT SaveScreenProcPtr vgaHWSaveScreenWeak(void);
230 extern _X_EXPORT void xf86GetClocks(ScrnInfoPtr pScrn, int num,
231 Bool (*ClockFunc) (ScrnInfoPtr, int),
232 void (*ProtectRegs) (ScrnInfoPtr, Bool),
233 void (*BlankScreen) (ScrnInfoPtr, Bool),
234 unsigned long vertsyncreg, int maskval,
235 int knownclkindex, int knownclkvalue);
236
237 #endif /* _VGAHW_H */