Commit 6585b572402e5ec7936422123b44b65fef7a5ea6
Exists in
master
and in
7 other branches
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart
* master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart: [AGPGART] Rework AGPv3 modesetting fallback. [AGPGART] Add suspend callback for i965 [AGPGART] Fix number of aperture sizes in 830 gart structs. [AGPGART] Intel 965 Express support. [AGPGART] agp.h: constify struct agp_bridge_data::version [AGPGART] const'ify VIA AGP PCI table. [AGPGART] CONFIG_PM=n slim: drivers/char/agp/intel-agp.c [AGPGART] CONFIG_PM=n slim: drivers/char/agp/efficeon-agp.c [AGPGART] Const'ify the agpgart driver version. [AGPGART] remove private page protection map
Showing 9 changed files Side-by-side Diff
drivers/char/agp/agp.h
drivers/char/agp/backend.c
... | ... | @@ -44,7 +44,7 @@ |
44 | 44 | * past 0.99 at all due to some boolean logic error. */ |
45 | 45 | #define AGPGART_VERSION_MAJOR 0 |
46 | 46 | #define AGPGART_VERSION_MINOR 101 |
47 | -static struct agp_version agp_current_version = | |
47 | +static const struct agp_version agp_current_version = | |
48 | 48 | { |
49 | 49 | .major = AGPGART_VERSION_MAJOR, |
50 | 50 | .minor = AGPGART_VERSION_MINOR, |
drivers/char/agp/efficeon-agp.c
... | ... | @@ -337,13 +337,6 @@ |
337 | 337 | .agp_destroy_page = agp_generic_destroy_page, |
338 | 338 | }; |
339 | 339 | |
340 | - | |
341 | -static int agp_efficeon_resume(struct pci_dev *pdev) | |
342 | -{ | |
343 | - printk(KERN_DEBUG PFX "agp_efficeon_resume()\n"); | |
344 | - return efficeon_configure(); | |
345 | -} | |
346 | - | |
347 | 340 | static int __devinit agp_efficeon_probe(struct pci_dev *pdev, |
348 | 341 | const struct pci_device_id *ent) |
349 | 342 | { |
350 | 343 | |
... | ... | @@ -414,11 +407,18 @@ |
414 | 407 | agp_put_bridge(bridge); |
415 | 408 | } |
416 | 409 | |
410 | +#ifdef CONFIG_PM | |
417 | 411 | static int agp_efficeon_suspend(struct pci_dev *dev, pm_message_t state) |
418 | 412 | { |
419 | 413 | return 0; |
420 | 414 | } |
421 | 415 | |
416 | +static int agp_efficeon_resume(struct pci_dev *pdev) | |
417 | +{ | |
418 | + printk(KERN_DEBUG PFX "agp_efficeon_resume()\n"); | |
419 | + return efficeon_configure(); | |
420 | +} | |
421 | +#endif | |
422 | 422 | |
423 | 423 | static struct pci_device_id agp_efficeon_pci_table[] = { |
424 | 424 | { |
425 | 425 | |
... | ... | @@ -439,8 +439,10 @@ |
439 | 439 | .id_table = agp_efficeon_pci_table, |
440 | 440 | .probe = agp_efficeon_probe, |
441 | 441 | .remove = agp_efficeon_remove, |
442 | +#ifdef CONFIG_PM | |
442 | 443 | .suspend = agp_efficeon_suspend, |
443 | 444 | .resume = agp_efficeon_resume, |
445 | +#endif | |
444 | 446 | }; |
445 | 447 | |
446 | 448 | static int __init agp_efficeon_init(void) |
drivers/char/agp/frontend.c
... | ... | @@ -151,35 +151,12 @@ |
151 | 151 | client->segments = seg; |
152 | 152 | } |
153 | 153 | |
154 | -/* Originally taken from linux/mm/mmap.c from the array | |
155 | - * protection_map. | |
156 | - * The original really should be exported to modules, or | |
157 | - * some routine which does the conversion for you | |
158 | - */ | |
159 | - | |
160 | -static const pgprot_t my_protect_map[16] = | |
161 | -{ | |
162 | - __P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111, | |
163 | - __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111 | |
164 | -}; | |
165 | - | |
166 | 154 | static pgprot_t agp_convert_mmap_flags(int prot) |
167 | 155 | { |
168 | -#define _trans(x,bit1,bit2) \ | |
169 | -((bit1==bit2)?(x&bit1):(x&bit1)?bit2:0) | |
170 | - | |
171 | 156 | unsigned long prot_bits; |
172 | - pgprot_t temp; | |
173 | 157 | |
174 | - prot_bits = _trans(prot, PROT_READ, VM_READ) | | |
175 | - _trans(prot, PROT_WRITE, VM_WRITE) | | |
176 | - _trans(prot, PROT_EXEC, VM_EXEC); | |
177 | - | |
178 | - prot_bits |= VM_SHARED; | |
179 | - | |
180 | - temp = my_protect_map[prot_bits & 0x0000000f]; | |
181 | - | |
182 | - return temp; | |
158 | + prot_bits = calc_vm_prot_bits(prot) | VM_SHARED; | |
159 | + return vm_get_page_prot(prot_bits); | |
183 | 160 | } |
184 | 161 | |
185 | 162 | static int agp_create_segment(struct agp_client *client, struct agp_region *region) |
drivers/char/agp/generic.c
... | ... | @@ -568,25 +568,34 @@ |
568 | 568 | *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); |
569 | 569 | goto done; |
570 | 570 | |
571 | + } else if (*requested_mode & AGPSTAT3_4X) { | |
572 | + *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | |
573 | + *bridge_agpstat |= AGPSTAT3_4X; | |
574 | + goto done; | |
575 | + | |
571 | 576 | } else { |
572 | 577 | |
573 | 578 | /* |
574 | - * If we didn't specify AGPx8, we can only do x4. | |
575 | - * If the hardware can't do x4, we're up shit creek, and never | |
576 | - * should have got this far. | |
579 | + * If we didn't specify an AGP mode, we see if both | |
580 | + * the graphics card, and the bridge can do x8, and use if so. | |
581 | + * If not, we fall back to x4 mode. | |
577 | 582 | */ |
578 | - *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | |
579 | - if ((*bridge_agpstat & AGPSTAT3_4X) && (*vga_agpstat & AGPSTAT3_4X)) | |
580 | - *bridge_agpstat |= AGPSTAT3_4X; | |
581 | - else { | |
582 | - printk(KERN_INFO PFX "Badness. Don't know which AGP mode to set. " | |
583 | - "[bridge_agpstat:%x vga_agpstat:%x fell back to:- bridge_agpstat:%x vga_agpstat:%x]\n", | |
584 | - origbridge, origvga, *bridge_agpstat, *vga_agpstat); | |
585 | - if (!(*bridge_agpstat & AGPSTAT3_4X)) | |
586 | - printk(KERN_INFO PFX "Bridge couldn't do AGP x4.\n"); | |
587 | - if (!(*vga_agpstat & AGPSTAT3_4X)) | |
588 | - printk(KERN_INFO PFX "Graphic card couldn't do AGP x4.\n"); | |
589 | - return; | |
583 | + if ((*bridge_agpstat & AGPSTAT3_8X) && (*vga_agpstat & AGPSTAT3_8X)) { | |
584 | + printk(KERN_INFO PFX "No AGP mode specified. Setting to highest mode supported by bridge & card (x8).\n"); | |
585 | + *bridge_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); | |
586 | + *vga_agpstat &= ~(AGPSTAT3_4X | AGPSTAT3_RSVD); | |
587 | + } else { | |
588 | + printk(KERN_INFO PFX "Fell back to AGPx4 mode because"); | |
589 | + if (!(*bridge_agpstat & AGPSTAT3_8X)) { | |
590 | + printk("bridge couldn't do x8. bridge_agpstat:%x (orig=%x)\n", *bridge_agpstat, origbridge); | |
591 | + *bridge_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | |
592 | + *bridge_agpstat |= AGPSTAT3_4X; | |
593 | + } | |
594 | + if (!(*vga_agpstat & AGPSTAT3_8X)) { | |
595 | + printk("graphics card couldn't do x8. vga_agpstat:%x (orig=%x)\n", *vga_agpstat, origvga); | |
596 | + *vga_agpstat &= ~(AGPSTAT3_8X | AGPSTAT3_RSVD); | |
597 | + *vga_agpstat |= AGPSTAT3_4X; | |
598 | + } | |
590 | 599 | } |
591 | 600 | } |
592 | 601 |
drivers/char/agp/intel-agp.c
... | ... | @@ -2,14 +2,6 @@ |
2 | 2 | * Intel AGPGART routines. |
3 | 3 | */ |
4 | 4 | |
5 | -/* | |
6 | - * Intel(R) 855GM/852GM and 865G support added by David Dawes | |
7 | - * <dawes@tungstengraphics.com>. | |
8 | - * | |
9 | - * Intel(R) 915G/915GM support added by Alan Hourihane | |
10 | - * <alanh@tungstengraphics.com>. | |
11 | - */ | |
12 | - | |
13 | 5 | #include <linux/module.h> |
14 | 6 | #include <linux/pci.h> |
15 | 7 | #include <linux/init.h> |
... | ... | @@ -17,6 +9,21 @@ |
17 | 9 | #include <linux/agp_backend.h> |
18 | 10 | #include "agp.h" |
19 | 11 | |
12 | +#define PCI_DEVICE_ID_INTEL_82946GZ_HB 0x2970 | |
13 | +#define PCI_DEVICE_ID_INTEL_82946GZ_IG 0x2972 | |
14 | +#define PCI_DEVICE_ID_INTEL_82965G_1_HB 0x2980 | |
15 | +#define PCI_DEVICE_ID_INTEL_82965G_1_IG 0x2982 | |
16 | +#define PCI_DEVICE_ID_INTEL_82965Q_HB 0x2990 | |
17 | +#define PCI_DEVICE_ID_INTEL_82965Q_IG 0x2992 | |
18 | +#define PCI_DEVICE_ID_INTEL_82965G_HB 0x29A0 | |
19 | +#define PCI_DEVICE_ID_INTEL_82965G_IG 0x29A2 | |
20 | + | |
21 | +#define IS_I965 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82946GZ_HB || \ | |
22 | + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \ | |
23 | + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \ | |
24 | + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB) | |
25 | + | |
26 | + | |
20 | 27 | /* Intel 815 register */ |
21 | 28 | #define INTEL_815_APCONT 0x51 |
22 | 29 | #define INTEL_815_ATTBASE_MASK ~0x1FFFFFFF |
... | ... | @@ -40,6 +47,8 @@ |
40 | 47 | #define I915_GMCH_GMS_STOLEN_48M (0x6 << 4) |
41 | 48 | #define I915_GMCH_GMS_STOLEN_64M (0x7 << 4) |
42 | 49 | |
50 | +/* Intel 965G registers */ | |
51 | +#define I965_MSAC 0x62 | |
43 | 52 | |
44 | 53 | /* Intel 7505 registers */ |
45 | 54 | #define INTEL_I7505_APSIZE 0x74 |
... | ... | @@ -354,6 +363,7 @@ |
354 | 363 | /* The 64M mode still requires a 128k gatt */ |
355 | 364 | {64, 16384, 5}, |
356 | 365 | {256, 65536, 6}, |
366 | + {512, 131072, 7}, | |
357 | 367 | }; |
358 | 368 | |
359 | 369 | static struct _intel_i830_private { |
360 | 370 | |
... | ... | @@ -377,8 +387,12 @@ |
377 | 387 | /* We obtain the size of the GTT, which is also stored (for some |
378 | 388 | * reason) at the top of stolen memory. Then we add 4KB to that |
379 | 389 | * for the video BIOS popup, which is also stored in there. */ |
380 | - size = agp_bridge->driver->fetch_size() + 4; | |
381 | 390 | |
391 | + if (IS_I965) | |
392 | + size = 512 + 4; | |
393 | + else | |
394 | + size = agp_bridge->driver->fetch_size() + 4; | |
395 | + | |
382 | 396 | if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB || |
383 | 397 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) { |
384 | 398 | switch (gmch_ctrl & I830_GMCH_GMS_MASK) { |
... | ... | @@ -423,7 +437,7 @@ |
423 | 437 | if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB || |
424 | 438 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB || |
425 | 439 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB || |
426 | - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB) | |
440 | + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB || IS_I965 ) | |
427 | 441 | gtt_entries = MB(48) - KB(size); |
428 | 442 | else |
429 | 443 | gtt_entries = 0; |
... | ... | @@ -433,7 +447,7 @@ |
433 | 447 | if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915G_HB || |
434 | 448 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB || |
435 | 449 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB || |
436 | - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB) | |
450 | + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB || IS_I965) | |
437 | 451 | gtt_entries = MB(64) - KB(size); |
438 | 452 | else |
439 | 453 | gtt_entries = 0; |
440 | 454 | |
... | ... | @@ -791,7 +805,78 @@ |
791 | 805 | |
792 | 806 | return 0; |
793 | 807 | } |
808 | +static int intel_i965_fetch_size(void) | |
809 | +{ | |
810 | + struct aper_size_info_fixed *values; | |
811 | + u32 offset = 0; | |
812 | + u8 temp; | |
794 | 813 | |
814 | +#define I965_512MB_ADDRESS_MASK (3<<1) | |
815 | + | |
816 | + values = A_SIZE_FIX(agp_bridge->driver->aperture_sizes); | |
817 | + | |
818 | + pci_read_config_byte(intel_i830_private.i830_dev, I965_MSAC, &temp); | |
819 | + temp &= I965_512MB_ADDRESS_MASK; | |
820 | + switch (temp) { | |
821 | + case 0x00: | |
822 | + offset = 0; /* 128MB */ | |
823 | + break; | |
824 | + case 0x06: | |
825 | + offset = 3; /* 512MB */ | |
826 | + break; | |
827 | + default: | |
828 | + case 0x02: | |
829 | + offset = 2; /* 256MB */ | |
830 | + break; | |
831 | + } | |
832 | + | |
833 | + agp_bridge->previous_size = agp_bridge->current_size = (void *)(values + offset); | |
834 | + | |
835 | + return values[offset].size; | |
836 | +} | |
837 | + | |
838 | +/* The intel i965 automatically initializes the agp aperture during POST. | |
839 | ++ * Use the memory already set aside for in the GTT. | |
840 | ++ */ | |
841 | +static int intel_i965_create_gatt_table(struct agp_bridge_data *bridge) | |
842 | +{ | |
843 | + int page_order; | |
844 | + struct aper_size_info_fixed *size; | |
845 | + int num_entries; | |
846 | + u32 temp; | |
847 | + | |
848 | + size = agp_bridge->current_size; | |
849 | + page_order = size->page_order; | |
850 | + num_entries = size->num_entries; | |
851 | + agp_bridge->gatt_table_real = NULL; | |
852 | + | |
853 | + pci_read_config_dword(intel_i830_private.i830_dev, I915_MMADDR, &temp); | |
854 | + | |
855 | + temp &= 0xfff00000; | |
856 | + intel_i830_private.gtt = ioremap((temp + (512 * 1024)) , 512 * 1024); | |
857 | + | |
858 | + if (!intel_i830_private.gtt) | |
859 | + return -ENOMEM; | |
860 | + | |
861 | + | |
862 | + intel_i830_private.registers = ioremap(temp,128 * 4096); | |
863 | + if (!intel_i830_private.registers) | |
864 | + return -ENOMEM; | |
865 | + | |
866 | + temp = readl(intel_i830_private.registers+I810_PGETBL_CTL) & 0xfffff000; | |
867 | + global_cache_flush(); /* FIXME: ? */ | |
868 | + | |
869 | + /* we have to call this as early as possible after the MMIO base address is known */ | |
870 | + intel_i830_init_gtt_entries(); | |
871 | + | |
872 | + agp_bridge->gatt_table = NULL; | |
873 | + | |
874 | + agp_bridge->gatt_bus_addr = temp; | |
875 | + | |
876 | + return 0; | |
877 | +} | |
878 | + | |
879 | + | |
795 | 880 | static int intel_fetch_size(void) |
796 | 881 | { |
797 | 882 | int i; |
... | ... | @@ -1307,7 +1392,7 @@ |
1307 | 1392 | .owner = THIS_MODULE, |
1308 | 1393 | .aperture_sizes = intel_i830_sizes, |
1309 | 1394 | .size_type = FIXED_APER_SIZE, |
1310 | - .num_aperture_sizes = 3, | |
1395 | + .num_aperture_sizes = 4, | |
1311 | 1396 | .needs_scratch_page = TRUE, |
1312 | 1397 | .configure = intel_i830_configure, |
1313 | 1398 | .fetch_size = intel_i830_fetch_size, |
... | ... | @@ -1469,7 +1554,7 @@ |
1469 | 1554 | .owner = THIS_MODULE, |
1470 | 1555 | .aperture_sizes = intel_i830_sizes, |
1471 | 1556 | .size_type = FIXED_APER_SIZE, |
1472 | - .num_aperture_sizes = 3, | |
1557 | + .num_aperture_sizes = 4, | |
1473 | 1558 | .needs_scratch_page = TRUE, |
1474 | 1559 | .configure = intel_i915_configure, |
1475 | 1560 | .fetch_size = intel_i915_fetch_size, |
... | ... | @@ -1489,6 +1574,29 @@ |
1489 | 1574 | .agp_destroy_page = agp_generic_destroy_page, |
1490 | 1575 | }; |
1491 | 1576 | |
1577 | +static struct agp_bridge_driver intel_i965_driver = { | |
1578 | + .owner = THIS_MODULE, | |
1579 | + .aperture_sizes = intel_i830_sizes, | |
1580 | + .size_type = FIXED_APER_SIZE, | |
1581 | + .num_aperture_sizes = 4, | |
1582 | + .needs_scratch_page = TRUE, | |
1583 | + .configure = intel_i915_configure, | |
1584 | + .fetch_size = intel_i965_fetch_size, | |
1585 | + .cleanup = intel_i915_cleanup, | |
1586 | + .tlb_flush = intel_i810_tlbflush, | |
1587 | + .mask_memory = intel_i810_mask_memory, | |
1588 | + .masks = intel_i810_masks, | |
1589 | + .agp_enable = intel_i810_agp_enable, | |
1590 | + .cache_flush = global_cache_flush, | |
1591 | + .create_gatt_table = intel_i965_create_gatt_table, | |
1592 | + .free_gatt_table = intel_i830_free_gatt_table, | |
1593 | + .insert_memory = intel_i915_insert_entries, | |
1594 | + .remove_memory = intel_i915_remove_entries, | |
1595 | + .alloc_by_type = intel_i830_alloc_by_type, | |
1596 | + .free_by_type = intel_i810_free_by_type, | |
1597 | + .agp_alloc_page = agp_generic_alloc_page, | |
1598 | + .agp_destroy_page = agp_generic_destroy_page, | |
1599 | +}; | |
1492 | 1600 | |
1493 | 1601 | static struct agp_bridge_driver intel_7505_driver = { |
1494 | 1602 | .owner = THIS_MODULE, |
... | ... | @@ -1684,6 +1792,35 @@ |
1684 | 1792 | bridge->driver = &intel_845_driver; |
1685 | 1793 | name = "945GM"; |
1686 | 1794 | break; |
1795 | + case PCI_DEVICE_ID_INTEL_82946GZ_HB: | |
1796 | + if (find_i830(PCI_DEVICE_ID_INTEL_82946GZ_IG)) | |
1797 | + bridge->driver = &intel_i965_driver; | |
1798 | + else | |
1799 | + bridge->driver = &intel_845_driver; | |
1800 | + name = "946GZ"; | |
1801 | + break; | |
1802 | + case PCI_DEVICE_ID_INTEL_82965G_1_HB: | |
1803 | + if (find_i830(PCI_DEVICE_ID_INTEL_82965G_1_IG)) | |
1804 | + bridge->driver = &intel_i965_driver; | |
1805 | + else | |
1806 | + bridge->driver = &intel_845_driver; | |
1807 | + name = "965G"; | |
1808 | + break; | |
1809 | + case PCI_DEVICE_ID_INTEL_82965Q_HB: | |
1810 | + if (find_i830(PCI_DEVICE_ID_INTEL_82965Q_IG)) | |
1811 | + bridge->driver = &intel_i965_driver; | |
1812 | + else | |
1813 | + bridge->driver = &intel_845_driver; | |
1814 | + name = "965Q"; | |
1815 | + break; | |
1816 | + case PCI_DEVICE_ID_INTEL_82965G_HB: | |
1817 | + if (find_i830(PCI_DEVICE_ID_INTEL_82965G_IG)) | |
1818 | + bridge->driver = &intel_i965_driver; | |
1819 | + else | |
1820 | + bridge->driver = &intel_845_driver; | |
1821 | + name = "965G"; | |
1822 | + break; | |
1823 | + | |
1687 | 1824 | case PCI_DEVICE_ID_INTEL_7505_0: |
1688 | 1825 | bridge->driver = &intel_7505_driver; |
1689 | 1826 | name = "E7505"; |
... | ... | @@ -1766,6 +1903,7 @@ |
1766 | 1903 | agp_put_bridge(bridge); |
1767 | 1904 | } |
1768 | 1905 | |
1906 | +#ifdef CONFIG_PM | |
1769 | 1907 | static int agp_intel_resume(struct pci_dev *pdev) |
1770 | 1908 | { |
1771 | 1909 | struct agp_bridge_data *bridge = pci_get_drvdata(pdev); |
1772 | 1910 | |
... | ... | @@ -1786,9 +1924,12 @@ |
1786 | 1924 | intel_i830_configure(); |
1787 | 1925 | else if (bridge->driver == &intel_810_driver) |
1788 | 1926 | intel_i810_configure(); |
1927 | + else if (bridge->driver == &intel_i965_driver) | |
1928 | + intel_i915_configure(); | |
1789 | 1929 | |
1790 | 1930 | return 0; |
1791 | 1931 | } |
1932 | +#endif | |
1792 | 1933 | |
1793 | 1934 | static struct pci_device_id agp_intel_pci_table[] = { |
1794 | 1935 | #define ID(x) \ |
... | ... | @@ -1825,6 +1966,10 @@ |
1825 | 1966 | ID(PCI_DEVICE_ID_INTEL_82915GM_HB), |
1826 | 1967 | ID(PCI_DEVICE_ID_INTEL_82945G_HB), |
1827 | 1968 | ID(PCI_DEVICE_ID_INTEL_82945GM_HB), |
1969 | + ID(PCI_DEVICE_ID_INTEL_82946GZ_HB), | |
1970 | + ID(PCI_DEVICE_ID_INTEL_82965G_1_HB), | |
1971 | + ID(PCI_DEVICE_ID_INTEL_82965Q_HB), | |
1972 | + ID(PCI_DEVICE_ID_INTEL_82965G_HB), | |
1828 | 1973 | { } |
1829 | 1974 | }; |
1830 | 1975 | |
1831 | 1976 | |
... | ... | @@ -1835,7 +1980,9 @@ |
1835 | 1980 | .id_table = agp_intel_pci_table, |
1836 | 1981 | .probe = agp_intel_probe, |
1837 | 1982 | .remove = __devexit_p(agp_intel_remove), |
1983 | +#ifdef CONFIG_PM | |
1838 | 1984 | .resume = agp_intel_resume, |
1985 | +#endif | |
1839 | 1986 | }; |
1840 | 1987 | |
1841 | 1988 | static int __init agp_intel_init(void) |
drivers/char/agp/via-agp.c
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | #include <linux/agp_backend.h> |
10 | 10 | #include "agp.h" |
11 | 11 | |
12 | -static struct pci_device_id agp_via_pci_table[]; | |
12 | +static const struct pci_device_id agp_via_pci_table[]; | |
13 | 13 | |
14 | 14 | #define VIA_GARTCTRL 0x80 |
15 | 15 | #define VIA_APSIZE 0x84 |
... | ... | @@ -485,7 +485,7 @@ |
485 | 485 | #endif /* CONFIG_PM */ |
486 | 486 | |
487 | 487 | /* must be the same order as name table above */ |
488 | -static struct pci_device_id agp_via_pci_table[] = { | |
488 | +static const struct pci_device_id agp_via_pci_table[] = { | |
489 | 489 | #define ID(x) \ |
490 | 490 | { \ |
491 | 491 | .class = (PCI_CLASS_BRIDGE_HOST << 8), \ |
include/linux/mm.h
... | ... | @@ -1013,6 +1013,7 @@ |
1013 | 1013 | return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; |
1014 | 1014 | } |
1015 | 1015 | |
1016 | +pgprot_t vm_get_page_prot(unsigned long vm_flags); | |
1016 | 1017 | struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr); |
1017 | 1018 | struct page *vmalloc_to_page(void *addr); |
1018 | 1019 | unsigned long vmalloc_to_pfn(void *addr); |
mm/mmap.c
... | ... | @@ -64,6 +64,13 @@ |
64 | 64 | __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111 |
65 | 65 | }; |
66 | 66 | |
67 | +pgprot_t vm_get_page_prot(unsigned long vm_flags) | |
68 | +{ | |
69 | + return protection_map[vm_flags & | |
70 | + (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]; | |
71 | +} | |
72 | +EXPORT_SYMBOL(vm_get_page_prot); | |
73 | + | |
67 | 74 | int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */ |
68 | 75 | int sysctl_overcommit_ratio = 50; /* default is 50% */ |
69 | 76 | int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; |