v2.4.9.9 -> v2.4.9.10
[opensuse:kernel.git] / drivers / char / agp / agp.h
1 /*
2  * AGPGART module version 0.99
3  * Copyright (C) 1999 Jeff Hartmann
4  * Copyright (C) 1999 Precision Insight, Inc.
5  * Copyright (C) 1999 Xi Graphics, Inc.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20  * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
21  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
22  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
23  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24  *
25  */
26
27 #ifndef _AGP_BACKEND_PRIV_H
28 #define _AGP_BACKEND_PRIV_H 1
29
30 enum aper_size_type {
31         U8_APER_SIZE,
32         U16_APER_SIZE,
33         U32_APER_SIZE,
34         LVL2_APER_SIZE,
35         FIXED_APER_SIZE
36 };
37
38 typedef struct _gatt_mask {
39         unsigned long mask;
40         u32 type;
41         /* totally device specific, for integrated chipsets that 
42          * might have different types of memory masks.  For other
43          * devices this will probably be ignored */
44 } gatt_mask;
45
46 typedef struct _aper_size_info_8 {
47         int size;
48         int num_entries;
49         int page_order;
50         u8 size_value;
51 } aper_size_info_8;
52
53 typedef struct _aper_size_info_16 {
54         int size;
55         int num_entries;
56         int page_order;
57         u16 size_value;
58 } aper_size_info_16;
59
60 typedef struct _aper_size_info_32 {
61         int size;
62         int num_entries;
63         int page_order;
64         u32 size_value;
65 } aper_size_info_32;
66
67 typedef struct _aper_size_info_lvl2 {
68         int size;
69         int num_entries;
70         u32 size_value;
71 } aper_size_info_lvl2;
72
73 typedef struct _aper_size_info_fixed {
74         int size;
75         int num_entries;
76         int page_order;
77 } aper_size_info_fixed;
78
79 struct agp_bridge_data {
80         agp_version *version;
81         void *aperture_sizes;
82         void *previous_size;
83         void *current_size;
84         void *dev_private_data;
85         struct pci_dev *dev;
86         gatt_mask *masks;
87         unsigned long *gatt_table;
88         unsigned long *gatt_table_real;
89         unsigned long scratch_page;
90         unsigned long gart_bus_addr;
91         unsigned long gatt_bus_addr;
92         u32 mode;
93         enum chipset_type type;
94         enum aper_size_type size_type;
95         unsigned long *key_list;
96         atomic_t current_memory_agp;
97         atomic_t agp_in_use;
98         int max_memory_agp;     /* in number of pages */
99         int needs_scratch_page;
100         int aperture_size_idx;
101         int num_aperture_sizes;
102         int num_of_masks;
103         int capndx;
104         int cant_use_aperture;
105
106         /* Links to driver specific functions */
107
108         int (*fetch_size) (void);
109         int (*configure) (void);
110         void (*agp_enable) (u32);
111         void (*cleanup) (void);
112         void (*tlb_flush) (agp_memory *);
113         unsigned long (*mask_memory) (unsigned long, int);
114         void (*cache_flush) (void);
115         int (*create_gatt_table) (void);
116         int (*free_gatt_table) (void);
117         int (*insert_memory) (agp_memory *, off_t, int);
118         int (*remove_memory) (agp_memory *, off_t, int);
119         agp_memory *(*alloc_by_type) (size_t, int);
120         void (*free_by_type) (agp_memory *);
121         unsigned long (*agp_alloc_page) (void);
122         void (*agp_destroy_page) (unsigned long);
123 };
124
125 #define OUTREG32(mmap, addr, val)   __raw_writel((val), (mmap)+(addr))
126 #define OUTREG16(mmap, addr, val)   __raw_writew((val), (mmap)+(addr))
127 #define OUTREG8(mmap, addr, val)   __raw_writeb((val), (mmap)+(addr))
128
129 #define INREG32(mmap, addr)         __raw_readl((mmap)+(addr))
130 #define INREG16(mmap, addr)         __raw_readw((mmap)+(addr))
131 #define INREG8(mmap, addr)         __raw_readb((mmap)+(addr))
132
133 #define CACHE_FLUSH     agp_bridge.cache_flush
134 #define A_SIZE_8(x)     ((aper_size_info_8 *) x)
135 #define A_SIZE_16(x)    ((aper_size_info_16 *) x)
136 #define A_SIZE_32(x)    ((aper_size_info_32 *) x)
137 #define A_SIZE_LVL2(x)  ((aper_size_info_lvl2 *) x)
138 #define A_SIZE_FIX(x)   ((aper_size_info_fixed *) x)
139 #define A_IDX8()        (A_SIZE_8(agp_bridge.aperture_sizes) + i)
140 #define A_IDX16()       (A_SIZE_16(agp_bridge.aperture_sizes) + i)
141 #define A_IDX32()       (A_SIZE_32(agp_bridge.aperture_sizes) + i)
142 #define A_IDXLVL2()     (A_SIZE_LVL2(agp_bridge.aperture_sizes) + i)
143 #define A_IDXFIX()      (A_SIZE_FIX(agp_bridge.aperture_sizes) + i)
144 #define MAXKEY          (4096 * 32)
145
146 #define AGPGART_MODULE_NAME     "agpgart"
147 #define PFX                     AGPGART_MODULE_NAME ": "
148
149 #define PGE_EMPTY(p) (!(p) || (p) == (unsigned long) agp_bridge.scratch_page)
150
151 #ifndef PCI_DEVICE_ID_VIA_82C691_0
152 #define PCI_DEVICE_ID_VIA_82C691_0      0x0691
153 #endif
154 #ifndef PCI_DEVICE_ID_VIA_8371_0
155 #define PCI_DEVICE_ID_VIA_8371_0      0x0391
156 #endif
157 #ifndef PCI_DEVICE_ID_VIA_8363_0
158 #define PCI_DEVICE_ID_VIA_8363_0      0x0305
159 #endif
160 #ifndef PCI_DEVICE_ID_INTEL_810_0
161 #define PCI_DEVICE_ID_INTEL_810_0       0x7120
162 #endif
163 #ifndef PCI_DEVICE_ID_INTEL_840_0
164 #define PCI_DEVICE_ID_INTEL_840_0               0x1a21
165 #endif
166 #ifndef PCI_DEVICE_ID_INTEL_850_0
167 #define PCI_DEVICE_ID_INTEL_850_0     0x2530
168 #endif
169 #ifndef PCI_DEVICE_ID_INTEL_810_DC100_0
170 #define PCI_DEVICE_ID_INTEL_810_DC100_0 0x7122
171 #endif
172 #ifndef PCI_DEVICE_ID_INTEL_810_E_0
173 #define PCI_DEVICE_ID_INTEL_810_E_0     0x7124
174 #endif
175 #ifndef PCI_DEVICE_ID_INTEL_82443GX_0
176 #define PCI_DEVICE_ID_INTEL_82443GX_0   0x71a0
177 #endif
178 #ifndef PCI_DEVICE_ID_INTEL_810_1
179 #define PCI_DEVICE_ID_INTEL_810_1       0x7121
180 #endif
181 #ifndef PCI_DEVICE_ID_INTEL_810_DC100_1
182 #define PCI_DEVICE_ID_INTEL_810_DC100_1 0x7123
183 #endif
184 #ifndef PCI_DEVICE_ID_INTEL_810_E_1
185 #define PCI_DEVICE_ID_INTEL_810_E_1     0x7125
186 #endif
187 #ifndef PCI_DEVICE_ID_INTEL_815_0
188 #define PCI_DEVICE_ID_INTEL_815_0       0x1130
189 #endif
190 #ifndef PCI_DEVICE_ID_INTEL_815_1
191 #define PCI_DEVICE_ID_INTEL_815_1       0x1132
192 #endif
193 #ifndef PCI_DEVICE_ID_INTEL_82443GX_1
194 #define PCI_DEVICE_ID_INTEL_82443GX_1   0x71a1
195 #endif
196 #ifndef PCI_DEVICE_ID_AMD_IRONGATE_0
197 #define PCI_DEVICE_ID_AMD_IRONGATE_0    0x7006
198 #endif
199 #ifndef PCI_DEVICE_ID_AMD_761_0
200 #define PCI_DEVICE_ID_AMD_761_0         0x700e
201 #endif
202 #ifndef PCI_VENDOR_ID_AL
203 #define PCI_VENDOR_ID_AL                0x10b9
204 #endif
205 #ifndef PCI_DEVICE_ID_AL_M1541_0
206 #define PCI_DEVICE_ID_AL_M1541_0        0x1541
207 #endif
208 #ifndef PCI_DEVICE_ID_AL_M1621_0
209 #define PCI_DEVICE_ID_AL_M1621_0        0x1621
210 #endif
211 #ifndef PCI_DEVICE_ID_AL_M1631_0
212 #define PCI_DEVICE_ID_AL_M1631_0        0x1631
213 #endif
214 #ifndef PCI_DEVICE_ID_AL_M1632_0
215 #define PCI_DEVICE_ID_AL_M1632_0        0x1632
216 #endif
217 #ifndef PCI_DEVICE_ID_AL_M1641_0
218 #define PCI_DEVICE_ID_AL_M1641_0        0x1641
219 #endif
220 #ifndef PCI_DEVICE_ID_AL_M1647_0
221 #define PCI_DEVICE_ID_AL_M1647_0        0x1647
222 #endif
223 #ifndef PCI_DEVICE_ID_AL_M1651_0
224 #define PCI_DEVICE_ID_AL_M1651_0        0x1651
225 #endif
226
227 /* intel register */
228 #define INTEL_APBASE    0x10
229 #define INTEL_APSIZE    0xb4
230 #define INTEL_ATTBASE   0xb8
231 #define INTEL_AGPCTRL   0xb0
232 #define INTEL_NBXCFG    0x50
233 #define INTEL_ERRSTS    0x91
234
235 /* intel i840 registers */
236 #define INTEL_I840_MCHCFG   0x50
237 #define INTEL_I840_ERRSTS       0xc8
238
239 /* intel i850 registers */
240 #define INTEL_I850_MCHCFG   0x50
241 #define INTEL_I850_ERRSTS   0xc8
242
243 /* intel i810 registers */
244 #define I810_GMADDR 0x10
245 #define I810_MMADDR 0x14
246 #define I810_PTE_BASE          0x10000
247 #define I810_PTE_MAIN_UNCACHED 0x00000000
248 #define I810_PTE_LOCAL         0x00000002
249 #define I810_PTE_VALID         0x00000001
250 #define I810_SMRAM_MISCC       0x70
251 #define I810_GFX_MEM_WIN_SIZE  0x00010000
252 #define I810_GFX_MEM_WIN_32M   0x00010000
253 #define I810_GMS               0x000000c0
254 #define I810_GMS_DISABLE       0x00000000
255 #define I810_PGETBL_CTL        0x2020
256 #define I810_PGETBL_ENABLED    0x00000001
257 #define I810_DRAM_CTL          0x3000
258 #define I810_DRAM_ROW_0        0x00000001
259 #define I810_DRAM_ROW_0_SDRAM  0x00000001
260
261 /* VIA register */
262 #define VIA_APBASE      0x10
263 #define VIA_GARTCTRL    0x80
264 #define VIA_APSIZE      0x84
265 #define VIA_ATTBASE     0x88
266
267 /* SiS registers */
268 #define SIS_APBASE      0x10
269 #define SIS_ATTBASE     0x90
270 #define SIS_APSIZE      0x94
271 #define SIS_TLBCNTRL    0x97
272 #define SIS_TLBFLUSH    0x98
273
274 /* AMD registers */
275 #define AMD_APBASE      0x10
276 #define AMD_MMBASE      0x14
277 #define AMD_APSIZE      0xac
278 #define AMD_MODECNTL    0xb0
279 #define AMD_MODECNTL2   0xb2
280 #define AMD_GARTENABLE  0x02    /* In mmio region (16-bit register) */
281 #define AMD_ATTBASE     0x04    /* In mmio region (32-bit register) */
282 #define AMD_TLBFLUSH    0x0c    /* In mmio region (32-bit register) */
283 #define AMD_CACHEENTRY  0x10    /* In mmio region (32-bit register) */
284
285 /* ALi registers */
286 #define ALI_APBASE      0x10
287 #define ALI_AGPCTRL     0xb8
288 #define ALI_ATTBASE     0xbc
289 #define ALI_TLBCTRL     0xc0
290 #define ALI_TAGCTRL     0xc4
291 #define ALI_CACHE_FLUSH_CTRL    0xD0
292 #define ALI_CACHE_FLUSH_ADDR_MASK       0xFFFFF000
293 #define ALI_CACHE_FLUSH_EN      0x100
294
295 /* Serverworks Registers */
296 #define SVWRKS_APSIZE 0x10
297 #define SVWRKS_SIZE_MASK 0xfe000000
298
299 #define SVWRKS_MMBASE 0x14
300 #define SVWRKS_CACHING 0x4b
301 #define SVWRKS_FEATURE 0x68
302
303 /* func 1 registers */
304 #define SVWRKS_AGP_ENABLE 0x60
305 #define SVWRKS_COMMAND 0x04
306
307 /* Memory mapped registers */
308 #define SVWRKS_GART_CACHE 0x02
309 #define SVWRKS_GATTBASE   0x04
310 #define SVWRKS_TLBFLUSH   0x10
311 #define SVWRKS_POSTFLUSH  0x14
312 #define SVWRKS_DIRFLUSH   0x0c
313
314 #endif                          /* _AGP_BACKEND_PRIV_H */