⛏️ index : haiku.git

/*
	Haiku S3 Virge driver adapted from the X.org S3 Virge driver.

	Copyright (C) 1994-1999 The XFree86 Project, Inc.  All Rights Reserved.

	Copyright 2007-2008 Haiku, Inc.  All rights reserved.
	Distributed under the terms of the MIT license.

	Authors:
	Gerald Zajac 2007-2008
*/


#ifndef __VIRGE_H__
#define __VIRGE_H__



#define CURSOR_BYTES	1024		// bytes used for cursor image in video memory

// Miscellaneous registers.
#define SUBSYS_STAT_REG		0x8504
#define SYSTEM_CONTROL_REG	0x83DA
#define DDC_REG				0xFF20

// Memory port controller registers.
#define FIFO_CONTROL_REG	0x8200

// Image write stuff.
#define SRC_BASE		0xA4D4
#define DEST_BASE		0xA4D8
#define CLIP_L_R		0xA4DC
#define CLIP_T_B		0xA4E0
#define DEST_SRC_STR	0xA4E4
#define MONO_PAT_0		0xA4E8
#define MONO_PAT_1		0xA4EC
#define PAT_BG_CLR		0xA4F0
#define PAT_FG_CLR		0xA4F4
#define CMD_SET			0xA500
#define RWIDTH_HEIGHT	0xA504
#define RSRC_XY			0xA508
#define RDEST_XY		0xA50C

// Command Register.
#define	CMD_OP_MSK		(0xf << 27)
#define	CMD_BITBLT		(0x0 << 27)
#define	CMD_RECT		((0x2 << 27) | 0x0100)
#define	CMD_LINE		(0x3 << 27)
#define	CMD_POLYFILL	(0x5 << 27)
#define	CMD_NOP			(0xf << 27)

#define	DRAW		0x0020

// Destination Color Format.
#define DST_8BPP	0x00
#define DST_16BPP	0x04
#define DST_24BPP	0x08

// X Positive, Y Positive (Bit BLT).
#define CMD_XP		0x02000000
#define CMD_YP		0x04000000


#define IN_SUBSYS_STAT() (ReadReg32(SUBSYS_STAT_REG))


static inline void VerticalRetraceWait()
{
	if (ReadCrtcReg(0x17) & 0x80) {
		int i = 0x10000;
		while ((ReadReg8(SYSTEM_CONTROL_REG) & 0x08) == 0x08 && i--) ;
		i = 0x10000;
		while ((ReadReg8(SYSTEM_CONTROL_REG) & 0x08) == 0x00 && i--) ;
	}
}


#endif // __VIRGE_H__