#ifndef _VGAHW_H
#define _VGAHW_H
#include <X11/X.h>
#include "misc.h"
#include "input.h"
#include "scrnintstr.h"
#include "colormapst.h"
#include "xf86str.h"
#include "xf86Pci.h"
#include "xf86DDC.h"
#include "globals.h"
#define DPMS_SERVER
#include <X11/extensions/dpms.h>
extern int vgaHWGetIndex(void);
#define VGAHWPTR(p) ((vgaHWPtr)((p)->privates[vgaHWGetIndex()].ptr))
#define VGA_ATTR_INDEX 0x3C0
#define VGA_ATTR_DATA_W 0x3C0
#define VGA_ATTR_DATA_R 0x3C1
#define VGA_IN_STAT_0 0x3C2
#define VGA_MISC_OUT_W 0x3C2
#define VGA_ENABLE 0x3C3
#define VGA_SEQ_INDEX 0x3C4
#define VGA_SEQ_DATA 0x3C5
#define VGA_DAC_MASK 0x3C6
#define VGA_DAC_READ_ADDR 0x3C7
#define VGA_DAC_WRITE_ADDR 0x3C8
#define VGA_DAC_DATA 0x3C9
#define VGA_FEATURE_R 0x3CA
#define VGA_MISC_OUT_R 0x3CC
#define VGA_GRAPH_INDEX 0x3CE
#define VGA_GRAPH_DATA 0x3CF
#define VGA_IOBASE_MONO 0x3B0
#define VGA_IOBASE_COLOR 0x3D0
#define VGA_CRTC_INDEX_OFFSET 0x04
#define VGA_CRTC_DATA_OFFSET 0x05
#define VGA_IN_STAT_1_OFFSET 0x0A
#define VGA_FEATURE_W_OFFSET 0x0A
#define VGA_NUM_CRTC 25
#define VGA_NUM_SEQ 5
#define VGA_NUM_GFX 9
#define VGA_NUM_ATTR 21
#define VGA_SR_MODE 0x01
#define VGA_SR_FONTS 0x02
#define VGA_SR_CMAP 0x04
#define VGA_SR_ALL (VGA_SR_MODE | VGA_SR_FONTS | VGA_SR_CMAP)
#define VGA_DEFAULT_PHYS_ADDR 0xA0000
#define VGA_DEFAULT_MEM_SIZE (64 * 1024)
typedef struct {
unsigned char MiscOutReg;
unsigned char *CRTC;
unsigned char *Sequencer;
unsigned char *Graphics;
unsigned char *Attribute;
unsigned char DAC[768];
unsigned char numCRTC;
unsigned char numSequencer;
unsigned char numGraphics;
unsigned char numAttribute;
} vgaRegRec, *vgaRegPtr;
typedef struct _vgaHWRec *vgaHWPtr;
typedef void (*vgaHWWriteIndexProcPtr)(vgaHWPtr hwp, CARD8 indx, CARD8 value);
typedef CARD8 (*vgaHWReadIndexProcPtr)(vgaHWPtr hwp, CARD8 indx);
typedef void (*vgaHWWriteProcPtr)(vgaHWPtr hwp, CARD8 value);
typedef CARD8 (*vgaHWReadProcPtr)(vgaHWPtr hwp);
typedef void (*vgaHWMiscProcPtr)(vgaHWPtr hwp);
typedef struct _vgaHWRec {
pointer Base;
int MapSize;
unsigned long MapPhys;
int IOBase;
CARD8 * MMIOBase;
int MMIOOffset;
pointer FontInfo1;
pointer FontInfo2;
pointer TextInfo;
vgaRegRec SavedReg;
vgaRegRec ModeReg;
Bool ShowOverscan;
Bool paletteEnabled;
Bool cmapSaved;
ScrnInfoPtr pScrn;
vgaHWWriteIndexProcPtr writeCrtc;
vgaHWReadIndexProcPtr readCrtc;
vgaHWWriteIndexProcPtr writeGr;
vgaHWReadIndexProcPtr readGr;
vgaHWReadProcPtr readST00;
vgaHWReadProcPtr readST01;
vgaHWReadProcPtr readFCR;
vgaHWWriteProcPtr writeFCR;
vgaHWWriteIndexProcPtr writeAttr;
vgaHWReadIndexProcPtr readAttr;
vgaHWWriteIndexProcPtr writeSeq;
vgaHWReadIndexProcPtr readSeq;
vgaHWWriteProcPtr writeMiscOut;
vgaHWReadProcPtr readMiscOut;
vgaHWMiscProcPtr enablePalette;
vgaHWMiscProcPtr disablePalette;
vgaHWWriteProcPtr writeDacMask;
vgaHWReadProcPtr readDacMask;
vgaHWWriteProcPtr writeDacWriteAddr;
vgaHWWriteProcPtr writeDacReadAddr;
vgaHWWriteProcPtr writeDacData;
vgaHWReadProcPtr readDacData;
pointer ddc;
IOADDRESS PIOOffset;
vgaHWReadProcPtr readEnable;
vgaHWWriteProcPtr writeEnable;
PCITAG Tag;
} vgaHWRec;
#define VGAHW_GET_IOBASE() ((inb(VGA_MISC_OUT_R) & 0x01) ? \
VGA_IOBASE_COLOR : VGA_IOBASE_MONO)
#define OVERSCAN 0x11
#define KGA_FIX_OVERSCAN 1
#define KGA_ENABLE_ON_ZERO 2
#define KGA_BE_TOT_DEC 4
#define BIT_PLANE 3
#define BITS_PER_GUN 6
#define COLORMAP_SIZE 256
#if defined(__powerpc__) || defined(__arm__) || defined(__s390__)
#define DACDelay(hw)
#else
#define DACDelay(hw) \
do { \
(void)inb((hw)->PIOOffset + (hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
(void)inb((hw)->PIOOffset + (hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
} while (0)
#endif
typedef void vgaHWProtectProc(ScrnInfoPtr, Bool);
typedef void vgaHWBlankScreenProc(ScrnInfoPtr, Bool);
void vgaHWSetStdFuncs(vgaHWPtr hwp);
void vgaHWSetMmioFuncs(vgaHWPtr hwp, CARD8 *base, int offset);
void vgaHWProtect(ScrnInfoPtr pScrn, Bool on);
vgaHWProtectProc *vgaHWProtectWeak(void);
Bool vgaHWSaveScreen(ScreenPtr pScreen, int mode);
void vgaHWBlankScreen(ScrnInfoPtr pScrn, Bool on);
vgaHWBlankScreenProc *vgaHWBlankScreenWeak(void);
void vgaHWSeqReset(vgaHWPtr hwp, Bool start);
void vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore);
void vgaHWRestoreMode(ScrnInfoPtr scrninfp, vgaRegPtr restore);
void vgaHWRestoreColormap(ScrnInfoPtr scrninfp, vgaRegPtr restore);
void vgaHWRestore(ScrnInfoPtr scrninfp, vgaRegPtr restore, int flags);
void vgaHWSaveFonts(ScrnInfoPtr scrninfp, vgaRegPtr save);
void vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save);
void vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save);
void vgaHWSave(ScrnInfoPtr scrninfp, vgaRegPtr save, int flags);
Bool vgaHWInit(ScrnInfoPtr scrnp, DisplayModePtr mode);
Bool vgaHWSetRegCounts(ScrnInfoPtr scrp, int numCRTC, int numSequencer,
int numGraphics, int numAttribute);
Bool vgaHWCopyReg(vgaRegPtr dst, vgaRegPtr src);
Bool vgaHWGetHWRec(ScrnInfoPtr scrp);
void vgaHWFreeHWRec(ScrnInfoPtr scrp);
Bool vgaHWMapMem(ScrnInfoPtr scrp);
void vgaHWUnmapMem(ScrnInfoPtr scrp);
void vgaHWGetIOBase(vgaHWPtr hwp);
void vgaHWLock(vgaHWPtr hwp);
void vgaHWUnlock(vgaHWPtr hwp);
void vgaHWEnable(vgaHWPtr hwp);
void vgaHWDisable(vgaHWPtr hwp);
void vgaHWDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
Bool vgaHWHandleColormaps(ScreenPtr pScreen);
void vgaHWddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed);
CARD32 vgaHWHBlankKGA(DisplayModePtr mode, vgaRegPtr regp, int nBits,
unsigned int Flags);
CARD32 vgaHWVBlankKGA(DisplayModePtr mode, vgaRegPtr regp, int nBits,
unsigned int Flags);
Bool vgaHWAllocDefaultRegs(vgaRegPtr regp);
DDC1SetSpeedProc vgaHWddc1SetSpeedWeak(void);
SaveScreenProcPtr vgaHWSaveScreenWeak(void);
#endif