⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r128_drv.h

📁 h内核
💻 H
📖 第 1 页 / 共 2 页
字号:
#define R128_SETUP_CNTL			0x1bc4#define R128_STEN_REF_MASK_C		0x1d40#define R128_TEX_CNTL_C			0x1c9c#	define R128_TEX_CACHE_FLUSH		(1 << 23)#define R128_WAIT_UNTIL			0x1720#	define R128_EVENT_CRTC_OFFSET		(1 << 0)#define R128_WINDOW_XY_OFFSET		0x1bcc/* CCE registers */#define R128_PM4_BUFFER_OFFSET		0x0700#define R128_PM4_BUFFER_CNTL		0x0704#	define R128_PM4_MASK			(15 << 28)#	define R128_PM4_NONPM4			(0  << 28)#	define R128_PM4_192PIO			(1  << 28)#	define R128_PM4_192BM			(2  << 28)#	define R128_PM4_128PIO_64INDBM		(3  << 28)#	define R128_PM4_128BM_64INDBM		(4  << 28)#	define R128_PM4_64PIO_128INDBM		(5  << 28)#	define R128_PM4_64BM_128INDBM		(6  << 28)#	define R128_PM4_64PIO_64VCBM_64INDBM	(7  << 28)#	define R128_PM4_64BM_64VCBM_64INDBM	(8  << 28)#	define R128_PM4_64PIO_64VCPIO_64INDPIO	(15 << 28)#	define R128_PM4_BUFFER_CNTL_NOUPDATE	(1  << 27)#define R128_PM4_BUFFER_WM_CNTL		0x0708#	define R128_WMA_SHIFT			0#	define R128_WMB_SHIFT			8#	define R128_WMC_SHIFT			16#	define R128_WB_WM_SHIFT			24#define R128_PM4_BUFFER_DL_RPTR_ADDR	0x070c#define R128_PM4_BUFFER_DL_RPTR		0x0710#define R128_PM4_BUFFER_DL_WPTR		0x0714#	define R128_PM4_BUFFER_DL_DONE		(1 << 31)#define R128_PM4_VC_FPU_SETUP		0x071c#define R128_PM4_IW_INDOFF		0x0738#define R128_PM4_IW_INDSIZE		0x073c#define R128_PM4_STAT			0x07b8#	define R128_PM4_FIFOCNT_MASK		0x0fff#	define R128_PM4_BUSY			(1 << 16)#	define R128_PM4_GUI_ACTIVE		(1 << 31)#define R128_PM4_MICROCODE_ADDR		0x07d4#define R128_PM4_MICROCODE_RADDR	0x07d8#define R128_PM4_MICROCODE_DATAH	0x07dc#define R128_PM4_MICROCODE_DATAL	0x07e0#define R128_PM4_BUFFER_ADDR		0x07f0#define R128_PM4_MICRO_CNTL		0x07fc#	define R128_PM4_MICRO_FREERUN		(1 << 30)#define R128_PM4_FIFO_DATA_EVEN		0x1000#define R128_PM4_FIFO_DATA_ODD		0x1004/* CCE command packets */#define R128_CCE_PACKET0		0x00000000#define R128_CCE_PACKET1		0x40000000#define R128_CCE_PACKET2		0x80000000#define R128_CCE_PACKET3		0xC0000000#	define R128_CNTL_HOSTDATA_BLT		0x00009400#	define R128_CNTL_PAINT_MULTI		0x00009A00#	define R128_CNTL_BITBLT_MULTI		0x00009B00#	define R128_3D_RNDR_GEN_INDX_PRIM	0x00002300#define R128_CCE_PACKET_MASK		0xC0000000#define R128_CCE_PACKET_COUNT_MASK	0x3fff0000#define R128_CCE_PACKET0_REG_MASK	0x000007ff#define R128_CCE_PACKET1_REG0_MASK	0x000007ff#define R128_CCE_PACKET1_REG1_MASK	0x003ff800#define R128_CCE_VC_CNTL_PRIM_TYPE_NONE		0x00000000#define R128_CCE_VC_CNTL_PRIM_TYPE_POINT	0x00000001#define R128_CCE_VC_CNTL_PRIM_TYPE_LINE		0x00000002#define R128_CCE_VC_CNTL_PRIM_TYPE_POLY_LINE	0x00000003#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST	0x00000004#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_FAN	0x00000005#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_STRIP	0x00000006#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2	0x00000007#define R128_CCE_VC_CNTL_PRIM_WALK_IND		0x00000010#define R128_CCE_VC_CNTL_PRIM_WALK_LIST		0x00000020#define R128_CCE_VC_CNTL_PRIM_WALK_RING		0x00000030#define R128_CCE_VC_CNTL_NUM_SHIFT		16#define R128_DATATYPE_VQ		0#define R128_DATATYPE_CI4		1#define R128_DATATYPE_CI8		2#define R128_DATATYPE_ARGB1555		3#define R128_DATATYPE_RGB565		4#define R128_DATATYPE_RGB888		5#define R128_DATATYPE_ARGB8888		6#define R128_DATATYPE_RGB332		7#define R128_DATATYPE_Y8		8#define R128_DATATYPE_RGB8		9#define R128_DATATYPE_CI16		10#define R128_DATATYPE_YVYU422		11#define R128_DATATYPE_VYUY422		12#define R128_DATATYPE_AYUV444		14#define R128_DATATYPE_ARGB4444		15/* Constants */#define R128_AGP_OFFSET			0x02000000#define R128_WATERMARK_L		16#define R128_WATERMARK_M		8#define R128_WATERMARK_N		8#define R128_WATERMARK_K		128#define R128_MAX_USEC_TIMEOUT		100000	/* 100 ms */#define R128_LAST_FRAME_REG		R128_GUI_SCRATCH_REG0#define R128_LAST_DISPATCH_REG		R128_GUI_SCRATCH_REG1#define R128_MAX_VB_AGE			0x7fffffff#define R128_MAX_VB_VERTS		(0xffff)#define R128_RING_HIGH_MARK		128#define R128_PERFORMANCE_BOXES		0#define R128_READ(reg)		DRM_READ32(  dev_priv->mmio, (reg) )#define R128_WRITE(reg,val)	DRM_WRITE32( dev_priv->mmio, (reg), (val) )#define R128_READ8(reg)		DRM_READ8(   dev_priv->mmio, (reg) )#define R128_WRITE8(reg,val)	DRM_WRITE8(  dev_priv->mmio, (reg), (val) )#define R128_WRITE_PLL(addr,val)					\do {									\	R128_WRITE8(R128_CLOCK_CNTL_INDEX,				\		    ((addr) & 0x1f) | R128_PLL_WR_EN);			\	R128_WRITE(R128_CLOCK_CNTL_DATA, (val));			\} while (0)extern int R128_READ_PLL(drm_device_t *dev, int addr);#define CCE_PACKET0( reg, n )		(R128_CCE_PACKET0 |		\					 ((n) << 16) | ((reg) >> 2))#define CCE_PACKET1( reg0, reg1 )	(R128_CCE_PACKET1 |		\					 (((reg1) >> 2) << 11) | ((reg0) >> 2))#define CCE_PACKET2()			(R128_CCE_PACKET2)#define CCE_PACKET3( pkt, n )		(R128_CCE_PACKET3 |		\					 (pkt) | ((n) << 16))static __inline__ voidr128_update_ring_snapshot( drm_r128_private_t *dev_priv ){	drm_r128_ring_buffer_t *ring = &dev_priv->ring;	ring->space = (GET_RING_HEAD( dev_priv ) - ring->tail) * sizeof(u32);	if ( ring->space <= 0 )		ring->space += ring->size;}/* ================================================================ * Misc helper macros */#define RING_SPACE_TEST_WITH_RETURN( dev_priv )				\do {									\	drm_r128_ring_buffer_t *ring = &dev_priv->ring; int i;		\	if ( ring->space < ring->high_mark ) {				\		for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {	\			r128_update_ring_snapshot( dev_priv );		\			if ( ring->space >= ring->high_mark )		\				goto __ring_space_done;			\			DRM_UDELAY(1);				\		}							\		DRM_ERROR( "ring space check failed!\n" );		\		return DRM_ERR(EBUSY);				\	}								\ __ring_space_done:							\	;								\} while (0)#define VB_AGE_TEST_WITH_RETURN( dev_priv )				\do {									\	drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;		\	if ( sarea_priv->last_dispatch >= R128_MAX_VB_AGE ) {		\		int __ret = r128_do_cce_idle( dev_priv );		\		if ( __ret ) return __ret;				\		sarea_priv->last_dispatch = 0;				\		r128_freelist_reset( dev );				\	}								\} while (0)#define R128_WAIT_UNTIL_PAGE_FLIPPED() do {				\	OUT_RING( CCE_PACKET0( R128_WAIT_UNTIL, 0 ) );			\	OUT_RING( R128_EVENT_CRTC_OFFSET );				\} while (0)/* ================================================================ * Ring control */#define R128_VERBOSE	0#define RING_LOCALS							\	int write, _nr; unsigned int tail_mask; volatile u32 *ring;#define BEGIN_RING( n ) do {						\	if ( R128_VERBOSE ) {						\		DRM_INFO( "BEGIN_RING( %d ) in %s\n",			\			   (n), __FUNCTION__ );				\	}								\	if ( dev_priv->ring.space <= (n) * sizeof(u32) ) {		\		COMMIT_RING();						\		r128_wait_ring( dev_priv, (n) * sizeof(u32) );		\	}								\	_nr = n; dev_priv->ring.space -= (n) * sizeof(u32);		\	ring = dev_priv->ring.start;					\	write = dev_priv->ring.tail;					\	tail_mask = dev_priv->ring.tail_mask;				\} while (0)/* You can set this to zero if you want.  If the card locks up, you'll * need to keep this set.  It works around a bug in early revs of the * Rage 128 chipset, where the CCE would read 32 dwords past the end of * the ring buffer before wrapping around. */#define R128_BROKEN_CCE	1#define ADVANCE_RING() do {						\	if ( R128_VERBOSE ) {						\		DRM_INFO( "ADVANCE_RING() wr=0x%06x tail=0x%06x\n",	\			  write, dev_priv->ring.tail );			\	}								\	if ( R128_BROKEN_CCE && write < 32 ) {				\		memcpy( dev_priv->ring.end,				\			dev_priv->ring.start,				\			write * sizeof(u32) );				\	}								\	if (((dev_priv->ring.tail + _nr) & tail_mask) != write) {	\		DRM_ERROR( 						\			"ADVANCE_RING(): mismatch: nr: %x write: %x line: %d\n",	\			((dev_priv->ring.tail + _nr) & tail_mask),	\			write, __LINE__);				\	} else								\		dev_priv->ring.tail = write;				\} while (0)#define COMMIT_RING() do {						\	if ( R128_VERBOSE ) {						\		DRM_INFO( "COMMIT_RING() tail=0x%06x\n",		\			dev_priv->ring.tail );				\	}								\	DRM_MEMORYBARRIER();						\	R128_WRITE( R128_PM4_BUFFER_DL_WPTR, dev_priv->ring.tail );	\	R128_READ( R128_PM4_BUFFER_DL_WPTR );				\} while (0)#define OUT_RING( x ) do {						\	if ( R128_VERBOSE ) {						\		DRM_INFO( "   OUT_RING( 0x%08x ) at 0x%x\n",		\			   (unsigned int)(x), write );			\	}								\	ring[write++] = cpu_to_le32( x );				\	write &= tail_mask;						\} while (0)#endif /* __R128_DRV_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -