Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart

* master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart:
[AGPGART] intel_agp: Add support for G33, Q33 and Q35 chipsets
[AGPGART] intel_agp: add support for 945GME
[AGPGART] intel_agp: add support for 965GME/GLE
[AGPGART] intel_agp: use table for device probe
[AGPGART] intel_agp: cleanup intel private data

+276 -308
+5 -1
drivers/char/agp/agp.h
··· 176 176 #define I830_GMCH_MEM_MASK 0x1 177 177 #define I830_GMCH_MEM_64M 0x1 178 178 #define I830_GMCH_MEM_128M 0 179 - #define I830_GMCH_GMS_MASK 0x70 179 + #define I830_GMCH_GMS_MASK 0xF0 180 180 #define I830_GMCH_GMS_DISABLED 0x00 181 181 #define I830_GMCH_GMS_LOCAL 0x10 182 182 #define I830_GMCH_GMS_STOLEN_512 0x20 ··· 231 231 #define I965_PGETBL_SIZE_512KB (0 << 1) 232 232 #define I965_PGETBL_SIZE_256KB (1 << 1) 233 233 #define I965_PGETBL_SIZE_128KB (2 << 1) 234 + #define G33_PGETBL_SIZE_MASK (3 << 8) 235 + #define G33_PGETBL_SIZE_1M (1 << 8) 236 + #define G33_PGETBL_SIZE_2M (2 << 8) 237 + 234 238 #define I810_DRAM_CTL 0x3000 235 239 #define I810_DRAM_ROW_0 0x00000001 236 240 #define I810_DRAM_ROW_0_SDRAM 0x00000001
+271 -307
drivers/char/agp/intel-agp.c
··· 20 20 #define PCI_DEVICE_ID_INTEL_82965G_IG 0x29A2 21 21 #define PCI_DEVICE_ID_INTEL_82965GM_HB 0x2A00 22 22 #define PCI_DEVICE_ID_INTEL_82965GM_IG 0x2A02 23 + #define PCI_DEVICE_ID_INTEL_82965GME_IG 0x2A12 24 + #define PCI_DEVICE_ID_INTEL_82945GME_IG 0x27AE 25 + #define PCI_DEVICE_ID_INTEL_G33_HB 0x29C0 26 + #define PCI_DEVICE_ID_INTEL_G33_IG 0x29C2 27 + #define PCI_DEVICE_ID_INTEL_Q35_HB 0x29B0 28 + #define PCI_DEVICE_ID_INTEL_Q35_IG 0x29B2 29 + #define PCI_DEVICE_ID_INTEL_Q33_HB 0x29D0 30 + #define PCI_DEVICE_ID_INTEL_Q33_IG 0x29D2 23 31 24 32 #define IS_I965 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82946GZ_HB || \ 25 33 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \ ··· 35 27 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \ 36 28 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB) 37 29 30 + #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \ 31 + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \ 32 + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q33_HB) 38 33 39 34 extern int agp_memory_reserved; 40 35 ··· 64 53 #define I915_PTEADDR 0x1C 65 54 #define I915_GMCH_GMS_STOLEN_48M (0x6 << 4) 66 55 #define I915_GMCH_GMS_STOLEN_64M (0x7 << 4) 56 + #define G33_GMCH_GMS_STOLEN_128M (0x8 << 4) 57 + #define G33_GMCH_GMS_STOLEN_256M (0x9 << 4) 67 58 68 59 /* Intel 965G registers */ 69 60 #define I965_MSAC 0x62 ··· 99 86 .type = INTEL_AGP_CACHED_MEMORY} 100 87 }; 101 88 102 - static struct _intel_i810_private { 103 - struct pci_dev *i810_dev; /* device one */ 104 - volatile u8 __iomem *registers; 89 + static struct _intel_private { 90 + struct pci_dev *pcidev; /* device one */ 91 + u8 __iomem *registers; 92 + u32 __iomem *gtt; /* I915G */ 105 93 int num_dcache_entries; 106 - } intel_i810_private; 94 + /* gtt_entries is the number of gtt entries that are already mapped 95 + * to stolen memory. Stolen memory is larger than the memory mapped 96 + * through gtt_entries, as it includes some reserved space for the BIOS 97 + * popup and for the GTT. 98 + */ 99 + int gtt_entries; /* i830+ */ 100 + } intel_private; 107 101 108 102 static int intel_i810_fetch_size(void) 109 103 { ··· 147 127 148 128 current_size = A_SIZE_FIX(agp_bridge->current_size); 149 129 150 - if (!intel_i810_private.registers) { 151 - pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp); 130 + if (!intel_private.registers) { 131 + pci_read_config_dword(intel_private.pcidev, I810_MMADDR, &temp); 152 132 temp &= 0xfff80000; 153 133 154 - intel_i810_private.registers = ioremap(temp, 128 * 4096); 155 - if (!intel_i810_private.registers) { 134 + intel_private.registers = ioremap(temp, 128 * 4096); 135 + if (!intel_private.registers) { 156 136 printk(KERN_ERR PFX "Unable to remap memory.\n"); 157 137 return -ENOMEM; 158 138 } 159 139 } 160 140 161 - if ((readl(intel_i810_private.registers+I810_DRAM_CTL) 141 + if ((readl(intel_private.registers+I810_DRAM_CTL) 162 142 & I810_DRAM_ROW_0) == I810_DRAM_ROW_0_SDRAM) { 163 143 /* This will need to be dynamically assigned */ 164 144 printk(KERN_INFO PFX "detected 4MB dedicated video ram.\n"); 165 - intel_i810_private.num_dcache_entries = 1024; 145 + intel_private.num_dcache_entries = 1024; 166 146 } 167 - pci_read_config_dword(intel_i810_private.i810_dev, I810_GMADDR, &temp); 147 + pci_read_config_dword(intel_private.pcidev, I810_GMADDR, &temp); 168 148 agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); 169 - writel(agp_bridge->gatt_bus_addr | I810_PGETBL_ENABLED, intel_i810_private.registers+I810_PGETBL_CTL); 170 - readl(intel_i810_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ 149 + writel(agp_bridge->gatt_bus_addr | I810_PGETBL_ENABLED, intel_private.registers+I810_PGETBL_CTL); 150 + readl(intel_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ 171 151 172 152 if (agp_bridge->driver->needs_scratch_page) { 173 153 for (i = 0; i < current_size->num_entries; i++) { 174 - writel(agp_bridge->scratch_page, intel_i810_private.registers+I810_PTE_BASE+(i*4)); 175 - readl(intel_i810_private.registers+I810_PTE_BASE+(i*4)); /* PCI posting. */ 154 + writel(agp_bridge->scratch_page, intel_private.registers+I810_PTE_BASE+(i*4)); 155 + readl(intel_private.registers+I810_PTE_BASE+(i*4)); /* PCI posting. */ 176 156 } 177 157 } 178 158 global_cache_flush(); ··· 181 161 182 162 static void intel_i810_cleanup(void) 183 163 { 184 - writel(0, intel_i810_private.registers+I810_PGETBL_CTL); 185 - readl(intel_i810_private.registers); /* PCI Posting. */ 186 - iounmap(intel_i810_private.registers); 164 + writel(0, intel_private.registers+I810_PGETBL_CTL); 165 + readl(intel_private.registers); /* PCI Posting. */ 166 + iounmap(intel_private.registers); 187 167 } 188 168 189 169 static void intel_i810_tlbflush(struct agp_memory *mem) ··· 281 261 global_cache_flush(); 282 262 for (i = pg_start; i < (pg_start + mem->page_count); i++) { 283 263 writel((i*4096)|I810_PTE_LOCAL|I810_PTE_VALID, 284 - intel_i810_private.registers+I810_PTE_BASE+(i*4)); 264 + intel_private.registers+I810_PTE_BASE+(i*4)); 285 265 } 286 - readl(intel_i810_private.registers+I810_PTE_BASE+((i-1)*4)); 266 + readl(intel_private.registers+I810_PTE_BASE+((i-1)*4)); 287 267 break; 288 268 case AGP_PHYS_MEMORY: 289 269 case AGP_NORMAL_MEMORY: ··· 293 273 writel(agp_bridge->driver->mask_memory(agp_bridge, 294 274 mem->memory[i], 295 275 mask_type), 296 - intel_i810_private.registers+I810_PTE_BASE+(j*4)); 276 + intel_private.registers+I810_PTE_BASE+(j*4)); 297 277 } 298 - readl(intel_i810_private.registers+I810_PTE_BASE+((j-1)*4)); 278 + readl(intel_private.registers+I810_PTE_BASE+((j-1)*4)); 299 279 break; 300 280 default: 301 281 goto out_err; ··· 318 298 return 0; 319 299 320 300 for (i = pg_start; i < (mem->page_count + pg_start); i++) { 321 - writel(agp_bridge->scratch_page, intel_i810_private.registers+I810_PTE_BASE+(i*4)); 301 + writel(agp_bridge->scratch_page, intel_private.registers+I810_PTE_BASE+(i*4)); 322 302 } 323 - readl(intel_i810_private.registers+I810_PTE_BASE+((i-1)*4)); 303 + readl(intel_private.registers+I810_PTE_BASE+((i-1)*4)); 324 304 325 305 agp_bridge->driver->tlb_flush(mem); 326 306 return 0; ··· 374 354 struct agp_memory *new; 375 355 376 356 if (type == AGP_DCACHE_MEMORY) { 377 - if (pg_count != intel_i810_private.num_dcache_entries) 357 + if (pg_count != intel_private.num_dcache_entries) 378 358 return NULL; 379 359 380 360 new = agp_create_memory(1); ··· 424 404 {512, 131072, 7}, 425 405 }; 426 406 427 - static struct _intel_i830_private { 428 - struct pci_dev *i830_dev; /* device one */ 429 - volatile u8 __iomem *registers; 430 - volatile u32 __iomem *gtt; /* I915G */ 431 - /* gtt_entries is the number of gtt entries that are already mapped 432 - * to stolen memory. Stolen memory is larger than the memory mapped 433 - * through gtt_entries, as it includes some reserved space for the BIOS 434 - * popup and for the GTT. 435 - */ 436 - int gtt_entries; 437 - } intel_i830_private; 438 - 439 407 static void intel_i830_init_gtt_entries(void) 440 408 { 441 409 u16 gmch_ctrl; ··· 437 429 438 430 if (IS_I965) { 439 431 u32 pgetbl_ctl; 440 - pgetbl_ctl = readl(intel_i830_private.registers+I810_PGETBL_CTL); 432 + pgetbl_ctl = readl(intel_private.registers+I810_PGETBL_CTL); 441 433 442 434 /* The 965 has a field telling us the size of the GTT, 443 435 * which may be larger than what is necessary to map the ··· 459 451 size = 512; 460 452 } 461 453 size += 4; /* add in BIOS popup space */ 454 + } else if (IS_G33) { 455 + /* G33's GTT size defined in gmch_ctrl */ 456 + switch (gmch_ctrl & G33_PGETBL_SIZE_MASK) { 457 + case G33_PGETBL_SIZE_1M: 458 + size = 1024; 459 + break; 460 + case G33_PGETBL_SIZE_2M: 461 + size = 2048; 462 + break; 463 + default: 464 + printk(KERN_INFO PFX "Unknown page table size 0x%x, " 465 + "assuming 512KB\n", 466 + (gmch_ctrl & G33_PGETBL_SIZE_MASK)); 467 + size = 512; 468 + } 469 + size += 4; 462 470 } else { 463 471 /* On previous hardware, the GTT size was just what was 464 472 * required to map the aperture. ··· 495 471 gtt_entries = MB(8) - KB(size); 496 472 break; 497 473 case I830_GMCH_GMS_LOCAL: 498 - rdct = readb(intel_i830_private.registers+I830_RDRAM_CHANNEL_TYPE); 474 + rdct = readb(intel_private.registers+I830_RDRAM_CHANNEL_TYPE); 499 475 gtt_entries = (I830_RDRAM_ND(rdct) + 1) * 500 476 MB(ddt[I830_RDRAM_DDT(rdct)]); 501 477 local = 1; ··· 526 502 if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB || 527 503 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB || 528 504 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB || 529 - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB || IS_I965 ) 505 + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB || 506 + IS_I965 || IS_G33) 530 507 gtt_entries = MB(48) - KB(size); 531 508 else 532 509 gtt_entries = 0; ··· 537 512 if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB || 538 513 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB || 539 514 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB || 540 - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB || IS_I965) 515 + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB || 516 + IS_I965 || IS_G33) 541 517 gtt_entries = MB(64) - KB(size); 542 518 else 543 519 gtt_entries = 0; 520 + break; 521 + case G33_GMCH_GMS_STOLEN_128M: 522 + if (IS_G33) 523 + gtt_entries = MB(128) - KB(size); 524 + else 525 + gtt_entries = 0; 526 + break; 527 + case G33_GMCH_GMS_STOLEN_256M: 528 + if (IS_G33) 529 + gtt_entries = MB(256) - KB(size); 530 + else 531 + gtt_entries = 0; 532 + break; 544 533 default: 545 534 gtt_entries = 0; 546 535 break; ··· 568 529 "No pre-allocated video memory detected.\n"); 569 530 gtt_entries /= KB(4); 570 531 571 - intel_i830_private.gtt_entries = gtt_entries; 532 + intel_private.gtt_entries = gtt_entries; 572 533 } 573 534 574 535 /* The intel i830 automatically initializes the agp aperture during POST. ··· 586 547 num_entries = size->num_entries; 587 548 agp_bridge->gatt_table_real = NULL; 588 549 589 - pci_read_config_dword(intel_i830_private.i830_dev,I810_MMADDR,&temp); 550 + pci_read_config_dword(intel_private.pcidev,I810_MMADDR,&temp); 590 551 temp &= 0xfff80000; 591 552 592 - intel_i830_private.registers = ioremap(temp,128 * 4096); 593 - if (!intel_i830_private.registers) 553 + intel_private.registers = ioremap(temp,128 * 4096); 554 + if (!intel_private.registers) 594 555 return -ENOMEM; 595 556 596 - temp = readl(intel_i830_private.registers+I810_PGETBL_CTL) & 0xfffff000; 557 + temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000; 597 558 global_cache_flush(); /* FIXME: ?? */ 598 559 599 560 /* we have to call this as early as possible after the MMIO base address is known */ ··· 653 614 654 615 current_size = A_SIZE_FIX(agp_bridge->current_size); 655 616 656 - pci_read_config_dword(intel_i830_private.i830_dev,I810_GMADDR,&temp); 617 + pci_read_config_dword(intel_private.pcidev,I810_GMADDR,&temp); 657 618 agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); 658 619 659 620 pci_read_config_word(agp_bridge->dev,I830_GMCH_CTRL,&gmch_ctrl); 660 621 gmch_ctrl |= I830_GMCH_ENABLED; 661 622 pci_write_config_word(agp_bridge->dev,I830_GMCH_CTRL,gmch_ctrl); 662 623 663 - writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_i830_private.registers+I810_PGETBL_CTL); 664 - readl(intel_i830_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ 624 + writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_private.registers+I810_PGETBL_CTL); 625 + readl(intel_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ 665 626 666 627 if (agp_bridge->driver->needs_scratch_page) { 667 - for (i = intel_i830_private.gtt_entries; i < current_size->num_entries; i++) { 668 - writel(agp_bridge->scratch_page, intel_i830_private.registers+I810_PTE_BASE+(i*4)); 669 - readl(intel_i830_private.registers+I810_PTE_BASE+(i*4)); /* PCI Posting. */ 628 + for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) { 629 + writel(agp_bridge->scratch_page, intel_private.registers+I810_PTE_BASE+(i*4)); 630 + readl(intel_private.registers+I810_PTE_BASE+(i*4)); /* PCI Posting. */ 670 631 } 671 632 } 672 633 ··· 676 637 677 638 static void intel_i830_cleanup(void) 678 639 { 679 - iounmap(intel_i830_private.registers); 640 + iounmap(intel_private.registers); 680 641 } 681 642 682 643 static int intel_i830_insert_entries(struct agp_memory *mem,off_t pg_start, int type) ··· 692 653 temp = agp_bridge->current_size; 693 654 num_entries = A_SIZE_FIX(temp)->num_entries; 694 655 695 - if (pg_start < intel_i830_private.gtt_entries) { 696 - printk (KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_i830_private.gtt_entries == 0x%.8x\n", 697 - pg_start,intel_i830_private.gtt_entries); 656 + if (pg_start < intel_private.gtt_entries) { 657 + printk (KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_private.gtt_entries == 0x%.8x\n", 658 + pg_start,intel_private.gtt_entries); 698 659 699 660 printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); 700 661 goto out_err; ··· 722 683 for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { 723 684 writel(agp_bridge->driver->mask_memory(agp_bridge, 724 685 mem->memory[i], mask_type), 725 - intel_i830_private.registers+I810_PTE_BASE+(j*4)); 686 + intel_private.registers+I810_PTE_BASE+(j*4)); 726 687 } 727 - readl(intel_i830_private.registers+I810_PTE_BASE+((j-1)*4)); 688 + readl(intel_private.registers+I810_PTE_BASE+((j-1)*4)); 728 689 agp_bridge->driver->tlb_flush(mem); 729 690 730 691 out: ··· 742 703 if (mem->page_count == 0) 743 704 return 0; 744 705 745 - if (pg_start < intel_i830_private.gtt_entries) { 706 + if (pg_start < intel_private.gtt_entries) { 746 707 printk (KERN_INFO PFX "Trying to disable local/stolen memory\n"); 747 708 return -EINVAL; 748 709 } 749 710 750 711 for (i = pg_start; i < (mem->page_count + pg_start); i++) { 751 - writel(agp_bridge->scratch_page, intel_i830_private.registers+I810_PTE_BASE+(i*4)); 712 + writel(agp_bridge->scratch_page, intel_private.registers+I810_PTE_BASE+(i*4)); 752 713 } 753 - readl(intel_i830_private.registers+I810_PTE_BASE+((i-1)*4)); 714 + readl(intel_private.registers+I810_PTE_BASE+((i-1)*4)); 754 715 755 716 agp_bridge->driver->tlb_flush(mem); 756 717 return 0; ··· 773 734 774 735 current_size = A_SIZE_FIX(agp_bridge->current_size); 775 736 776 - pci_read_config_dword(intel_i830_private.i830_dev, I915_GMADDR, &temp); 737 + pci_read_config_dword(intel_private.pcidev, I915_GMADDR, &temp); 777 738 778 739 agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); 779 740 ··· 781 742 gmch_ctrl |= I830_GMCH_ENABLED; 782 743 pci_write_config_word(agp_bridge->dev,I830_GMCH_CTRL,gmch_ctrl); 783 744 784 - writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_i830_private.registers+I810_PGETBL_CTL); 785 - readl(intel_i830_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ 745 + writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_private.registers+I810_PGETBL_CTL); 746 + readl(intel_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ 786 747 787 748 if (agp_bridge->driver->needs_scratch_page) { 788 - for (i = intel_i830_private.gtt_entries; i < current_size->num_entries; i++) { 789 - writel(agp_bridge->scratch_page, intel_i830_private.gtt+i); 790 - readl(intel_i830_private.gtt+i); /* PCI Posting. */ 749 + for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) { 750 + writel(agp_bridge->scratch_page, intel_private.gtt+i); 751 + readl(intel_private.gtt+i); /* PCI Posting. */ 791 752 } 792 753 } 793 754 ··· 797 758 798 759 static void intel_i915_cleanup(void) 799 760 { 800 - iounmap(intel_i830_private.gtt); 801 - iounmap(intel_i830_private.registers); 761 + iounmap(intel_private.gtt); 762 + iounmap(intel_private.registers); 802 763 } 803 764 804 765 static int intel_i915_insert_entries(struct agp_memory *mem,off_t pg_start, ··· 815 776 temp = agp_bridge->current_size; 816 777 num_entries = A_SIZE_FIX(temp)->num_entries; 817 778 818 - if (pg_start < intel_i830_private.gtt_entries) { 819 - printk (KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_i830_private.gtt_entries == 0x%.8x\n", 820 - pg_start,intel_i830_private.gtt_entries); 779 + if (pg_start < intel_private.gtt_entries) { 780 + printk (KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_private.gtt_entries == 0x%.8x\n", 781 + pg_start,intel_private.gtt_entries); 821 782 822 783 printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n"); 823 784 goto out_err; ··· 844 805 845 806 for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { 846 807 writel(agp_bridge->driver->mask_memory(agp_bridge, 847 - mem->memory[i], mask_type), intel_i830_private.gtt+j); 808 + mem->memory[i], mask_type), intel_private.gtt+j); 848 809 } 849 810 850 - readl(intel_i830_private.gtt+j-1); 811 + readl(intel_private.gtt+j-1); 851 812 agp_bridge->driver->tlb_flush(mem); 852 813 853 814 out: ··· 865 826 if (mem->page_count == 0) 866 827 return 0; 867 828 868 - if (pg_start < intel_i830_private.gtt_entries) { 829 + if (pg_start < intel_private.gtt_entries) { 869 830 printk (KERN_INFO PFX "Trying to disable local/stolen memory\n"); 870 831 return -EINVAL; 871 832 } 872 833 873 834 for (i = pg_start; i < (mem->page_count + pg_start); i++) { 874 - writel(agp_bridge->scratch_page, intel_i830_private.gtt+i); 835 + writel(agp_bridge->scratch_page, intel_private.gtt+i); 875 836 } 876 - readl(intel_i830_private.gtt+i-1); 837 + readl(intel_private.gtt+i-1); 877 838 878 839 agp_bridge->driver->tlb_flush(mem); 879 840 return 0; ··· 889 850 int aper_size; /* size in megabytes */ 890 851 int i; 891 852 892 - aper_size = pci_resource_len(intel_i830_private.i830_dev, 2) / MB(1); 853 + aper_size = pci_resource_len(intel_private.pcidev, 2) / MB(1); 893 854 894 855 for (i = 0; i < num_sizes; i++) { 895 856 if (aper_size == intel_i830_sizes[i].size) { ··· 917 878 num_entries = size->num_entries; 918 879 agp_bridge->gatt_table_real = NULL; 919 880 920 - pci_read_config_dword(intel_i830_private.i830_dev, I915_MMADDR, &temp); 921 - pci_read_config_dword(intel_i830_private.i830_dev, I915_PTEADDR,&temp2); 881 + pci_read_config_dword(intel_private.pcidev, I915_MMADDR, &temp); 882 + pci_read_config_dword(intel_private.pcidev, I915_PTEADDR,&temp2); 922 883 923 - intel_i830_private.gtt = ioremap(temp2, 256 * 1024); 924 - if (!intel_i830_private.gtt) 884 + intel_private.gtt = ioremap(temp2, 256 * 1024); 885 + if (!intel_private.gtt) 925 886 return -ENOMEM; 926 887 927 888 temp &= 0xfff80000; 928 889 929 - intel_i830_private.registers = ioremap(temp,128 * 4096); 930 - if (!intel_i830_private.registers) 890 + intel_private.registers = ioremap(temp,128 * 4096); 891 + if (!intel_private.registers) 931 892 return -ENOMEM; 932 893 933 - temp = readl(intel_i830_private.registers+I810_PGETBL_CTL) & 0xfffff000; 894 + temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000; 934 895 global_cache_flush(); /* FIXME: ? */ 935 896 936 897 /* we have to call this as early as possible after the MMIO base address is known */ ··· 977 938 num_entries = size->num_entries; 978 939 agp_bridge->gatt_table_real = NULL; 979 940 980 - pci_read_config_dword(intel_i830_private.i830_dev, I915_MMADDR, &temp); 941 + pci_read_config_dword(intel_private.pcidev, I915_MMADDR, &temp); 981 942 982 943 temp &= 0xfff00000; 983 - intel_i830_private.gtt = ioremap((temp + (512 * 1024)) , 512 * 1024); 944 + intel_private.gtt = ioremap((temp + (512 * 1024)) , 512 * 1024); 984 945 985 - if (!intel_i830_private.gtt) 946 + if (!intel_private.gtt) 986 947 return -ENOMEM; 987 948 988 949 989 - intel_i830_private.registers = ioremap(temp,128 * 4096); 990 - if (!intel_i830_private.registers) 950 + intel_private.registers = ioremap(temp,128 * 4096); 951 + if (!intel_private.registers) 991 952 return -ENOMEM; 992 953 993 - temp = readl(intel_i830_private.registers+I810_PGETBL_CTL) & 0xfffff000; 954 + temp = readl(intel_private.registers+I810_PGETBL_CTL) & 0xfffff000; 994 955 global_cache_flush(); /* FIXME: ? */ 995 956 996 957 /* we have to call this as early as possible after the MMIO base address is known */ ··· 1761 1722 .agp_type_to_mask_type = agp_generic_type_to_mask_type, 1762 1723 }; 1763 1724 1764 - static int find_i810(u16 device) 1725 + static const struct agp_bridge_driver intel_g33_driver = { 1726 + .owner = THIS_MODULE, 1727 + .aperture_sizes = intel_i830_sizes, 1728 + .size_type = FIXED_APER_SIZE, 1729 + .num_aperture_sizes = 4, 1730 + .needs_scratch_page = TRUE, 1731 + .configure = intel_i915_configure, 1732 + .fetch_size = intel_i9xx_fetch_size, 1733 + .cleanup = intel_i915_cleanup, 1734 + .tlb_flush = intel_i810_tlbflush, 1735 + .mask_memory = intel_i965_mask_memory, 1736 + .masks = intel_i810_masks, 1737 + .agp_enable = intel_i810_agp_enable, 1738 + .cache_flush = global_cache_flush, 1739 + .create_gatt_table = intel_i915_create_gatt_table, 1740 + .free_gatt_table = intel_i830_free_gatt_table, 1741 + .insert_memory = intel_i915_insert_entries, 1742 + .remove_memory = intel_i915_remove_entries, 1743 + .alloc_by_type = intel_i830_alloc_by_type, 1744 + .free_by_type = intel_i810_free_by_type, 1745 + .agp_alloc_page = agp_generic_alloc_page, 1746 + .agp_destroy_page = agp_generic_destroy_page, 1747 + .agp_type_to_mask_type = intel_i830_type_to_mask_type, 1748 + }; 1749 + 1750 + static int find_gmch(u16 device) 1765 1751 { 1766 - struct pci_dev *i810_dev; 1752 + struct pci_dev *gmch_device; 1767 1753 1768 - i810_dev = pci_get_device(PCI_VENDOR_ID_INTEL, device, NULL); 1769 - if (!i810_dev) 1770 - return 0; 1771 - intel_i810_private.i810_dev = i810_dev; 1772 - return 1; 1773 - } 1774 - 1775 - static int find_i830(u16 device) 1776 - { 1777 - struct pci_dev *i830_dev; 1778 - 1779 - i830_dev = pci_get_device(PCI_VENDOR_ID_INTEL, device, NULL); 1780 - if (i830_dev && PCI_FUNC(i830_dev->devfn) != 0) { 1781 - i830_dev = pci_get_device(PCI_VENDOR_ID_INTEL, 1782 - device, i830_dev); 1754 + gmch_device = pci_get_device(PCI_VENDOR_ID_INTEL, device, NULL); 1755 + if (gmch_device && PCI_FUNC(gmch_device->devfn) != 0) { 1756 + gmch_device = pci_get_device(PCI_VENDOR_ID_INTEL, 1757 + device, gmch_device); 1783 1758 } 1784 1759 1785 - if (!i830_dev) 1760 + if (!gmch_device) 1786 1761 return 0; 1787 1762 1788 - intel_i830_private.i830_dev = i830_dev; 1763 + intel_private.pcidev = gmch_device; 1789 1764 return 1; 1790 1765 } 1766 + 1767 + /* Table to describe Intel GMCH and AGP/PCIE GART drivers. At least one of 1768 + * driver and gmch_driver must be non-null, and find_gmch will determine 1769 + * which one should be used if a gmch_chip_id is present. 1770 + */ 1771 + static const struct intel_driver_description { 1772 + unsigned int chip_id; 1773 + unsigned int gmch_chip_id; 1774 + char *name; 1775 + const struct agp_bridge_driver *driver; 1776 + const struct agp_bridge_driver *gmch_driver; 1777 + } intel_agp_chipsets[] = { 1778 + { PCI_DEVICE_ID_INTEL_82443LX_0, 0, "440LX", &intel_generic_driver, NULL }, 1779 + { PCI_DEVICE_ID_INTEL_82443BX_0, 0, "440BX", &intel_generic_driver, NULL }, 1780 + { PCI_DEVICE_ID_INTEL_82443GX_0, 0, "440GX", &intel_generic_driver, NULL }, 1781 + { PCI_DEVICE_ID_INTEL_82810_MC1, PCI_DEVICE_ID_INTEL_82810_IG1, "i810", 1782 + NULL, &intel_810_driver }, 1783 + { PCI_DEVICE_ID_INTEL_82810_MC3, PCI_DEVICE_ID_INTEL_82810_IG3, "i810", 1784 + NULL, &intel_810_driver }, 1785 + { PCI_DEVICE_ID_INTEL_82810E_MC, PCI_DEVICE_ID_INTEL_82810E_IG, "i810", 1786 + NULL, &intel_810_driver }, 1787 + { PCI_DEVICE_ID_INTEL_82815_MC, PCI_DEVICE_ID_INTEL_82815_CGC, "i815", 1788 + &intel_810_driver, &intel_815_driver }, 1789 + { PCI_DEVICE_ID_INTEL_82820_HB, 0, "i820", &intel_820_driver, NULL }, 1790 + { PCI_DEVICE_ID_INTEL_82820_UP_HB, 0, "i820", &intel_820_driver, NULL }, 1791 + { PCI_DEVICE_ID_INTEL_82830_HB, PCI_DEVICE_ID_INTEL_82830_CGC, "830M", 1792 + &intel_830mp_driver, &intel_830_driver }, 1793 + { PCI_DEVICE_ID_INTEL_82840_HB, 0, "i840", &intel_840_driver, NULL }, 1794 + { PCI_DEVICE_ID_INTEL_82845_HB, 0, "845G", &intel_845_driver, NULL }, 1795 + { PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, "830M", 1796 + &intel_845_driver, &intel_830_driver }, 1797 + { PCI_DEVICE_ID_INTEL_82850_HB, 0, "i850", &intel_850_driver, NULL }, 1798 + { PCI_DEVICE_ID_INTEL_82855PM_HB, 0, "855PM", &intel_845_driver, NULL }, 1799 + { PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, "855GM", 1800 + &intel_845_driver, &intel_830_driver }, 1801 + { PCI_DEVICE_ID_INTEL_82860_HB, 0, "i860", &intel_860_driver, NULL }, 1802 + { PCI_DEVICE_ID_INTEL_82865_HB, PCI_DEVICE_ID_INTEL_82865_IG, "865", 1803 + &intel_845_driver, &intel_830_driver }, 1804 + { PCI_DEVICE_ID_INTEL_82875_HB, 0, "i875", &intel_845_driver, NULL }, 1805 + { PCI_DEVICE_ID_INTEL_82915G_HB, PCI_DEVICE_ID_INTEL_82915G_IG, "915G", 1806 + &intel_845_driver, &intel_915_driver }, 1807 + { PCI_DEVICE_ID_INTEL_82915GM_HB, PCI_DEVICE_ID_INTEL_82915GM_IG, "915GM", 1808 + &intel_845_driver, &intel_915_driver }, 1809 + { PCI_DEVICE_ID_INTEL_82945G_HB, PCI_DEVICE_ID_INTEL_82945G_IG, "945G", 1810 + &intel_845_driver, &intel_915_driver }, 1811 + { PCI_DEVICE_ID_INTEL_82945GM_HB, PCI_DEVICE_ID_INTEL_82945GM_IG, "945GM", 1812 + &intel_845_driver, &intel_915_driver }, 1813 + { PCI_DEVICE_ID_INTEL_82945GM_HB, PCI_DEVICE_ID_INTEL_82945GME_IG, "945GME", 1814 + &intel_845_driver, &intel_915_driver }, 1815 + { PCI_DEVICE_ID_INTEL_82946GZ_HB, PCI_DEVICE_ID_INTEL_82946GZ_IG, "946GZ", 1816 + &intel_845_driver, &intel_i965_driver }, 1817 + { PCI_DEVICE_ID_INTEL_82965G_1_HB, PCI_DEVICE_ID_INTEL_82965G_1_IG, "965G", 1818 + &intel_845_driver, &intel_i965_driver }, 1819 + { PCI_DEVICE_ID_INTEL_82965Q_HB, PCI_DEVICE_ID_INTEL_82965Q_IG, "965Q", 1820 + &intel_845_driver, &intel_i965_driver }, 1821 + { PCI_DEVICE_ID_INTEL_82965G_HB, PCI_DEVICE_ID_INTEL_82965G_IG, "965G", 1822 + &intel_845_driver, &intel_i965_driver }, 1823 + { PCI_DEVICE_ID_INTEL_82965GM_HB, PCI_DEVICE_ID_INTEL_82965GM_IG, "965GM", 1824 + &intel_845_driver, &intel_i965_driver }, 1825 + { PCI_DEVICE_ID_INTEL_82965GM_HB, PCI_DEVICE_ID_INTEL_82965GME_IG, "965GME/GLE", 1826 + &intel_845_driver, &intel_i965_driver }, 1827 + { PCI_DEVICE_ID_INTEL_7505_0, 0, "E7505", &intel_7505_driver, NULL }, 1828 + { PCI_DEVICE_ID_INTEL_7205_0, 0, "E7205", &intel_7505_driver, NULL }, 1829 + { PCI_DEVICE_ID_INTEL_G33_HB, PCI_DEVICE_ID_INTEL_G33_IG, "G33", 1830 + &intel_845_driver, &intel_g33_driver }, 1831 + { PCI_DEVICE_ID_INTEL_Q35_HB, PCI_DEVICE_ID_INTEL_Q35_IG, "Q35", 1832 + &intel_845_driver, &intel_g33_driver }, 1833 + { PCI_DEVICE_ID_INTEL_Q33_HB, PCI_DEVICE_ID_INTEL_Q33_IG, "Q33", 1834 + &intel_845_driver, &intel_g33_driver }, 1835 + { 0, 0, NULL, NULL, NULL } 1836 + }; 1791 1837 1792 1838 static int __devinit agp_intel_probe(struct pci_dev *pdev, 1793 1839 const struct pci_device_id *ent) 1794 1840 { 1795 1841 struct agp_bridge_data *bridge; 1796 - char *name = "(unknown)"; 1797 1842 u8 cap_ptr = 0; 1798 1843 struct resource *r; 1844 + int i; 1799 1845 1800 1846 cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); 1801 1847 ··· 1888 1764 if (!bridge) 1889 1765 return -ENOMEM; 1890 1766 1891 - switch (pdev->device) { 1892 - case PCI_DEVICE_ID_INTEL_82443LX_0: 1893 - bridge->driver = &intel_generic_driver; 1894 - name = "440LX"; 1895 - break; 1896 - case PCI_DEVICE_ID_INTEL_82443BX_0: 1897 - bridge->driver = &intel_generic_driver; 1898 - name = "440BX"; 1899 - break; 1900 - case PCI_DEVICE_ID_INTEL_82443GX_0: 1901 - bridge->driver = &intel_generic_driver; 1902 - name = "440GX"; 1903 - break; 1904 - case PCI_DEVICE_ID_INTEL_82810_MC1: 1905 - name = "i810"; 1906 - if (!find_i810(PCI_DEVICE_ID_INTEL_82810_IG1)) 1907 - goto fail; 1908 - bridge->driver = &intel_810_driver; 1909 - break; 1910 - case PCI_DEVICE_ID_INTEL_82810_MC3: 1911 - name = "i810 DC100"; 1912 - if (!find_i810(PCI_DEVICE_ID_INTEL_82810_IG3)) 1913 - goto fail; 1914 - bridge->driver = &intel_810_driver; 1915 - break; 1916 - case PCI_DEVICE_ID_INTEL_82810E_MC: 1917 - name = "i810 E"; 1918 - if (!find_i810(PCI_DEVICE_ID_INTEL_82810E_IG)) 1919 - goto fail; 1920 - bridge->driver = &intel_810_driver; 1921 - break; 1922 - case PCI_DEVICE_ID_INTEL_82815_MC: 1923 - /* 1924 - * The i815 can operate either as an i810 style 1925 - * integrated device, or as an AGP4X motherboard. 1926 - */ 1927 - if (find_i810(PCI_DEVICE_ID_INTEL_82815_CGC)) 1928 - bridge->driver = &intel_810_driver; 1929 - else 1930 - bridge->driver = &intel_815_driver; 1931 - name = "i815"; 1932 - break; 1933 - case PCI_DEVICE_ID_INTEL_82820_HB: 1934 - case PCI_DEVICE_ID_INTEL_82820_UP_HB: 1935 - bridge->driver = &intel_820_driver; 1936 - name = "i820"; 1937 - break; 1938 - case PCI_DEVICE_ID_INTEL_82830_HB: 1939 - if (find_i830(PCI_DEVICE_ID_INTEL_82830_CGC)) 1940 - bridge->driver = &intel_830_driver; 1941 - else 1942 - bridge->driver = &intel_830mp_driver; 1943 - name = "830M"; 1944 - break; 1945 - case PCI_DEVICE_ID_INTEL_82840_HB: 1946 - bridge->driver = &intel_840_driver; 1947 - name = "i840"; 1948 - break; 1949 - case PCI_DEVICE_ID_INTEL_82845_HB: 1950 - bridge->driver = &intel_845_driver; 1951 - name = "i845"; 1952 - break; 1953 - case PCI_DEVICE_ID_INTEL_82845G_HB: 1954 - if (find_i830(PCI_DEVICE_ID_INTEL_82845G_IG)) 1955 - bridge->driver = &intel_830_driver; 1956 - else 1957 - bridge->driver = &intel_845_driver; 1958 - name = "845G"; 1959 - break; 1960 - case PCI_DEVICE_ID_INTEL_82850_HB: 1961 - bridge->driver = &intel_850_driver; 1962 - name = "i850"; 1963 - break; 1964 - case PCI_DEVICE_ID_INTEL_82855PM_HB: 1965 - bridge->driver = &intel_845_driver; 1966 - name = "855PM"; 1967 - break; 1968 - case PCI_DEVICE_ID_INTEL_82855GM_HB: 1969 - if (find_i830(PCI_DEVICE_ID_INTEL_82855GM_IG)) { 1970 - bridge->driver = &intel_830_driver; 1971 - name = "855"; 1972 - } else { 1973 - bridge->driver = &intel_845_driver; 1974 - name = "855GM"; 1975 - } 1976 - break; 1977 - case PCI_DEVICE_ID_INTEL_82860_HB: 1978 - bridge->driver = &intel_860_driver; 1979 - name = "i860"; 1980 - break; 1981 - case PCI_DEVICE_ID_INTEL_82865_HB: 1982 - if (find_i830(PCI_DEVICE_ID_INTEL_82865_IG)) 1983 - bridge->driver = &intel_830_driver; 1984 - else 1985 - bridge->driver = &intel_845_driver; 1986 - name = "865"; 1987 - break; 1988 - case PCI_DEVICE_ID_INTEL_82875_HB: 1989 - bridge->driver = &intel_845_driver; 1990 - name = "i875"; 1991 - break; 1992 - case PCI_DEVICE_ID_INTEL_82915G_HB: 1993 - if (find_i830(PCI_DEVICE_ID_INTEL_82915G_IG)) 1994 - bridge->driver = &intel_915_driver; 1995 - else 1996 - bridge->driver = &intel_845_driver; 1997 - name = "915G"; 1998 - break; 1999 - case PCI_DEVICE_ID_INTEL_82915GM_HB: 2000 - if (find_i830(PCI_DEVICE_ID_INTEL_82915GM_IG)) 2001 - bridge->driver = &intel_915_driver; 2002 - else 2003 - bridge->driver = &intel_845_driver; 2004 - name = "915GM"; 2005 - break; 2006 - case PCI_DEVICE_ID_INTEL_82945G_HB: 2007 - if (find_i830(PCI_DEVICE_ID_INTEL_82945G_IG)) 2008 - bridge->driver = &intel_915_driver; 2009 - else 2010 - bridge->driver = &intel_845_driver; 2011 - name = "945G"; 2012 - break; 2013 - case PCI_DEVICE_ID_INTEL_82945GM_HB: 2014 - if (find_i830(PCI_DEVICE_ID_INTEL_82945GM_IG)) 2015 - bridge->driver = &intel_915_driver; 2016 - else 2017 - bridge->driver = &intel_845_driver; 2018 - name = "945GM"; 2019 - break; 2020 - case PCI_DEVICE_ID_INTEL_82946GZ_HB: 2021 - if (find_i830(PCI_DEVICE_ID_INTEL_82946GZ_IG)) 2022 - bridge->driver = &intel_i965_driver; 2023 - else 2024 - bridge->driver = &intel_845_driver; 2025 - name = "946GZ"; 2026 - break; 2027 - case PCI_DEVICE_ID_INTEL_82965G_1_HB: 2028 - if (find_i830(PCI_DEVICE_ID_INTEL_82965G_1_IG)) 2029 - bridge->driver = &intel_i965_driver; 2030 - else 2031 - bridge->driver = &intel_845_driver; 2032 - name = "965G"; 2033 - break; 2034 - case PCI_DEVICE_ID_INTEL_82965Q_HB: 2035 - if (find_i830(PCI_DEVICE_ID_INTEL_82965Q_IG)) 2036 - bridge->driver = &intel_i965_driver; 2037 - else 2038 - bridge->driver = &intel_845_driver; 2039 - name = "965Q"; 2040 - break; 2041 - case PCI_DEVICE_ID_INTEL_82965G_HB: 2042 - if (find_i830(PCI_DEVICE_ID_INTEL_82965G_IG)) 2043 - bridge->driver = &intel_i965_driver; 2044 - else 2045 - bridge->driver = &intel_845_driver; 2046 - name = "965G"; 2047 - break; 2048 - case PCI_DEVICE_ID_INTEL_82965GM_HB: 2049 - if (find_i830(PCI_DEVICE_ID_INTEL_82965GM_IG)) 2050 - bridge->driver = &intel_i965_driver; 2051 - else 2052 - bridge->driver = &intel_845_driver; 2053 - name = "965GM"; 2054 - break; 2055 - case PCI_DEVICE_ID_INTEL_7505_0: 2056 - bridge->driver = &intel_7505_driver; 2057 - name = "E7505"; 2058 - break; 2059 - case PCI_DEVICE_ID_INTEL_7205_0: 2060 - bridge->driver = &intel_7505_driver; 2061 - name = "E7205"; 2062 - break; 2063 - default: 1767 + for (i = 0; intel_agp_chipsets[i].name != NULL; i++) { 1768 + /* In case that multiple models of gfx chip may 1769 + stand on same host bridge type, this can be 1770 + sure we detect the right IGD. */ 1771 + if ((pdev->device == intel_agp_chipsets[i].chip_id) && 1772 + ((intel_agp_chipsets[i].gmch_chip_id == 0) || 1773 + find_gmch(intel_agp_chipsets[i].gmch_chip_id))) 1774 + break; 1775 + } 1776 + 1777 + if (intel_agp_chipsets[i].name == NULL) { 2064 1778 if (cap_ptr) 2065 - printk(KERN_WARNING PFX "Unsupported Intel chipset (device id: %04x)\n", 2066 - pdev->device); 1779 + printk(KERN_WARNING PFX "Unsupported Intel chipset" 1780 + "(device id: %04x)\n", pdev->device); 2067 1781 agp_put_bridge(bridge); 2068 1782 return -ENODEV; 2069 - }; 1783 + } 1784 + 1785 + if (intel_agp_chipsets[i].gmch_chip_id != 0) 1786 + bridge->driver = intel_agp_chipsets[i].gmch_driver; 1787 + else 1788 + bridge->driver = intel_agp_chipsets[i].driver; 1789 + 1790 + if (bridge->driver == NULL) { 1791 + printk(KERN_WARNING PFX "Failed to find bridge device " 1792 + "(chip_id: %04x)\n", intel_agp_chipsets[i].gmch_chip_id); 1793 + agp_put_bridge(bridge); 1794 + return -ENODEV; 1795 + } 2070 1796 2071 1797 bridge->dev = pdev; 2072 1798 bridge->capndx = cap_ptr; 1799 + bridge->dev_private_data = &intel_private; 2073 1800 2074 - if (bridge->driver == &intel_810_driver) 2075 - bridge->dev_private_data = &intel_i810_private; 2076 - else if (bridge->driver == &intel_830_driver) 2077 - bridge->dev_private_data = &intel_i830_private; 2078 - 2079 - printk(KERN_INFO PFX "Detected an Intel %s Chipset.\n", name); 1801 + printk(KERN_INFO PFX "Detected an Intel %s Chipset.\n", 1802 + intel_agp_chipsets[i].name); 2080 1803 2081 1804 /* 2082 1805 * The following fixes the case where the BIOS has "forgotten" to ··· 1959 1988 1960 1989 pci_set_drvdata(pdev, bridge); 1961 1990 return agp_add_bridge(bridge); 1962 - 1963 - fail: 1964 - printk(KERN_ERR PFX "Detected an Intel %s chipset, " 1965 - "but could not find the secondary device.\n", name); 1966 - agp_put_bridge(bridge); 1967 - return -ENODEV; 1968 1991 } 1969 1992 1970 1993 static void __devexit agp_intel_remove(struct pci_dev *pdev) ··· 1967 2002 1968 2003 agp_remove_bridge(bridge); 1969 2004 1970 - if (intel_i810_private.i810_dev) 1971 - pci_dev_put(intel_i810_private.i810_dev); 1972 - if (intel_i830_private.i830_dev) 1973 - pci_dev_put(intel_i830_private.i830_dev); 2005 + if (intel_private.pcidev) 2006 + pci_dev_put(intel_private.pcidev); 1974 2007 1975 2008 agp_put_bridge(bridge); 1976 2009 } ··· 1984 2021 * as host bridge (00:00) resumes before graphics device (02:00), 1985 2022 * then our access to its pci space can work right. 1986 2023 */ 1987 - if (intel_i810_private.i810_dev) 1988 - pci_restore_state(intel_i810_private.i810_dev); 1989 - if (intel_i830_private.i830_dev) 1990 - pci_restore_state(intel_i830_private.i830_dev); 2024 + if (intel_private.pcidev) 2025 + pci_restore_state(intel_private.pcidev); 1991 2026 1992 2027 if (bridge->driver == &intel_generic_driver) 1993 2028 intel_configure(); ··· 2048 2087 ID(PCI_DEVICE_ID_INTEL_82965Q_HB), 2049 2088 ID(PCI_DEVICE_ID_INTEL_82965G_HB), 2050 2089 ID(PCI_DEVICE_ID_INTEL_82965GM_HB), 2090 + ID(PCI_DEVICE_ID_INTEL_G33_HB), 2091 + ID(PCI_DEVICE_ID_INTEL_Q35_HB), 2092 + ID(PCI_DEVICE_ID_INTEL_Q33_HB), 2051 2093 { } 2052 2094 }; 2053 2095