diff options
Diffstat (limited to 'drivers/char/agp/generic.c')
| -rw-r--r-- | drivers/char/agp/generic.c | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index c321a924e38a..f0079e991bdc 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
| @@ -153,7 +153,7 @@ void agp_free_memory(struct agp_memory *curr) | |||
| 153 | } | 153 | } |
| 154 | if (curr->page_count != 0) { | 154 | if (curr->page_count != 0) { |
| 155 | for (i = 0; i < curr->page_count; i++) { | 155 | for (i = 0; i < curr->page_count; i++) { |
| 156 | curr->bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[i])); | 156 | curr->bridge->driver->agp_destroy_page(gart_to_virt(curr->memory[i])); |
| 157 | } | 157 | } |
| 158 | } | 158 | } |
| 159 | agp_free_key(curr->key); | 159 | agp_free_key(curr->key); |
| @@ -209,7 +209,7 @@ struct agp_memory *agp_allocate_memory(struct agp_bridge_data *bridge, | |||
| 209 | agp_free_memory(new); | 209 | agp_free_memory(new); |
| 210 | return NULL; | 210 | return NULL; |
| 211 | } | 211 | } |
| 212 | new->memory[i] = virt_to_phys(addr); | 212 | new->memory[i] = virt_to_gart(addr); |
| 213 | new->page_count++; | 213 | new->page_count++; |
| 214 | } | 214 | } |
| 215 | new->bridge = bridge; | 215 | new->bridge = bridge; |
| @@ -295,19 +295,6 @@ int agp_num_entries(void) | |||
| 295 | EXPORT_SYMBOL_GPL(agp_num_entries); | 295 | EXPORT_SYMBOL_GPL(agp_num_entries); |
| 296 | 296 | ||
| 297 | 297 | ||
| 298 | static int check_bridge_mode(struct pci_dev *dev) | ||
| 299 | { | ||
| 300 | u32 agp3; | ||
| 301 | u8 cap_ptr; | ||
| 302 | |||
| 303 | cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP); | ||
| 304 | pci_read_config_dword(dev, cap_ptr+AGPSTAT, &agp3); | ||
| 305 | if (agp3 & AGPSTAT_MODE_3_0) | ||
| 306 | return 1; | ||
| 307 | return 0; | ||
| 308 | } | ||
| 309 | |||
| 310 | |||
| 311 | /** | 298 | /** |
| 312 | * agp_copy_info - copy bridge state information | 299 | * agp_copy_info - copy bridge state information |
| 313 | * | 300 | * |
| @@ -328,7 +315,7 @@ int agp_copy_info(struct agp_bridge_data *bridge, struct agp_kern_info *info) | |||
| 328 | info->version.minor = bridge->version->minor; | 315 | info->version.minor = bridge->version->minor; |
| 329 | info->chipset = SUPPORTED; | 316 | info->chipset = SUPPORTED; |
| 330 | info->device = bridge->dev; | 317 | info->device = bridge->dev; |
| 331 | if (check_bridge_mode(bridge->dev)) | 318 | if (bridge->mode & AGPSTAT_MODE_3_0) |
| 332 | info->mode = bridge->mode & ~AGP3_RESERVED_MASK; | 319 | info->mode = bridge->mode & ~AGP3_RESERVED_MASK; |
| 333 | else | 320 | else |
| 334 | info->mode = bridge->mode & ~AGP2_RESERVED_MASK; | 321 | info->mode = bridge->mode & ~AGP2_RESERVED_MASK; |
| @@ -661,7 +648,7 @@ u32 agp_collect_device_status(struct agp_bridge_data *bridge, u32 requested_mode | |||
| 661 | bridge_agpstat &= ~AGPSTAT_FW; | 648 | bridge_agpstat &= ~AGPSTAT_FW; |
| 662 | 649 | ||
| 663 | /* Check to see if we are operating in 3.0 mode */ | 650 | /* Check to see if we are operating in 3.0 mode */ |
| 664 | if (check_bridge_mode(agp_bridge->dev)) | 651 | if (agp_bridge->mode & AGPSTAT_MODE_3_0) |
| 665 | agp_v3_parse_one(&requested_mode, &bridge_agpstat, &vga_agpstat); | 652 | agp_v3_parse_one(&requested_mode, &bridge_agpstat, &vga_agpstat); |
| 666 | else | 653 | else |
| 667 | agp_v2_parse_one(&requested_mode, &bridge_agpstat, &vga_agpstat); | 654 | agp_v2_parse_one(&requested_mode, &bridge_agpstat, &vga_agpstat); |
| @@ -732,7 +719,7 @@ void agp_generic_enable(struct agp_bridge_data *bridge, u32 requested_mode) | |||
| 732 | 719 | ||
| 733 | /* Do AGP version specific frobbing. */ | 720 | /* Do AGP version specific frobbing. */ |
| 734 | if (bridge->major_version >= 3) { | 721 | if (bridge->major_version >= 3) { |
| 735 | if (check_bridge_mode(bridge->dev)) { | 722 | if (bridge->mode & AGPSTAT_MODE_3_0) { |
| 736 | /* If we have 3.5, we can do the isoch stuff. */ | 723 | /* If we have 3.5, we can do the isoch stuff. */ |
| 737 | if (bridge->minor_version >= 5) | 724 | if (bridge->minor_version >= 5) |
| 738 | agp_3_5_enable(bridge); | 725 | agp_3_5_enable(bridge); |
| @@ -806,8 +793,7 @@ int agp_generic_create_gatt_table(struct agp_bridge_data *bridge) | |||
| 806 | break; | 793 | break; |
| 807 | } | 794 | } |
| 808 | 795 | ||
| 809 | table = (char *) __get_free_pages(GFP_KERNEL, | 796 | table = alloc_gatt_pages(page_order); |
| 810 | page_order); | ||
| 811 | 797 | ||
| 812 | if (table == NULL) { | 798 | if (table == NULL) { |
| 813 | i++; | 799 | i++; |
| @@ -838,7 +824,7 @@ int agp_generic_create_gatt_table(struct agp_bridge_data *bridge) | |||
| 838 | size = ((struct aper_size_info_fixed *) temp)->size; | 824 | size = ((struct aper_size_info_fixed *) temp)->size; |
| 839 | page_order = ((struct aper_size_info_fixed *) temp)->page_order; | 825 | page_order = ((struct aper_size_info_fixed *) temp)->page_order; |
| 840 | num_entries = ((struct aper_size_info_fixed *) temp)->num_entries; | 826 | num_entries = ((struct aper_size_info_fixed *) temp)->num_entries; |
| 841 | table = (char *) __get_free_pages(GFP_KERNEL, page_order); | 827 | table = alloc_gatt_pages(page_order); |
| 842 | } | 828 | } |
| 843 | 829 | ||
| 844 | if (table == NULL) | 830 | if (table == NULL) |
| @@ -853,7 +839,7 @@ int agp_generic_create_gatt_table(struct agp_bridge_data *bridge) | |||
| 853 | agp_gatt_table = (void *)table; | 839 | agp_gatt_table = (void *)table; |
| 854 | 840 | ||
| 855 | bridge->driver->cache_flush(); | 841 | bridge->driver->cache_flush(); |
| 856 | bridge->gatt_table = ioremap_nocache(virt_to_phys(table), | 842 | bridge->gatt_table = ioremap_nocache(virt_to_gart(table), |
| 857 | (PAGE_SIZE * (1 << page_order))); | 843 | (PAGE_SIZE * (1 << page_order))); |
| 858 | bridge->driver->cache_flush(); | 844 | bridge->driver->cache_flush(); |
| 859 | 845 | ||
| @@ -861,11 +847,11 @@ int agp_generic_create_gatt_table(struct agp_bridge_data *bridge) | |||
| 861 | for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) | 847 | for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) |
| 862 | ClearPageReserved(page); | 848 | ClearPageReserved(page); |
| 863 | 849 | ||
| 864 | free_pages((unsigned long) table, page_order); | 850 | free_gatt_pages(table, page_order); |
| 865 | 851 | ||
| 866 | return -ENOMEM; | 852 | return -ENOMEM; |
| 867 | } | 853 | } |
| 868 | bridge->gatt_bus_addr = virt_to_phys(bridge->gatt_table_real); | 854 | bridge->gatt_bus_addr = virt_to_gart(bridge->gatt_table_real); |
| 869 | 855 | ||
| 870 | /* AK: bogus, should encode addresses > 4GB */ | 856 | /* AK: bogus, should encode addresses > 4GB */ |
| 871 | for (i = 0; i < num_entries; i++) { | 857 | for (i = 0; i < num_entries; i++) { |
| @@ -919,7 +905,7 @@ int agp_generic_free_gatt_table(struct agp_bridge_data *bridge) | |||
| 919 | for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) | 905 | for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) |
| 920 | ClearPageReserved(page); | 906 | ClearPageReserved(page); |
| 921 | 907 | ||
| 922 | free_pages((unsigned long) bridge->gatt_table_real, page_order); | 908 | free_gatt_pages(bridge->gatt_table_real, page_order); |
| 923 | 909 | ||
| 924 | agp_gatt_table = NULL; | 910 | agp_gatt_table = NULL; |
| 925 | bridge->gatt_table = NULL; | 911 | bridge->gatt_table = NULL; |
