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