]> Pileus Git - ~andy/linux/blob - drivers/char/agp/generic.c
agp: kill agp_flush_chipset and corresponding ioctl
[~andy/linux] / drivers / char / agp / generic.c
1 /*
2  * AGPGART driver.
3  * Copyright (C) 2004 Silicon Graphics, Inc.
4  * Copyright (C) 2002-2005 Dave Jones.
5  * Copyright (C) 1999 Jeff Hartmann.
6  * Copyright (C) 1999 Precision Insight, Inc.
7  * Copyright (C) 1999 Xi Graphics, Inc.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a
10  * copy of this software and associated documentation files (the "Software"),
11  * to deal in the Software without restriction, including without limitation
12  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13  * and/or sell copies of the Software, and to permit persons to whom the
14  * Software is furnished to do so, subject to the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be included
17  * in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22  * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
23  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
25  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26  *
27  * TODO:
28  * - Allocate more than order 0 pages to avoid too much linear map splitting.
29  */
30 #include <linux/module.h>
31 #include <linux/pci.h>
32 #include <linux/init.h>
33 #include <linux/pagemap.h>
34 #include <linux/miscdevice.h>
35 #include <linux/pm.h>
36 #include <linux/agp_backend.h>
37 #include <linux/vmalloc.h>
38 #include <linux/dma-mapping.h>
39 #include <linux/mm.h>
40 #include <linux/sched.h>
41 #include <linux/slab.h>
42 #include <asm/io.h>
43 #include <asm/cacheflush.h>
44 #include <asm/pgtable.h>
45 #include "agp.h"
46
47 __u32 *agp_gatt_table;
48 int agp_memory_reserved;
49
50 /*
51  * Needed by the Nforce GART driver for the time being. Would be
52  * nice to do this some other way instead of needing this export.
53  */
54 EXPORT_SYMBOL_GPL(agp_memory_reserved);
55
56 /*
57  * Generic routines for handling agp_memory structures -
58  * They use the basic page allocation routines to do the brunt of the work.
59  */
60
61 void agp_free_key(int key)
62 {
63         if (key < 0)
64                 return;
65
66         if (key < MAXKEY)
67                 clear_bit(key, agp_bridge->key_list);
68 }
69 EXPORT_SYMBOL(agp_free_key);
70
71
72 static int agp_get_key(void)
73 {
74         int bit;
75
76         bit = find_first_zero_bit(agp_bridge->key_list, MAXKEY);
77         if (bit < MAXKEY) {
78                 set_bit(bit, agp_bridge->key_list);
79                 return bit;
80         }
81         return -1;
82 }
83
84 /*
85  * Use kmalloc if possible for the page list. Otherwise fall back to
86  * vmalloc. This speeds things up and also saves memory for small AGP
87  * regions.
88  */
89
90 void agp_alloc_page_array(size_t size, struct agp_memory *mem)
91 {
92         mem->pages = NULL;
93
94         if (size <= 2*PAGE_SIZE)
95                 mem->pages = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
96         if (mem->pages == NULL) {
97                 mem->pages = vmalloc(size);
98         }
99 }
100 EXPORT_SYMBOL(agp_alloc_page_array);
101
102 void agp_free_page_array(struct agp_memory *mem)
103 {
104         if (is_vmalloc_addr(mem->pages)) {
105                 vfree(mem->pages);
106         } else {
107                 kfree(mem->pages);
108         }
109 }
110 EXPORT_SYMBOL(agp_free_page_array);
111
112
113 static struct agp_memory *agp_create_user_memory(unsigned long num_agp_pages)
114 {
115         struct agp_memory *new;
116         unsigned long alloc_size = num_agp_pages*sizeof(struct page *);
117
118         new = kzalloc(sizeof(struct agp_memory), GFP_KERNEL);
119         if (new == NULL)
120                 return NULL;
121
122         new->key = agp_get_key();
123
124         if (new->key < 0) {
125                 kfree(new);
126                 return NULL;
127         }
128
129         agp_alloc_page_array(alloc_size, new);
130
131         if (new->pages == NULL) {
132                 agp_free_key(new->key);
133                 kfree(new);
134                 return NULL;
135         }
136         new->num_scratch_pages = 0;
137         return new;
138 }
139
140 struct agp_memory *agp_create_memory(int scratch_pages)
141 {
142         struct agp_memory *new;
143
144         new = kzalloc(sizeof(struct agp_memory), GFP_KERNEL);
145         if (new == NULL)
146                 return NULL;
147
148         new->key = agp_get_key();
149
150         if (new->key < 0) {
151                 kfree(new);
152                 return NULL;
153         }
154
155         agp_alloc_page_array(PAGE_SIZE * scratch_pages, new);
156
157         if (new->pages == NULL) {
158                 agp_free_key(new->key);
159                 kfree(new);
160                 return NULL;
161         }
162         new->num_scratch_pages = scratch_pages;
163         new->type = AGP_NORMAL_MEMORY;
164         return new;
165 }
166 EXPORT_SYMBOL(agp_create_memory);
167
168 /**
169  *      agp_free_memory - free memory associated with an agp_memory pointer.
170  *
171  *      @curr:          agp_memory pointer to be freed.
172  *
173  *      It is the only function that can be called when the backend is not owned
174  *      by the caller.  (So it can free memory on client death.)
175  */
176 void agp_free_memory(struct agp_memory *curr)
177 {
178         size_t i;
179
180         if (curr == NULL)
181                 return;
182
183         if (curr->is_bound)
184                 agp_unbind_memory(curr);
185
186         if (curr->type >= AGP_USER_TYPES) {
187                 agp_generic_free_by_type(curr);
188                 return;
189         }
190
191         if (curr->type != 0) {
192                 curr->bridge->driver->free_by_type(curr);
193                 return;
194         }
195         if (curr->page_count != 0) {
196                 if (curr->bridge->driver->agp_destroy_pages) {
197                         curr->bridge->driver->agp_destroy_pages(curr);
198                 } else {
199
200                         for (i = 0; i < curr->page_count; i++) {
201                                 curr->bridge->driver->agp_destroy_page(
202                                         curr->pages[i],
203                                         AGP_PAGE_DESTROY_UNMAP);
204                         }
205                         for (i = 0; i < curr->page_count; i++) {
206                                 curr->bridge->driver->agp_destroy_page(
207                                         curr->pages[i],
208                                         AGP_PAGE_DESTROY_FREE);
209                         }
210                 }
211         }
212         agp_free_key(curr->key);
213         agp_free_page_array(curr);
214         kfree(curr);
215 }
216 EXPORT_SYMBOL(agp_free_memory);
217
218 #define ENTRIES_PER_PAGE                (PAGE_SIZE / sizeof(unsigned long))
219
220 /**
221  *      agp_allocate_memory  -  allocate a group of pages of a certain type.
222  *
223  *      @page_count:    size_t argument of the number of pages
224  *      @type:  u32 argument of the type of memory to be allocated.
225  *
226  *      Every agp bridge device will allow you to allocate AGP_NORMAL_MEMORY which
227  *      maps to physical ram.  Any other type is device dependent.
228  *
229  *      It returns NULL whenever memory is unavailable.
230  */
231 struct agp_memory *agp_allocate_memory(struct agp_bridge_data *bridge,
232                                         size_t page_count, u32 type)
233 {
234         int scratch_pages;
235         struct agp_memory *new;
236         size_t i;
237
238         if (!bridge)
239                 return NULL;
240
241         if ((atomic_read(&bridge->current_memory_agp) + page_count) > bridge->max_memory_agp)
242                 return NULL;
243
244         if (type >= AGP_USER_TYPES) {
245                 new = agp_generic_alloc_user(page_count, type);
246                 if (new)
247                         new->bridge = bridge;
248                 return new;
249         }
250
251         if (type != 0) {
252                 new = bridge->driver->alloc_by_type(page_count, type);
253                 if (new)
254                         new->bridge = bridge;
255                 return new;
256         }
257
258         scratch_pages = (page_count + ENTRIES_PER_PAGE - 1) / ENTRIES_PER_PAGE;
259
260         new = agp_create_memory(scratch_pages);
261
262         if (new == NULL)
263                 return NULL;
264
265         if (bridge->driver->agp_alloc_pages) {
266                 if (bridge->driver->agp_alloc_pages(bridge, new, page_count)) {
267                         agp_free_memory(new);
268                         return NULL;
269                 }
270                 new->bridge = bridge;
271                 return new;
272         }
273
274         for (i = 0; i < page_count; i++) {
275                 struct page *page = bridge->driver->agp_alloc_page(bridge);
276
277                 if (page == NULL) {
278                         agp_free_memory(new);
279                         return NULL;
280                 }
281                 new->pages[i] = page;
282                 new->page_count++;
283         }
284         new->bridge = bridge;
285
286         return new;
287 }
288 EXPORT_SYMBOL(agp_allocate_memory);
289
290
291 /* End - Generic routines for handling agp_memory structures */
292
293
294 static int agp_return_size(void)
295 {
296         int current_size;
297         void *temp;
298
299         temp = agp_bridge->current_size;
300
301         switch (agp_bridge->driver->size_type) {
302         case U8_APER_SIZE:
303                 current_size = A_SIZE_8(temp)->size;
304                 break;
305         case U16_APER_SIZE:
306                 current_size = A_SIZE_16(temp)->size;
307                 break;
308         case U32_APER_SIZE:
309                 current_size = A_SIZE_32(temp)->size;
310                 break;
311         case LVL2_APER_SIZE:
312                 current_size = A_SIZE_LVL2(temp)->size;
313                 break;
314         case FIXED_APER_SIZE:
315                 current_size = A_SIZE_FIX(temp)->size;
316                 break;
317         default:
318                 current_size = 0;
319                 break;
320         }
321
322         current_size -= (agp_memory_reserved / (1024*1024));
323         if (current_size <0)
324                 current_size = 0;
325         return current_size;
326 }
327
328
329 int agp_num_entries(void)
330 {
331         int num_entries;
332         void *temp;
333
334         temp = agp_bridge->current_size;
335
336         switch (agp_bridge->driver->size_type) {
337         case U8_APER_SIZE:
338                 num_entries = A_SIZE_8(temp)->num_entries;
339                 break;
340         case U16_APER_SIZE:
341                 num_entries = A_SIZE_16(temp)->num_entries;
342                 break;
343         case U32_APER_SIZE:
344                 num_entries = A_SIZE_32(temp)->num_entries;
345                 break;
346         case LVL2_APER_SIZE:
347                 num_entries = A_SIZE_LVL2(temp)->num_entries;
348                 break;
349         case FIXED_APER_SIZE:
350                 num_entries = A_SIZE_FIX(temp)->num_entries;
351                 break;
352         default:
353                 num_entries = 0;
354                 break;
355         }
356
357         num_entries -= agp_memory_reserved>>PAGE_SHIFT;
358         if (num_entries<0)
359                 num_entries = 0;
360         return num_entries;
361 }
362 EXPORT_SYMBOL_GPL(agp_num_entries);
363
364
365 /**
366  *      agp_copy_info  -  copy bridge state information
367  *
368  *      @info:          agp_kern_info pointer.  The caller should insure that this pointer is valid.
369  *
370  *      This function copies information about the agp bridge device and the state of
371  *      the agp backend into an agp_kern_info pointer.
372  */
373 int agp_copy_info(struct agp_bridge_data *bridge, struct agp_kern_info *info)
374 {
375         memset(info, 0, sizeof(struct agp_kern_info));
376         if (!bridge) {
377                 info->chipset = NOT_SUPPORTED;
378                 return -EIO;
379         }
380
381         info->version.major = bridge->version->major;
382         info->version.minor = bridge->version->minor;
383         info->chipset = SUPPORTED;
384         info->device = bridge->dev;
385         if (bridge->mode & AGPSTAT_MODE_3_0)
386                 info->mode = bridge->mode & ~AGP3_RESERVED_MASK;
387         else
388                 info->mode = bridge->mode & ~AGP2_RESERVED_MASK;
389         info->aper_base = bridge->gart_bus_addr;
390         info->aper_size = agp_return_size();
391         info->max_memory = bridge->max_memory_agp;
392         info->current_memory = atomic_read(&bridge->current_memory_agp);
393         info->cant_use_aperture = bridge->driver->cant_use_aperture;
394         info->vm_ops = bridge->vm_ops;
395         info->page_mask = ~0UL;
396         return 0;
397 }
398 EXPORT_SYMBOL(agp_copy_info);
399
400 /* End - Routine to copy over information structure */
401
402 /*
403  * Routines for handling swapping of agp_memory into the GATT -
404  * These routines take agp_memory and insert them into the GATT.
405  * They call device specific routines to actually write to the GATT.
406  */
407
408 /**
409  *      agp_bind_memory  -  Bind an agp_memory structure into the GATT.
410  *
411  *      @curr:          agp_memory pointer
412  *      @pg_start:      an offset into the graphics aperture translation table
413  *
414  *      It returns -EINVAL if the pointer == NULL.
415  *      It returns -EBUSY if the area of the table requested is already in use.
416  */
417 int agp_bind_memory(struct agp_memory *curr, off_t pg_start)
418 {
419         int ret_val;
420
421         if (curr == NULL)
422                 return -EINVAL;
423
424         if (curr->is_bound) {
425                 printk(KERN_INFO PFX "memory %p is already bound!\n", curr);
426                 return -EINVAL;
427         }
428         if (!curr->is_flushed) {
429                 curr->bridge->driver->cache_flush();
430                 curr->is_flushed = true;
431         }
432
433         ret_val = curr->bridge->driver->insert_memory(curr, pg_start, curr->type);
434
435         if (ret_val != 0)
436                 return ret_val;
437
438         curr->is_bound = true;
439         curr->pg_start = pg_start;
440         spin_lock(&agp_bridge->mapped_lock);
441         list_add(&curr->mapped_list, &agp_bridge->mapped_list);
442         spin_unlock(&agp_bridge->mapped_lock);
443
444         return 0;
445 }
446 EXPORT_SYMBOL(agp_bind_memory);
447
448
449 /**
450  *      agp_unbind_memory  -  Removes an agp_memory structure from the GATT
451  *
452  * @curr:       agp_memory pointer to be removed from the GATT.
453  *
454  * It returns -EINVAL if this piece of agp_memory is not currently bound to
455  * the graphics aperture translation table or if the agp_memory pointer == NULL
456  */
457 int agp_unbind_memory(struct agp_memory *curr)
458 {
459         int ret_val;
460
461         if (curr == NULL)
462                 return -EINVAL;
463
464         if (!curr->is_bound) {
465                 printk(KERN_INFO PFX "memory %p was not bound!\n", curr);
466                 return -EINVAL;
467         }
468
469         ret_val = curr->bridge->driver->remove_memory(curr, curr->pg_start, curr->type);
470
471         if (ret_val != 0)
472                 return ret_val;
473
474         curr->is_bound = false;
475         curr->pg_start = 0;
476         spin_lock(&curr->bridge->mapped_lock);
477         list_del(&curr->mapped_list);
478         spin_unlock(&curr->bridge->mapped_lock);
479         return 0;
480 }
481 EXPORT_SYMBOL(agp_unbind_memory);
482
483 /**
484  *      agp_rebind_emmory  -  Rewrite the entire GATT, useful on resume
485  */
486 int agp_rebind_memory(void)
487 {
488         struct agp_memory *curr;
489         int ret_val = 0;
490
491         spin_lock(&agp_bridge->mapped_lock);
492         list_for_each_entry(curr, &agp_bridge->mapped_list, mapped_list) {
493                 ret_val = curr->bridge->driver->insert_memory(curr,
494                                                               curr->pg_start,
495                                                               curr->type);
496                 if (ret_val != 0)
497                         break;
498         }
499         spin_unlock(&agp_bridge->mapped_lock);
500         return ret_val;
501 }
502 EXPORT_SYMBOL(agp_rebind_memory);
503
504 /* End - Routines for handling swapping of agp_memory into the GATT */
505
506
507 /* Generic Agp routines - Start */
508 static void agp_v2_parse_one(u32 *requested_mode, u32 *bridge_agpstat, u32 *vga_agpstat)
509 {
510         u32 tmp;
511
512         if (*requested_mode & AGP2_RESERVED_MASK) {
513                 printk(KERN_INFO PFX "reserved bits set (%x) in mode 0x%x. Fixed.\n",
514                         *requested_mode & AGP2_RESERVED_MASK, *requested_mode);
515                 *requested_mode &= ~AGP2_RESERVED_MASK;
516         }
517
518         /*
519          * Some dumb bridges are programmed to disobey the AGP2 spec.
520          * This is likely a BIOS misprogramming rather than poweron default, or
521          * it would be a lot more common.
522          * https://bugs.freedesktop.org/show_bug.cgi?id=8816
523          * AGPv2 spec 6.1.9 states:
524          *   The RATE field indicates the data transfer rates supported by this
525          *   device. A.G.P. devices must report all that apply.
526          * Fix them up as best we can.
527          */
528         switch (*bridge_agpstat & 7) {
529         case 4:
530                 *bridge_agpstat |= (AGPSTAT2_2X | AGPSTAT2_1X);
531                 printk(KERN_INFO PFX "BIOS bug. AGP bridge claims to only support x4 rate"
532                         "Fixing up support for x2 & x1\n");
533                 break;
534         case 2:
535                 *bridge_agpstat |= AGPSTAT2_1X;
536                 printk(KERN_INFO PFX "BIOS bug. AGP bridge claims to only support x2 rate"
537                         "Fixing up support for x1\n");
538                 break;
539         default:
540                 break;
541         }
542
543         /* Check the speed bits make sense. Only one should be set. */
544         tmp = *requested_mode & 7;
545         switch (tmp) {
546                 case 0:
547                         printk(KERN_INFO PFX "%s tried to set rate=x0. Setting to x1 mode.\n", current->comm);
548                         *requested_mode |= AGPSTAT2_1X;
549                         break;
550                 case 1:
551                 case 2:
552                         break;
553                 case 3:
554                         *requested_mode &= ~(AGPSTAT2_1X);      /* rate=2 */
555                         break;
556                 case 4:
557                         break;
558                 case 5:
559                 case 6:
560                 case 7:
561                         *requested_mode &= ~(AGPSTAT2_1X|AGPSTAT2_2X); /* rate=4*/
562                         break;
563         }
564
565         /* disable SBA if it's not supported */
566         if (!((*bridge_agpstat & AGPSTAT_SBA) && (*vga_agpstat & AGPSTAT_SBA) && (*requested_mode & AGPSTAT_SBA)))
567                 *bridge_agpstat &= ~AGPSTAT_SBA;
568
569         /* Set rate */
570         if (!((*bridge_agpstat & AGPSTAT2_4X) && (*vga_agpstat & AGPSTAT2_4X) && (*requested_mode & AGPSTAT2_4X)))
571                 *bridge_agpstat &= ~AGPSTAT2_4X;
572
573         if (!((*bridge_agpstat & AGPSTAT2_2X) && (*vga_agpstat & AGPSTAT2_2X) && (*requested_mode & AGPSTAT2_2X)))
574                 *bridge_agpstat &= ~AGPSTAT2_2X;
575
576         if (!((*bridge_agpstat & AGPSTAT2_1X) && (*vga_agpstat & AGPSTAT2_1X) && (*requested_mode & AGPSTAT2_1X)))
577                 *bridge_agpstat &= ~AGPSTAT2_1X;
578
579         /* Now we know what mode it should be, clear out the unwanted bits. */
580         if (*bridge_agpstat & AGPSTAT2_4X)
581                 *bridge_agpstat &= ~(AGPSTAT2_1X | AGPSTAT2_2X);        /* 4X */
582
583         if (*bridge_agpstat & AGPSTAT2_2X)
584                 *bridge_agpstat &= ~(AGPSTAT2_1X | AGPSTAT2_4X);        /* 2X */
585
586         if (*bridge_agpstat & AGPSTAT2_1X)
587                 *bridge_agpstat &= ~(AGPSTAT2_2X | AGPSTAT2_4X);        /* 1X */
588
589         /* Apply any errata. */
590         if (agp_bridge->flags & AGP_ERRATA_FASTWRITES)
591                 *bridge_agpstat &= ~AGPSTAT_FW;
592
593         if (agp_bridge->flags & AGP_ERRATA_SBA)
594                 *bridge_agpstat &= ~AGPSTAT_SBA;
595
596         if (agp_bridge->flags & AGP_ERRATA_1X) {
597                 *bridge_agpstat &= ~(AGPSTAT2_2X | AGPSTAT2_4X);
598                 *bridge_agpstat |= AGPSTAT2_1X;
599         }
600
601         /* If we've dropped down to 1X, disable fast writes. */
602         if (*bridge_agpstat & AGPSTAT2_1X)
603                 *bridge_agpstat &= ~AGPSTAT_FW;
604 }
605
606 /*
607  * requested_mode = Mode requested by (typically) X.
608  * bridge_agpstat = PCI_AGP_STATUS from agp bridge.
609  * vga_agpstat = PCI_AGP_STATUS from graphic card.
610  */
611 static void agp_v3_parse_one(u32 *requested_mode, u32 *bridge_agpstat, u32 *vga_agpstat)
612 {
613         u32 origbridge=*bridge_agpstat, origvga=*vga_agpstat;
614         u32 tmp;
615
616         if (*requested_mode & AGP3_RESERVED_MASK) {
617                 printk(KERN_INFO PFX "reserved bits set (%x) in mode 0x%x. Fixed.\n",
618                         *requested_mode & AGP3_RESERVED_MASK, *requested_mode);
619                 *requested_mode &= ~AGP3_RESERVED_MASK;
620         }
621
622         /* Check the speed bits make sense. */
623         tmp = *requested_mode & 7;
624         if (tmp == 0) {
625                 printk(KERN_INFO PFX "%s tried to set rate=x0. Setting to AGP3 x4 mode.\n", current->comm);
626                 *requested_mode |= AGPSTAT3_4X;
627         }
628         if (tmp >= 3) {
629                 printk(KERN_INFO PFX "%s tried to set rate=x%d. Setting to AGP3 x8 mode.\n", current->comm, tmp * 4);
630                 *requested_mode = (*requested_mode & ~7) | AGPSTAT3_8X;
631         }
632
633         /* ARQSZ - Set the value to the maximum one.
634          * Don't allow the mode register to override values. */
635         *bridge_agpstat = ((*bridge_agpstat & ~AGPSTAT_ARQSZ) |
636                 max_t(u32,(*bridge_agpstat & AGPSTAT_ARQSZ),(*vga_agpstat & AGPSTAT_ARQSZ)));
637
638         /* Calibration cycle.
639          * Don't allow the mode register to override values. */
640         *bridge_agpstat = ((*bridge_agpstat & ~AGPSTAT_CAL_MASK) |
641                 min_t(u32,(*bridge_agpstat & AGPSTAT_CAL_MASK),(*vga_agpstat & AGPSTAT_CAL_MASK)));
642
643         /* SBA *must* be supported for AGP v3 */
644         *bridge_agpstat |= AGPSTAT_SBA;
645
646         /*
647          * Set speed.
648          * Check for invalid speeds. This can happen when applications
649          * written before the AGP 3.0 standard pass AGP2.x modes to AGP3 hardware
650          */
651         if (*requested_mode & AGPSTAT_MODE_3_0) {
652                 /*
653                  * Caller hasn't a clue what it is doing. Bridge is in 3.0 mode,
654                  * have been passed a 3.0 mode, but with 2.x speed bits set.
655                  * AGP2.x 4x -> AGP3.0 4x.
656                  */
657                 if (*requested_mode & AGPSTAT2_4X) {
658                         printk(KERN_INFO PFX "%s passes broken AGP3 flags (%x). Fixed.\n",
659                                                 current->comm, *requested_mode);
660                         *requested_mode &= ~AGPSTAT2_4X;
661                         *requested_mode |= AGPSTAT3_4X;
662                 }
663         } else {
664                 /*
665                  * The caller doesn't know what they are doing. We are in 3.0 mode,
666                  * but have been passed an AGP 2.x mode.
667                  * Convert AGP 1x,2x,4x -> AGP 3.0 4x.
668                  */
669                 printk(KERN_INFO PFX "%s passes broken AGP2 flags (%x) in AGP3 mode. Fixed.\n",
670                                         current->comm, *requested_mode);
671                 *requested_mode &= ~(AGPSTAT2_4X | AGPSTAT2_2X | AGPSTAT2_1X);
672                 *requested_mode |= AGPSTAT3_4X;
673         }
674
675         if (*requested_mode & AGPSTAT3_8X) {
676                 if (!(*bridge_agpstat & AGPSTAT3_8X)) {
677                         *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
678                         *bridge_agpstat |= AGPSTAT3_4X;
679                         printk(KERN_INFO PFX "%s requested AGPx8 but bridge not capable.\n", current->comm);
680                         return;
681                 }
682                 if (!(*vga_agpstat & AGPSTAT3_8X)) {
683                         *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
684                         *bridge_agpstat |= AGPSTAT3_4X;
685                         printk(KERN_INFO PFX "%s requested AGPx8 but graphic card not capable.\n", current->comm);
686                         return;
687                 }
688                 /* All set, bridge & device can do AGP x8*/
689                 *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD);
690                 goto done;
691
692         } else if (*requested_mode & AGPSTAT3_4X) {
693                 *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
694                 *bridge_agpstat |= AGPSTAT3_4X;
695                 goto done;
696
697         } else {
698
699                 /*
700                  * If we didn't specify an AGP mode, we see if both
701                  * the graphics card, and the bridge can do x8, and use if so.
702                  * If not, we fall back to x4 mode.
703                  */
704                 if ((*bridge_agpstat & AGPSTAT3_8X) && (*vga_agpstat & AGPSTAT3_8X)) {
705                         printk(KERN_INFO PFX "No AGP mode specified. Setting to highest mode "
706                                 "supported by bridge & card (x8).\n");
707                         *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD);
708                         *vga_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD);
709                 } else {
710                         printk(KERN_INFO PFX "Fell back to AGPx4 mode because");
711                         if (!(*bridge_agpstat & AGPSTAT3_8X)) {
712                                 printk(KERN_INFO PFX "bridge couldn't do x8. bridge_agpstat:%x (orig=%x)\n",
713                                         *bridge_agpstat, origbridge);
714                                 *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
715                                 *bridge_agpstat |= AGPSTAT3_4X;
716                         }
717                         if (!(*vga_agpstat & AGPSTAT3_8X)) {
718                                 printk(KERN_INFO PFX "graphics card couldn't do x8. vga_agpstat:%x (orig=%x)\n",
719                                         *vga_agpstat, origvga);
720                                 *vga_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD);
721                                 *vga_agpstat |= AGPSTAT3_4X;
722                         }
723                 }
724         }
725
726 done:
727         /* Apply any errata. */
728         if (agp_bridge->flags & AGP_ERRATA_FASTWRITES)
729                 *bridge_agpstat &= ~AGPSTAT_FW;
730
731         if (agp_bridge->flags & AGP_ERRATA_SBA)
732                 *bridge_agpstat &= ~AGPSTAT_SBA;
733
734         if (agp_bridge->flags & AGP_ERRATA_1X) {
735                 *bridge_agpstat &= ~(AGPSTAT2_2X | AGPSTAT2_4X);
736                 *bridge_agpstat |= AGPSTAT2_1X;
737         }
738 }
739
740
741 /**
742  * agp_collect_device_status - determine correct agp_cmd from various agp_stat's
743  * @bridge: an agp_bridge_data struct allocated for the AGP host bridge.
744  * @requested_mode: requested agp_stat from userspace (Typically from X)
745  * @bridge_agpstat: current agp_stat from AGP bridge.
746  *
747  * This function will hunt for an AGP graphics card, and try to match
748  * the requested mode to the capabilities of both the bridge and the card.
749  */
750 u32 agp_collect_device_status(struct agp_bridge_data *bridge, u32 requested_mode, u32 bridge_agpstat)
751 {
752         struct pci_dev *device = NULL;
753         u32 vga_agpstat;
754         u8 cap_ptr;
755
756         for (;;) {
757                 device = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, device);
758                 if (!device) {
759                         printk(KERN_INFO PFX "Couldn't find an AGP VGA controller.\n");
760                         return 0;
761                 }
762                 cap_ptr = pci_find_capability(device, PCI_CAP_ID_AGP);
763                 if (cap_ptr)
764                         break;
765         }
766
767         /*
768          * Ok, here we have a AGP device. Disable impossible
769          * settings, and adjust the readqueue to the minimum.
770          */
771         pci_read_config_dword(device, cap_ptr+PCI_AGP_STATUS, &vga_agpstat);
772
773         /* adjust RQ depth */
774         bridge_agpstat = ((bridge_agpstat & ~AGPSTAT_RQ_DEPTH) |
775              min_t(u32, (requested_mode & AGPSTAT_RQ_DEPTH),
776                  min_t(u32, (bridge_agpstat & AGPSTAT_RQ_DEPTH), (vga_agpstat & AGPSTAT_RQ_DEPTH))));
777
778         /* disable FW if it's not supported */
779         if (!((bridge_agpstat & AGPSTAT_FW) &&
780                  (vga_agpstat & AGPSTAT_FW) &&
781                  (requested_mode & AGPSTAT_FW)))
782                 bridge_agpstat &= ~AGPSTAT_FW;
783
784         /* Check to see if we are operating in 3.0 mode */
785         if (agp_bridge->mode & AGPSTAT_MODE_3_0)
786                 agp_v3_parse_one(&requested_mode, &bridge_agpstat, &vga_agpstat);
787         else
788                 agp_v2_parse_one(&requested_mode, &bridge_agpstat, &vga_agpstat);
789
790         pci_dev_put(device);
791         return bridge_agpstat;
792 }
793 EXPORT_SYMBOL(agp_collect_device_status);
794
795
796 void agp_device_command(u32 bridge_agpstat, bool agp_v3)
797 {
798         struct pci_dev *device = NULL;
799         int mode;
800
801         mode = bridge_agpstat & 0x7;
802         if (agp_v3)
803                 mode *= 4;
804
805         for_each_pci_dev(device) {
806                 u8 agp = pci_find_capability(device, PCI_CAP_ID_AGP);
807                 if (!agp)
808                         continue;
809
810                 dev_info(&device->dev, "putting AGP V%d device into %dx mode\n",
811                          agp_v3 ? 3 : 2, mode);
812                 pci_write_config_dword(device, agp + PCI_AGP_COMMAND, bridge_agpstat);
813         }
814 }
815 EXPORT_SYMBOL(agp_device_command);
816
817
818 void get_agp_version(struct agp_bridge_data *bridge)
819 {
820         u32 ncapid;
821
822         /* Exit early if already set by errata workarounds. */
823         if (bridge->major_version != 0)
824                 return;
825
826         pci_read_config_dword(bridge->dev, bridge->capndx, &ncapid);
827         bridge->major_version = (ncapid >> AGP_MAJOR_VERSION_SHIFT) & 0xf;
828         bridge->minor_version = (ncapid >> AGP_MINOR_VERSION_SHIFT) & 0xf;
829 }
830 EXPORT_SYMBOL(get_agp_version);
831
832
833 void agp_generic_enable(struct agp_bridge_data *bridge, u32 requested_mode)
834 {
835         u32 bridge_agpstat, temp;
836
837         get_agp_version(agp_bridge);
838
839         dev_info(&agp_bridge->dev->dev, "AGP %d.%d bridge\n",
840                  agp_bridge->major_version, agp_bridge->minor_version);
841
842         pci_read_config_dword(agp_bridge->dev,
843                       agp_bridge->capndx + PCI_AGP_STATUS, &bridge_agpstat);
844
845         bridge_agpstat = agp_collect_device_status(agp_bridge, requested_mode, bridge_agpstat);
846         if (bridge_agpstat == 0)
847                 /* Something bad happened. FIXME: Return error code? */
848                 return;
849
850         bridge_agpstat |= AGPSTAT_AGP_ENABLE;
851
852         /* Do AGP version specific frobbing. */
853         if (bridge->major_version >= 3) {
854                 if (bridge->mode & AGPSTAT_MODE_3_0) {
855                         /* If we have 3.5, we can do the isoch stuff. */
856                         if (bridge->minor_version >= 5)
857                                 agp_3_5_enable(bridge);
858                         agp_device_command(bridge_agpstat, true);
859                         return;
860                 } else {
861                     /* Disable calibration cycle in RX91<1> when not in AGP3.0 mode of operation.*/
862                     bridge_agpstat &= ~(7<<10) ;
863                     pci_read_config_dword(bridge->dev,
864                                         bridge->capndx+AGPCTRL, &temp);
865                     temp |= (1<<9);
866                     pci_write_config_dword(bridge->dev,
867                                         bridge->capndx+AGPCTRL, temp);
868
869                     dev_info(&bridge->dev->dev, "bridge is in legacy mode, falling back to 2.x\n");
870                 }
871         }
872
873         /* AGP v<3 */
874         agp_device_command(bridge_agpstat, false);
875 }
876 EXPORT_SYMBOL(agp_generic_enable);
877
878
879 int agp_generic_create_gatt_table(struct agp_bridge_data *bridge)
880 {
881         char *table;
882         char *table_end;
883         int size;
884         int page_order;
885         int num_entries;
886         int i;
887         void *temp;
888         struct page *page;
889
890         /* The generic routines can't handle 2 level gatt's */
891         if (bridge->driver->size_type == LVL2_APER_SIZE)
892                 return -EINVAL;
893
894         table = NULL;
895         i = bridge->aperture_size_idx;
896         temp = bridge->current_size;
897         size = page_order = num_entries = 0;
898
899         if (bridge->driver->size_type != FIXED_APER_SIZE) {
900                 do {
901                         switch (bridge->driver->size_type) {
902                         case U8_APER_SIZE:
903                                 size = A_SIZE_8(temp)->size;
904                                 page_order =
905                                     A_SIZE_8(temp)->page_order;
906                                 num_entries =
907                                     A_SIZE_8(temp)->num_entries;
908                                 break;
909                         case U16_APER_SIZE:
910                                 size = A_SIZE_16(temp)->size;
911                                 page_order = A_SIZE_16(temp)->page_order;
912                                 num_entries = A_SIZE_16(temp)->num_entries;
913                                 break;
914                         case U32_APER_SIZE:
915                                 size = A_SIZE_32(temp)->size;
916                                 page_order = A_SIZE_32(temp)->page_order;
917                                 num_entries = A_SIZE_32(temp)->num_entries;
918                                 break;
919                                 /* This case will never really happen. */
920                         case FIXED_APER_SIZE:
921                         case LVL2_APER_SIZE:
922                         default:
923                                 size = page_order = num_entries = 0;
924                                 break;
925                         }
926
927                         table = alloc_gatt_pages(page_order);
928
929                         if (table == NULL) {
930                                 i++;
931                                 switch (bridge->driver->size_type) {
932                                 case U8_APER_SIZE:
933                                         bridge->current_size = A_IDX8(bridge);
934                                         break;
935                                 case U16_APER_SIZE:
936                                         bridge->current_size = A_IDX16(bridge);
937                                         break;
938                                 case U32_APER_SIZE:
939                                         bridge->current_size = A_IDX32(bridge);
940                                         break;
941                                 /* These cases will never really happen. */
942                                 case FIXED_APER_SIZE:
943                                 case LVL2_APER_SIZE:
944                                 default:
945                                         break;
946                                 }
947                                 temp = bridge->current_size;
948                         } else {
949                                 bridge->aperture_size_idx = i;
950                         }
951                 } while (!table && (i < bridge->driver->num_aperture_sizes));
952         } else {
953                 size = ((struct aper_size_info_fixed *) temp)->size;
954                 page_order = ((struct aper_size_info_fixed *) temp)->page_order;
955                 num_entries = ((struct aper_size_info_fixed *) temp)->num_entries;
956                 table = alloc_gatt_pages(page_order);
957         }
958
959         if (table == NULL)
960                 return -ENOMEM;
961
962         table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
963
964         for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
965                 SetPageReserved(page);
966
967         bridge->gatt_table_real = (u32 *) table;
968         agp_gatt_table = (void *)table;
969
970         bridge->driver->cache_flush();
971 #ifdef CONFIG_X86
972         if (set_memory_uc((unsigned long)table, 1 << page_order))
973                 printk(KERN_WARNING "Could not set GATT table memory to UC!");
974
975         bridge->gatt_table = (void *)table;
976 #else
977         bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
978                                         (PAGE_SIZE * (1 << page_order)));
979         bridge->driver->cache_flush();
980 #endif
981
982         if (bridge->gatt_table == NULL) {
983                 for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
984                         ClearPageReserved(page);
985
986                 free_gatt_pages(table, page_order);
987
988                 return -ENOMEM;
989         }
990         bridge->gatt_bus_addr = virt_to_phys(bridge->gatt_table_real);
991
992         /* AK: bogus, should encode addresses > 4GB */
993         for (i = 0; i < num_entries; i++) {
994                 writel(bridge->scratch_page, bridge->gatt_table+i);
995                 readl(bridge->gatt_table+i);    /* PCI Posting. */
996         }
997
998         return 0;
999 }
1000 EXPORT_SYMBOL(agp_generic_create_gatt_table);
1001
1002 int agp_generic_free_gatt_table(struct agp_bridge_data *bridge)
1003 {
1004         int page_order;
1005         char *table, *table_end;
1006         void *temp;
1007         struct page *page;
1008
1009         temp = bridge->current_size;
1010
1011         switch (bridge->driver->size_type) {
1012         case U8_APER_SIZE:
1013                 page_order = A_SIZE_8(temp)->page_order;
1014                 break;
1015         case U16_APER_SIZE:
1016                 page_order = A_SIZE_16(temp)->page_order;
1017                 break;
1018         case U32_APER_SIZE:
1019                 page_order = A_SIZE_32(temp)->page_order;
1020                 break;
1021         case FIXED_APER_SIZE:
1022                 page_order = A_SIZE_FIX(temp)->page_order;
1023                 break;
1024         case LVL2_APER_SIZE:
1025                 /* The generic routines can't deal with 2 level gatt's */
1026                 return -EINVAL;
1027                 break;
1028         default:
1029                 page_order = 0;
1030                 break;
1031         }
1032
1033         /* Do not worry about freeing memory, because if this is
1034          * called, then all agp memory is deallocated and removed
1035          * from the table. */
1036
1037 #ifdef CONFIG_X86
1038         set_memory_wb((unsigned long)bridge->gatt_table, 1 << page_order);
1039 #else
1040         iounmap(bridge->gatt_table);
1041 #endif
1042         table = (char *) bridge->gatt_table_real;
1043         table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
1044
1045         for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
1046                 ClearPageReserved(page);
1047
1048         free_gatt_pages(bridge->gatt_table_real, page_order);
1049
1050         agp_gatt_table = NULL;
1051         bridge->gatt_table = NULL;
1052         bridge->gatt_table_real = NULL;
1053         bridge->gatt_bus_addr = 0;
1054
1055         return 0;
1056 }
1057 EXPORT_SYMBOL(agp_generic_free_gatt_table);
1058
1059
1060 int agp_generic_insert_memory(struct agp_memory * mem, off_t pg_start, int type)
1061 {
1062         int num_entries;
1063         size_t i;
1064         off_t j;
1065         void *temp;
1066         struct agp_bridge_data *bridge;
1067         int mask_type;
1068
1069         bridge = mem->bridge;
1070         if (!bridge)
1071                 return -EINVAL;
1072
1073         if (mem->page_count == 0)
1074                 return 0;
1075
1076         temp = bridge->current_size;
1077
1078         switch (bridge->driver->size_type) {
1079         case U8_APER_SIZE:
1080                 num_entries = A_SIZE_8(temp)->num_entries;
1081                 break;
1082         case U16_APER_SIZE:
1083                 num_entries = A_SIZE_16(temp)->num_entries;
1084                 break;
1085         case U32_APER_SIZE:
1086                 num_entries = A_SIZE_32(temp)->num_entries;
1087                 break;
1088         case FIXED_APER_SIZE:
1089                 num_entries = A_SIZE_FIX(temp)->num_entries;
1090                 break;
1091         case LVL2_APER_SIZE:
1092                 /* The generic routines can't deal with 2 level gatt's */
1093                 return -EINVAL;
1094                 break;
1095         default:
1096                 num_entries = 0;
1097                 break;
1098         }
1099
1100         num_entries -= agp_memory_reserved/PAGE_SIZE;
1101         if (num_entries < 0) num_entries = 0;
1102
1103         if (type != mem->type)
1104                 return -EINVAL;
1105
1106         mask_type = bridge->driver->agp_type_to_mask_type(bridge, type);
1107         if (mask_type != 0) {
1108                 /* The generic routines know nothing of memory types */
1109                 return -EINVAL;
1110         }
1111
1112         /* AK: could wrap */
1113         if ((pg_start + mem->page_count) > num_entries)
1114                 return -EINVAL;
1115
1116         j = pg_start;
1117
1118         while (j < (pg_start + mem->page_count)) {
1119                 if (!PGE_EMPTY(bridge, readl(bridge->gatt_table+j)))
1120                         return -EBUSY;
1121                 j++;
1122         }
1123
1124         if (!mem->is_flushed) {
1125                 bridge->driver->cache_flush();
1126                 mem->is_flushed = true;
1127         }
1128
1129         for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
1130                 writel(bridge->driver->mask_memory(bridge,
1131                                                    page_to_phys(mem->pages[i]),
1132                                                    mask_type),
1133                        bridge->gatt_table+j);
1134         }
1135         readl(bridge->gatt_table+j-1);  /* PCI Posting. */
1136
1137         bridge->driver->tlb_flush(mem);
1138         return 0;
1139 }
1140 EXPORT_SYMBOL(agp_generic_insert_memory);
1141
1142
1143 int agp_generic_remove_memory(struct agp_memory *mem, off_t pg_start, int type)
1144 {
1145         size_t i;
1146         struct agp_bridge_data *bridge;
1147         int mask_type;
1148
1149         bridge = mem->bridge;
1150         if (!bridge)
1151                 return -EINVAL;
1152
1153         if (mem->page_count == 0)
1154                 return 0;
1155
1156         if (type != mem->type)
1157                 return -EINVAL;
1158
1159         mask_type = bridge->driver->agp_type_to_mask_type(bridge, type);
1160         if (mask_type != 0) {
1161                 /* The generic routines know nothing of memory types */
1162                 return -EINVAL;
1163         }
1164
1165         /* AK: bogus, should encode addresses > 4GB */
1166         for (i = pg_start; i < (mem->page_count + pg_start); i++) {
1167                 writel(bridge->scratch_page, bridge->gatt_table+i);
1168         }
1169         readl(bridge->gatt_table+i-1);  /* PCI Posting. */
1170
1171         bridge->driver->tlb_flush(mem);
1172         return 0;
1173 }
1174 EXPORT_SYMBOL(agp_generic_remove_memory);
1175
1176 struct agp_memory *agp_generic_alloc_by_type(size_t page_count, int type)
1177 {
1178         return NULL;
1179 }
1180 EXPORT_SYMBOL(agp_generic_alloc_by_type);
1181
1182 void agp_generic_free_by_type(struct agp_memory *curr)
1183 {
1184         agp_free_page_array(curr);
1185         agp_free_key(curr->key);
1186         kfree(curr);
1187 }
1188 EXPORT_SYMBOL(agp_generic_free_by_type);
1189
1190 struct agp_memory *agp_generic_alloc_user(size_t page_count, int type)
1191 {
1192         struct agp_memory *new;
1193         int i;
1194         int pages;
1195
1196         pages = (page_count + ENTRIES_PER_PAGE - 1) / ENTRIES_PER_PAGE;
1197         new = agp_create_user_memory(page_count);
1198         if (new == NULL)
1199                 return NULL;
1200
1201         for (i = 0; i < page_count; i++)
1202                 new->pages[i] = NULL;
1203         new->page_count = 0;
1204         new->type = type;
1205         new->num_scratch_pages = pages;
1206
1207         return new;
1208 }
1209 EXPORT_SYMBOL(agp_generic_alloc_user);
1210
1211 /*
1212  * Basic Page Allocation Routines -
1213  * These routines handle page allocation and by default they reserve the allocated
1214  * memory.  They also handle incrementing the current_memory_agp value, Which is checked
1215  * against a maximum value.
1216  */
1217
1218 int agp_generic_alloc_pages(struct agp_bridge_data *bridge, struct agp_memory *mem, size_t num_pages)
1219 {
1220         struct page * page;
1221         int i, ret = -ENOMEM;
1222
1223         for (i = 0; i < num_pages; i++) {
1224                 page = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO);
1225                 /* agp_free_memory() needs gart address */
1226                 if (page == NULL)
1227                         goto out;
1228
1229 #ifndef CONFIG_X86
1230                 map_page_into_agp(page);
1231 #endif
1232                 get_page(page);
1233                 atomic_inc(&agp_bridge->current_memory_agp);
1234
1235                 mem->pages[i] = page;
1236                 mem->page_count++;
1237         }
1238
1239 #ifdef CONFIG_X86
1240         set_pages_array_uc(mem->pages, num_pages);
1241 #endif
1242         ret = 0;
1243 out:
1244         return ret;
1245 }
1246 EXPORT_SYMBOL(agp_generic_alloc_pages);
1247
1248 struct page *agp_generic_alloc_page(struct agp_bridge_data *bridge)
1249 {
1250         struct page * page;
1251
1252         page = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO);
1253         if (page == NULL)
1254                 return NULL;
1255
1256         map_page_into_agp(page);
1257
1258         get_page(page);
1259         atomic_inc(&agp_bridge->current_memory_agp);
1260         return page;
1261 }
1262 EXPORT_SYMBOL(agp_generic_alloc_page);
1263
1264 void agp_generic_destroy_pages(struct agp_memory *mem)
1265 {
1266         int i;
1267         struct page *page;
1268
1269         if (!mem)
1270                 return;
1271
1272 #ifdef CONFIG_X86
1273         set_pages_array_wb(mem->pages, mem->page_count);
1274 #endif
1275
1276         for (i = 0; i < mem->page_count; i++) {
1277                 page = mem->pages[i];
1278
1279 #ifndef CONFIG_X86
1280                 unmap_page_from_agp(page);
1281 #endif
1282                 put_page(page);
1283                 __free_page(page);
1284                 atomic_dec(&agp_bridge->current_memory_agp);
1285                 mem->pages[i] = NULL;
1286         }
1287 }
1288 EXPORT_SYMBOL(agp_generic_destroy_pages);
1289
1290 void agp_generic_destroy_page(struct page *page, int flags)
1291 {
1292         if (page == NULL)
1293                 return;
1294
1295         if (flags & AGP_PAGE_DESTROY_UNMAP)
1296                 unmap_page_from_agp(page);
1297
1298         if (flags & AGP_PAGE_DESTROY_FREE) {
1299                 put_page(page);
1300                 __free_page(page);
1301                 atomic_dec(&agp_bridge->current_memory_agp);
1302         }
1303 }
1304 EXPORT_SYMBOL(agp_generic_destroy_page);
1305
1306 /* End Basic Page Allocation Routines */
1307
1308
1309 /**
1310  * agp_enable  -  initialise the agp point-to-point connection.
1311  *
1312  * @mode:       agp mode register value to configure with.
1313  */
1314 void agp_enable(struct agp_bridge_data *bridge, u32 mode)
1315 {
1316         if (!bridge)
1317                 return;
1318         bridge->driver->agp_enable(bridge, mode);
1319 }
1320 EXPORT_SYMBOL(agp_enable);
1321
1322 /* When we remove the global variable agp_bridge from all drivers
1323  * then agp_alloc_bridge and agp_generic_find_bridge need to be updated
1324  */
1325
1326 struct agp_bridge_data *agp_generic_find_bridge(struct pci_dev *pdev)
1327 {
1328         if (list_empty(&agp_bridges))
1329                 return NULL;
1330
1331         return agp_bridge;
1332 }
1333
1334 static void ipi_handler(void *null)
1335 {
1336         flush_agp_cache();
1337 }
1338
1339 void global_cache_flush(void)
1340 {
1341         if (on_each_cpu(ipi_handler, NULL, 1) != 0)
1342                 panic(PFX "timed out waiting for the other CPUs!\n");
1343 }
1344 EXPORT_SYMBOL(global_cache_flush);
1345
1346 unsigned long agp_generic_mask_memory(struct agp_bridge_data *bridge,
1347                                       dma_addr_t addr, int type)
1348 {
1349         /* memory type is ignored in the generic routine */
1350         if (bridge->driver->masks)
1351                 return addr | bridge->driver->masks[0].mask;
1352         else
1353                 return addr;
1354 }
1355 EXPORT_SYMBOL(agp_generic_mask_memory);
1356
1357 int agp_generic_type_to_mask_type(struct agp_bridge_data *bridge,
1358                                   int type)
1359 {
1360         if (type >= AGP_USER_TYPES)
1361                 return 0;
1362         return type;
1363 }
1364 EXPORT_SYMBOL(agp_generic_type_to_mask_type);
1365
1366 /*
1367  * These functions are implemented according to the AGPv3 spec,
1368  * which covers implementation details that had previously been
1369  * left open.
1370  */
1371
1372 int agp3_generic_fetch_size(void)
1373 {
1374         u16 temp_size;
1375         int i;
1376         struct aper_size_info_16 *values;
1377
1378         pci_read_config_word(agp_bridge->dev, agp_bridge->capndx+AGPAPSIZE, &temp_size);
1379         values = A_SIZE_16(agp_bridge->driver->aperture_sizes);
1380
1381         for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) {
1382                 if (temp_size == values[i].size_value) {
1383                         agp_bridge->previous_size =
1384                                 agp_bridge->current_size = (void *) (values + i);
1385
1386                         agp_bridge->aperture_size_idx = i;
1387                         return values[i].size;
1388                 }
1389         }
1390         return 0;
1391 }
1392 EXPORT_SYMBOL(agp3_generic_fetch_size);
1393
1394 void agp3_generic_tlbflush(struct agp_memory *mem)
1395 {
1396         u32 ctrl;
1397         pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, &ctrl);
1398         pci_write_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, ctrl & ~AGPCTRL_GTLBEN);
1399         pci_write_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, ctrl);
1400 }
1401 EXPORT_SYMBOL(agp3_generic_tlbflush);
1402
1403 int agp3_generic_configure(void)
1404 {
1405         u32 temp;
1406         struct aper_size_info_16 *current_size;
1407
1408         current_size = A_SIZE_16(agp_bridge->current_size);
1409
1410         pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);
1411         agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);
1412
1413         /* set aperture size */
1414         pci_write_config_word(agp_bridge->dev, agp_bridge->capndx+AGPAPSIZE, current_size->size_value);
1415         /* set gart pointer */
1416         pci_write_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPGARTLO, agp_bridge->gatt_bus_addr);
1417         /* enable aperture and GTLB */
1418         pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, &temp);
1419         pci_write_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, temp | AGPCTRL_APERENB | AGPCTRL_GTLBEN);
1420         return 0;
1421 }
1422 EXPORT_SYMBOL(agp3_generic_configure);
1423
1424 void agp3_generic_cleanup(void)
1425 {
1426         u32 ctrl;
1427         pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, &ctrl);
1428         pci_write_config_dword(agp_bridge->dev, agp_bridge->capndx+AGPCTRL, ctrl & ~AGPCTRL_APERENB);
1429 }
1430 EXPORT_SYMBOL(agp3_generic_cleanup);
1431
1432 const struct aper_size_info_16 agp3_generic_sizes[AGP_GENERIC_SIZES_ENTRIES] =
1433 {
1434         {4096, 1048576, 10,0x000},
1435         {2048,  524288, 9, 0x800},
1436         {1024,  262144, 8, 0xc00},
1437         { 512,  131072, 7, 0xe00},
1438         { 256,   65536, 6, 0xf00},
1439         { 128,   32768, 5, 0xf20},
1440         {  64,   16384, 4, 0xf30},
1441         {  32,    8192, 3, 0xf38},
1442         {  16,    4096, 2, 0xf3c},
1443         {   8,    2048, 1, 0xf3e},
1444         {   4,    1024, 0, 0xf3f}
1445 };
1446 EXPORT_SYMBOL(agp3_generic_sizes);
1447