ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / char / drm / gamma_drv.h
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         int num_rast;
44 } drm_gamma_private_t;
45
46                                 /* gamma_dma.c */
47 extern int gamma_dma_init( struct inode *inode, struct file *filp,
48                          unsigned int cmd, unsigned long arg );
49 extern int gamma_dma_copy( struct inode *inode, struct file *filp,
50                          unsigned int cmd, unsigned long arg );
51
52 extern int gamma_do_cleanup_dma( drm_device_t *dev );
53 extern void gamma_dma_ready(drm_device_t *dev);
54 extern void gamma_dma_quiescent_single(drm_device_t *dev);
55 extern void gamma_dma_quiescent_dual(drm_device_t *dev);
56
57                                 /* gamma_dma.c */
58 extern int  gamma_dma_schedule(drm_device_t *dev, int locked);
59 extern int  gamma_dma(struct inode *inode, struct file *filp,
60                       unsigned int cmd, unsigned long arg);
61 extern int  gamma_find_devices(void);
62 extern int  gamma_found(void);
63
64 /* Gamma-specific code pulled from drm_fops.h:
65  */
66 extern int           DRM(finish)(struct inode *inode, struct file *filp,
67                                  unsigned int cmd, unsigned long arg);
68 extern int           DRM(flush_unblock)(drm_device_t *dev, int context,
69                                         drm_lock_flags_t flags);
70 extern int           DRM(flush_block_and_flush)(drm_device_t *dev, int context,
71                                                 drm_lock_flags_t flags);
72
73 /* Gamma-specific code pulled from drm_dma.h:
74  */
75 extern void          DRM(clear_next_buffer)(drm_device_t *dev);
76 extern int           DRM(select_queue)(drm_device_t *dev,
77                                        void (*wrapper)(unsigned long));
78 extern int           DRM(dma_enqueue)(struct file *filp, drm_dma_t *dma);
79 extern int           DRM(dma_get_buffers)(struct file *filp, drm_dma_t *dma);
80
81
82 /* Gamma-specific code pulled from drm_lists.h (now renamed gamma_lists.h):
83  */
84 extern int           DRM(waitlist_create)(drm_waitlist_t *bl, int count);
85 extern int           DRM(waitlist_destroy)(drm_waitlist_t *bl);
86 extern int           DRM(waitlist_put)(drm_waitlist_t *bl, drm_buf_t *buf);
87 extern drm_buf_t     *DRM(waitlist_get)(drm_waitlist_t *bl);
88 extern int           DRM(freelist_create)(drm_freelist_t *bl, int count);
89 extern int           DRM(freelist_destroy)(drm_freelist_t *bl);
90 extern int           DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl,
91                                        drm_buf_t *buf);
92 extern drm_buf_t     *DRM(freelist_get)(drm_freelist_t *bl, int block);
93
94
95
96 #define GLINT_DRI_BUF_COUNT 256
97
98 #define GAMMA_OFF(reg)                                             \
99         ((reg < 0x1000)                                            \
100          ? reg                                                     \
101          : ((reg < 0x10000)                                        \
102             ? (reg - 0x1000)                                       \
103             : ((reg < 0x11000)                                     \
104                ? (reg - 0x10000)                                   \
105                : (reg - 0x11000))))
106
107 #define GAMMA_BASE(reg)  ((unsigned long)                                    \
108                           ((reg < 0x1000)    ? dev_priv->mmio0->handle :     \
109                            ((reg < 0x10000)  ? dev_priv->mmio1->handle :     \
110                             ((reg < 0x11000) ? dev_priv->mmio2->handle :     \
111                                                dev_priv->mmio3->handle))))
112 #define GAMMA_ADDR(reg)  (GAMMA_BASE(reg) + GAMMA_OFF(reg))
113 #define GAMMA_DEREF(reg) *(__volatile__ int *)GAMMA_ADDR(reg)
114 #define GAMMA_READ(reg)  GAMMA_DEREF(reg)
115 #define GAMMA_WRITE(reg,val) do { GAMMA_DEREF(reg) = val; } while (0)
116
117 #define GAMMA_BROADCASTMASK    0x9378
118 #define GAMMA_COMMANDINTENABLE 0x0c48
119 #define GAMMA_DMAADDRESS       0x0028
120 #define GAMMA_DMACOUNT         0x0030
121 #define GAMMA_FILTERMODE       0x8c00
122 #define GAMMA_GCOMMANDINTFLAGS 0x0c50
123 #define GAMMA_GCOMMANDMODE     0x0c40
124 #define         GAMMA_QUEUED_DMA_MODE           1<<1
125 #define GAMMA_GCOMMANDSTATUS   0x0c60
126 #define GAMMA_GDELAYTIMER      0x0c38
127 #define GAMMA_GDMACONTROL      0x0060
128 #define         GAMMA_USE_AGP                   1<<1
129 #define GAMMA_GINTENABLE       0x0808
130 #define GAMMA_GINTFLAGS        0x0810
131 #define GAMMA_INFIFOSPACE      0x0018
132 #define GAMMA_OUTFIFOWORDS     0x0020
133 #define GAMMA_OUTPUTFIFO       0x2000
134 #define GAMMA_SYNC             0x8c40
135 #define GAMMA_SYNC_TAG         0x0188
136 #define GAMMA_PAGETABLEADDR    0x0C00
137 #define GAMMA_PAGETABLELENGTH  0x0C08
138
139 #define GAMMA_PASSTHROUGH       0x1FE
140 #define GAMMA_DMAADDRTAG        0x530
141 #define GAMMA_DMACOUNTTAG       0x531
142 #define GAMMA_COMMANDINTTAG     0x532
143
144 #endif