root/src/add-ons/accelerants/s3/register_io.h
/*
        Copyright 2008 Haiku, Inc.  All rights reserved.
        Distributed under the terms of the MIT license.

        Authors:
        Gerald Zajac 2008
*/

#ifndef __REGISTER_IO_H__
#define __REGISTER_IO_H__


// PIO address of various VGA registers.  If accessing these registers using
// MMIO, add 0x8000 to thses addresses.

#define VGA_ENABLE              0x3c3
#define MISC_OUT_R              0x3cc           // read
#define MISC_OUT_W              0x3c2           // write
#define CRTC_INDEX              0x3d4
#define CRTC_DATA               0x3d5
#define SEQ_INDEX               0x3c4
#define SEQ_DATA                0x3c5


// Prototypes of I/O functions for accessing registers using PIO.

uint32  ReadPIO(uint32 addr, uint8 numBytes);
void    WritePIO(uint32 addr, uint8 numBytes, uint32 value);

inline uint8 ReadPIO_8(uint32 addr)     { return ReadPIO(addr, 1); }
inline void WritePIO_8(uint32 addr, uint8 value) { WritePIO(addr, 1, value); }


// Prototypes of I/O functions for accessing registers using PIO or MMIO
// depending upon the type of S3 chip.

uint8  ReadReg8(uint32 addr);
uint16 ReadReg16(uint32 addr);
uint32 ReadReg32(uint32 addr);

void   WriteReg8(uint32 addr, uint8 value);
void   WriteReg16(uint32 addr, uint16 value);
void   WriteReg32(uint32 addr, uint32 value);

uint8  ReadCrtcReg(uint8 index);
void   WriteCrtcReg(uint8 index, uint8 value);
void   WriteCrtcReg(uint8 index, uint8 value, uint8 mask);

uint8  ReadSeqReg(uint8 index);
void   WriteSeqReg(uint8 index, uint8 value);
void   WriteSeqReg(uint8 index, uint8 value, uint8 mask);

uint8  ReadMiscOutReg();
void   WriteMiscOutReg(uint8 value);

void   WriteIndexedColor(uint8 index, uint8 red, uint8 green, uint8 blue);


#endif // __REGISTER_IO_H__