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 void *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 void *FontInfo1; /* save area for fonts in 118 plane 2 */ 119 void *FontInfo2; /* save area for fonts in 120 plane 3 */ 121 void *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 void *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 */ 238