12b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* r128_drm.h -- Public header for the r128 driver -*- linux-c -*-
22b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Created: Wed Apr  5 19:24:19 2000 by kevin@precisioninsight.com
32b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
42b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/*
52b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
62b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
72b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * All rights reserved.
82b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
92b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Permission is hereby granted, free of charge, to any person obtaining a
102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * copy of this software and associated documentation files (the "Software"),
112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * to deal in the Software without restriction, including without limitation
122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * and/or sell copies of the Software, and to permit persons to whom the
142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Software is furnished to do so, subject to the following conditions:
152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * The above copyright notice and this permission notice (including the next
172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * paragraph) shall be included in all copies or substantial portions of the
182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Software.
192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * DEALINGS IN THE SOFTWARE.
272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *
282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Authors:
292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    Gareth Hughes <gareth@valinux.com>
302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *    Kevin E. Martin <martin@valinux.com>
312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#ifndef __R128_DRM_H__
342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define __R128_DRM_H__
352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* WARNING: If you change any of these defines, make sure to change the
372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * defines in the X server file (r128_sarea.h)
382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#ifndef __R128_SAREA_DEFINES__
402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define __R128_SAREA_DEFINES__
412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* What needs to be changed for the current vertex buffer?
432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_CONTEXT		0x001
452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_SETUP		0x002
462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_TEX0		0x004
472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_TEX1		0x008
482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_TEX0IMAGES		0x010
492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_TEX1IMAGES		0x020
502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_CORE		0x040
512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_MASKS		0x080
522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_WINDOW		0x100
532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_CLIPRECTS		0x200	/* handled client-side */
542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_REQUIRE_QUIESCENCE		0x400
552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_UPLOAD_ALL			0x7ff
562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_FRONT			0x1
582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_BACK			0x2
592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_DEPTH			0x4
602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Primitive types
622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_POINTS			0x1
642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_LINES			0x2
652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_LINE_STRIP			0x3
662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_TRIANGLES			0x4
672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_TRIANGLE_FAN		0x5
682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_TRIANGLE_STRIP		0x6
692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Vertex/indirect buffer size
712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_BUFFER_SIZE		16384
732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Byte offsets for indirect buffer data
752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_INDEX_PRIM_OFFSET		20
772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_HOSTDATA_BLIT_OFFSET	32
782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Keep these small for testing.
802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_NR_SAREA_CLIPRECTS		12
822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* There are 2 heaps (local/AGP).  Each region within a heap is a
842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg *  minimum of 64k, and there are at most 64 of them per heap.
852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_LOCAL_TEX_HEAP		0
872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_AGP_TEX_HEAP		1
882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_NR_TEX_HEAPS		2
892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_NR_TEX_REGIONS		64
902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_LOG_TEX_GRANULARITY	16
912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_NR_CONTEXT_REGS		12
932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_MAX_TEXTURE_LEVELS		11
952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_MAX_TEXTURE_UNITS		2
962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif				/* __R128_SAREA_DEFINES__ */
982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct {
1002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Context state - can be written in one large chunk */
1012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int dst_pitch_offset_c;
1022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int dp_gui_master_cntl_c;
1032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int sc_top_left_c;
1042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int sc_bottom_right_c;
1052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int z_offset_c;
1062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int z_pitch_c;
1072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int z_sten_cntl_c;
1082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_cntl_c;
1092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int misc_3d_state_cntl_reg;
1102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int texture_clr_cmp_clr_c;
1112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int texture_clr_cmp_msk_c;
1122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int fog_color_c;
1132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Texture state */
1152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_size_pitch_c;
1162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int constant_color_c;
1172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Setup state */
1192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int pm4_vc_fpu_setup;
1202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int setup_cntl;
1212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Mask state */
1232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int dp_write_mask;
1242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int sten_ref_mask_c;
1252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int plane_3d_mask_c;
1262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Window state */
1282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int window_xy_offset;
1292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Core state */
1312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int scale_3d_cntl;
1322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_context_regs_t;
1332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Setup registers for each texture unit
1352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct {
1372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_cntl;
1382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_combine_cntl;
1392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_size_pitch;
1402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS];
1412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_border_color;
1422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_texture_regs_t;
1432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_sarea {
1452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* The channel for communication of state information to the kernel
1462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	 * on firing a vertex buffer.
1472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	 */
1482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	drm_r128_context_regs_t context_state;
1492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	drm_r128_texture_regs_t tex_state[R128_MAX_TEXTURE_UNITS];
1502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int dirty;
1512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int vertsize;
1522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int vc_format;
1532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* The current cliprects, or a subset thereof.
1552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	 */
1562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_clip_rect boxes[R128_NR_SAREA_CLIPRECTS];
1572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int nbox;
1582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	/* Counters for client-side throttling of rendering clients.
1602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	 */
1612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int last_frame;
1622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int last_dispatch;
1632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	struct drm_tex_region tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS + 1];
1652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int tex_age[R128_NR_TEX_HEAPS];
1662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int ctx_owner;
1672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int pfAllowPageFlip;	/* number of 3d windows (0,1,2 or more) */
1682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int pfCurrentPage;	/* which buffer is being displayed? */
1692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_sarea_t;
1702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* WARNING: If you change any of these defines, make sure to change the
1722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * defines in the Xserver file (xf86drmR128.h)
1732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Rage 128 specific ioctls
1762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * The device specific ioctl range is 0x40 to 0x79.
1772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
1782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_INIT       0x00
1792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_CCE_START  0x01
1802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_CCE_STOP   0x02
1812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_CCE_RESET  0x03
1822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_CCE_IDLE   0x04
1832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 0x05 not used */
1842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_RESET      0x06
1852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_SWAP       0x07
1862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_CLEAR      0x08
1872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_VERTEX     0x09
1882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_INDICES    0x0a
1892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_BLIT       0x0b
1902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_DEPTH      0x0c
1912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_STIPPLE    0x0d
1922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 0x0e not used */
1932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_INDIRECT   0x0f
1942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_FULLSCREEN 0x10
1952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_CLEAR2     0x11
1962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_GETPARAM   0x12
1972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_R128_FLIP       0x13
1982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
1992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_INIT       DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t)
2002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_CCE_START  DRM_IO(  DRM_COMMAND_BASE + DRM_R128_CCE_START)
2012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_CCE_STOP   DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t)
2022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_CCE_RESET  DRM_IO(  DRM_COMMAND_BASE + DRM_R128_CCE_RESET)
2032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_CCE_IDLE   DRM_IO(  DRM_COMMAND_BASE + DRM_R128_CCE_IDLE)
2042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 0x05 not used */
2052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_RESET      DRM_IO(  DRM_COMMAND_BASE + DRM_R128_RESET)
2062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_SWAP       DRM_IO(  DRM_COMMAND_BASE + DRM_R128_SWAP)
2072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_CLEAR      DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t)
2082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_VERTEX     DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t)
2092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_INDICES    DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t)
2102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_BLIT       DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t)
2112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_DEPTH      DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t)
2122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_STIPPLE    DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t)
2132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 0x0e not used */
2142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_INDIRECT   DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t)
2152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t)
2162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_CLEAR2     DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t)
2172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_GETPARAM   DRM_IOWR( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t)
2182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_R128_FLIP       DRM_IO(  DRM_COMMAND_BASE + DRM_R128_FLIP)
2192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_init {
2212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum {
2222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_INIT_CCE = 0x01,
2232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_CLEANUP_CCE = 0x02
2242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	} func;
2252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long sarea_priv_offset;
2262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int is_pci;
2272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int cce_mode;
2282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int cce_secure;
2292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int ring_size;
2302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int usec_timeout;
2312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int fb_bpp;
2332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int front_offset, front_pitch;
2342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int back_offset, back_pitch;
2352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int depth_bpp;
2362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int depth_offset, depth_pitch;
2372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int span_offset;
2382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long fb_offset;
2402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long mmio_offset;
2412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long ring_offset;
2422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long ring_rptr_offset;
2432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long buffers_offset;
2442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned long agp_textures_offset;
2452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_init_t;
2462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_cce_stop {
2482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int flush;
2492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idle;
2502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_cce_stop_t;
2512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_clear {
2532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int flags;
2542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int clear_color;
2552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int clear_depth;
2562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int color_mask;
2572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int depth_mask;
2582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_clear_t;
2592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_vertex {
2612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int prim;
2622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idx;		/* Index of vertex buffer */
2632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int count;		/* Number of vertices in buffer */
2642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int discard;		/* Client finished with buffer? */
2652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_vertex_t;
2662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_indices {
2682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int prim;
2692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idx;
2702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int start;
2712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int end;
2722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int discard;		/* Client finished with buffer? */
2732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_indices_t;
2742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_blit {
2762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idx;
2772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int pitch;
2782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int offset;
2792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int format;
2802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short x, y;
2812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned short width, height;
2822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_blit_t;
2832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_depth {
2852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum {
2862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_WRITE_SPAN = 0x01,
2872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_WRITE_PIXELS = 0x02,
2882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_READ_SPAN = 0x03,
2892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_READ_PIXELS = 0x04
2902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	} func;
2912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int n;
2922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *x;
2932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int *y;
2942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int *buffer;
2952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned char *mask;
2962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_depth_t;
2972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
2982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_stipple {
2992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	unsigned int *mask;
3002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_stipple_t;
3012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_indirect {
3032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int idx;
3042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int start;
3052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int end;
3062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int discard;
3072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_indirect_t;
3082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_fullscreen {
3102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	enum {
3112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_INIT_FULLSCREEN = 0x01,
3122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg		R128_CLEANUP_FULLSCREEN = 0x02
3132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	} func;
3142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_fullscreen_t;
3152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 2.3: An ioctl to get parameters that aren't available to the 3d
3172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * client any other way.
3182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */
3192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define R128_PARAM_IRQ_NR            1
3202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_r128_getparam {
3222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	int param;
3232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg	void *value;
3242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_r128_getparam_t;
3252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg
3262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif
327