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