1 /* gamma_drv.h -- Private header for 3dlabs GMX 2000 driver -*- linux-c -*-
2  * Created: Mon Jan  4 10:05:05 1999 by faith@precisioninsight.com
3  *
4  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
5  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
6  * All rights reserved.
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation
11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  * and/or sell copies of the Software, and to permit persons to whom the
13  * Software is furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice (including the next
16  * paragraph) shall be included in all copies or substantial portions of the
17  * Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22  * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25  * DEALINGS IN THE SOFTWARE.
26  *
27  * Authors:
28  *    Rickard E. (Rik) Faith <faith@valinux.com>
29  *
30  */
31 
32 #ifndef _GAMMA_DRV_H_
33 #define _GAMMA_DRV_H_
34 
35 typedef struct drm_gamma_private {
36 	drm_gamma_sarea_t *sarea_priv;
37 	drm_map_t *sarea;
38 	drm_map_t *buffers;
39 	drm_map_t *mmio0;
40 	drm_map_t *mmio1;
41 	drm_map_t *mmio2;
42 	drm_map_t *mmio3;
43 } drm_gamma_private_t;
44 
45 #define LOCK_TEST_WITH_RETURN( dev )					\
46 do {									\
47 	if ( !_DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ) ||		\
48 	     dev->lock.pid != current->pid ) {				\
49 		DRM_ERROR( "%s called without lock held\n",		\
50 			   __FUNCTION__ );				\
51 		return -EINVAL;						\
52 	}								\
53 } while (0)
54 
55 				/* gamma_dma.c */
56 extern int gamma_dma_init( struct inode *inode, struct file *filp,
57 			 unsigned int cmd, unsigned long arg );
58 extern int gamma_dma_copy( struct inode *inode, struct file *filp,
59 			 unsigned int cmd, unsigned long arg );
60 
61 extern void gamma_dma_ready(drm_device_t *dev);
62 extern void gamma_dma_quiescent_single(drm_device_t *dev);
63 extern void gamma_dma_quiescent_dual(drm_device_t *dev);
64 
65 				/* gamma_dma.c */
66 extern int  gamma_dma_schedule(drm_device_t *dev, int locked);
67 extern int  gamma_dma(struct inode *inode, struct file *filp,
68 		      unsigned int cmd, unsigned long arg);
69 extern int  gamma_find_devices(void);
70 extern int  gamma_found(void);
71 
72 #define GLINT_DRI_BUF_COUNT 256
73 
74 #define GAMMA_OFF(reg)						   \
75 	((reg < 0x1000)						   \
76 	 ? reg							   \
77 	 : ((reg < 0x10000)					   \
78 	    ? (reg - 0x1000)					   \
79 	    : ((reg < 0x11000)					   \
80 	       ? (reg - 0x10000)				   \
81 	       : (reg - 0x11000))))
82 
83 #define GAMMA_BASE(reg)	 ((unsigned long)				     \
84 			  ((reg < 0x1000)    ? dev_priv->mmio0->handle :     \
85 			   ((reg < 0x10000)  ? dev_priv->mmio1->handle :     \
86 			    ((reg < 0x11000) ? dev_priv->mmio2->handle :     \
87 					       dev_priv->mmio3->handle))))
88 #define GAMMA_ADDR(reg)	 (GAMMA_BASE(reg) + GAMMA_OFF(reg))
89 #define GAMMA_DEREF(reg) *(__volatile__ int *)GAMMA_ADDR(reg)
90 #define GAMMA_READ(reg)	 GAMMA_DEREF(reg)
91 #define GAMMA_WRITE(reg,val) do { GAMMA_DEREF(reg) = val; } while (0)
92 
93 #define GAMMA_BROADCASTMASK    0x9378
94 #define GAMMA_COMMANDINTENABLE 0x0c48
95 #define GAMMA_DMAADDRESS       0x0028
96 #define GAMMA_DMACOUNT	       0x0030
97 #define GAMMA_FILTERMODE       0x8c00
98 #define GAMMA_GCOMMANDINTFLAGS 0x0c50
99 #define GAMMA_GCOMMANDMODE     0x0c40
100 #define		GAMMA_QUEUED_DMA_MODE		1<<1
101 #define GAMMA_GCOMMANDSTATUS   0x0c60
102 #define GAMMA_GDELAYTIMER      0x0c38
103 #define GAMMA_GDMACONTROL      0x0060
104 #define 	GAMMA_USE_AGP			1<<1
105 #define GAMMA_GINTENABLE       0x0808
106 #define GAMMA_GINTFLAGS	       0x0810
107 #define GAMMA_INFIFOSPACE      0x0018
108 #define GAMMA_OUTFIFOWORDS     0x0020
109 #define GAMMA_OUTPUTFIFO       0x2000
110 #define GAMMA_SYNC	       0x8c40
111 #define GAMMA_SYNC_TAG	       0x0188
112 #define GAMMA_PAGETABLEADDR    0x0C00
113 #define GAMMA_PAGETABLELENGTH  0x0C08
114 
115 #define GAMMA_PASSTHROUGH	0x1FE
116 #define GAMMA_DMAADDRTAG	0x530
117 #define GAMMA_DMACOUNTTAG	0x531
118 #define GAMMA_COMMANDINTTAG	0x532
119 
120 #endif
121