#ifndef _VGA_H_
#define _VGA_H_
typedef unsigned long VGA32;
typedef unsigned short VGA16;
typedef unsigned char VGA8;
typedef int VGABOOL;
typedef volatile VGA8 VGAVOL8;
#define VGATRUE 1
#define VGAFALSE 0
typedef struct _vgaReg {
VGA16 id;
VGA8 base;
VGA8 len;
} VgaReg;
#define VGA_REG_NONE 0xffff
#define VGA_REG_END VGA_REG_NONE, 0, 0
typedef struct _vgaValue {
VGA8 save;
VGA8 cur;
VGA16 flags;
} VgaValue;
#define VGA_VALUE_VALID 1
#define VGA_VALUE_MODIFIED 2
#define VGA_VALUE_DIRTY 4
#define VGA_VALUE_SAVED 8
typedef enum _vgaAccess {
VgaAccessMem, VgaAccessIo, VgaAccessIndMem, VgaAccessIndIo,
VgaAccessDone
} VgaAccess;
typedef struct _vgaMap {
VgaAccess access;
VGA32 port;
VGA8 addr;
VGA8 value;
VGA8 index;
} VgaMap;
#define VGA_UNLOCK_FIXED 1
#define VGA_UNLOCK_LOCK 2
#define VGA_UNLOCK_UNLOCK 4
typedef struct _vgaSave {
VGA16 first;
VGA16 last;
} VgaSave;
#define VGA_SAVE_END VGA_REG_NONE, VGA_REG_NONE
typedef struct _vgaCard {
void (*map) (struct _vgaCard *card, VGA16 reg, VgaMap *map, VGABOOL write);
void *closure;
int max;
VgaValue *values;
VgaSave *saves;
} VgaCard;
VGA8
VgaInb (VGA16 r);
void
VgaOutb (VGA8 v, VGA16 r);
VGA8
VgaReadMemb (VGA32 addr);
void
VgaWriteMemb (VGA8 v, VGA32 addr);
void
VgaSetImm (VgaCard *card, VgaReg *reg, VGA32 value);
VGA32
VgaGetImm (VgaCard *card, VgaReg *reg);
void
VgaSet (VgaCard *card, VgaReg *reg, VGA32 value);
VGA32
VgaGet (VgaCard *card, VgaReg *reg);
void
VgaFlush (VgaCard *card);
void
VgaFill (VgaCard *card, VGA16 low, VGA16 high);
void
VgaPreserve (VgaCard *card);
void
VgaInvalidate (VgaCard *card);
void
VgaRestore (VgaCard *card);
void
VgaFinish (VgaCard *card);
void
VgaFlushReg (VgaCard *card, VgaReg *reg);
VGA8
VgaFetch (VgaCard *card, VGA16 id);
void
VgaStore (VgaCard *card, VGA16 id, VGA8 value);
VGA8
_VgaFetchInd (VGA16 port, VGA8 reg);
void
_VgaStoreInd (VGA16 port, VGA8 reg, VGA8 value);
#endif