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