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 */
|
---|