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