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