vserver 1.9.5.x5
[linux-2.6.git] / drivers / char / agp / intel-mch-agp.c
index fd1d1ac..5902726 100644 (file)
@@ -51,7 +51,7 @@ static struct agp_memory *alloc_agpphysmem_i8xx(size_t pg_count, int type)
        if (new == NULL)
                return NULL;
 
-       new->memory[0] = agp_bridge->driver->mask_memory(virt_to_phys(addr), type);
+       new->memory[0] = virt_to_phys(addr);
        new->page_count = 1;
        new->num_scratch_pages = 1;
        new->type = AGP_PHYS_MEMORY;
@@ -111,8 +111,7 @@ static void intel_i830_init_gtt_entries(void)
                        gtt_entries = MB(8) - KB(132);
                        break;
                case I830_GMCH_GMS_LOCAL:
-                       rdct = INREG8(intel_i830_private.registers,
-                                     I830_RDRAM_CHANNEL_TYPE);
+                       rdct = readb(intel_i830_private.registers+I830_RDRAM_CHANNEL_TYPE);
                        gtt_entries = (I830_RDRAM_ND(rdct) + 1) *
                                        MB(ddt[I830_RDRAM_DDT(rdct)]);
                        local = 1;
@@ -174,10 +173,10 @@ static int intel_i830_create_gatt_table(void)
 
        intel_i830_private.registers = (volatile u8 __iomem*) ioremap(temp,128 * 4096);
        if (!intel_i830_private.registers)
-               return (-ENOMEM);
+               return -ENOMEM;
 
-       temp = INREG32(intel_i830_private.registers,I810_PGETBL_CTL) & 0xfffff000;
-       global_cache_flush();
+       temp = readl(intel_i830_private.registers+I810_PGETBL_CTL) & 0xfffff000;
+       global_cache_flush();   /* FIXME: ?? */
 
        /* we have to call this as early as possible after the MMIO base address is known */
        intel_i830_init_gtt_entries();
@@ -186,7 +185,7 @@ static int intel_i830_create_gatt_table(void)
 
        agp_bridge->gatt_bus_addr = temp;
 
-       return(0);
+       return 0;
 }
 
 /* Return the gatt table to a sane state. Use the top of stolen
@@ -194,7 +193,7 @@ static int intel_i830_create_gatt_table(void)
  */
 static int intel_i830_free_gatt_table(void)
 {
-       return(0);
+       return 0;
 }
 
 static int intel_i830_fetch_size(void)
@@ -209,7 +208,7 @@ static int intel_i830_fetch_size(void)
                /* 855GM/852GM/865G has 128MB aperture size */
                agp_bridge->previous_size = agp_bridge->current_size = (void *) values;
                agp_bridge->aperture_size_idx = 0;
-               return(values[0].size);
+               return values[0].size;
        }
 
        pci_read_config_word(agp_bridge->dev,I830_GMCH_CTRL,&gmch_ctrl);
@@ -217,14 +216,14 @@ static int intel_i830_fetch_size(void)
        if ((gmch_ctrl & I830_GMCH_MEM_MASK) == I830_GMCH_MEM_128M) {
                agp_bridge->previous_size = agp_bridge->current_size = (void *) values;
                agp_bridge->aperture_size_idx = 0;
-               return(values[0].size);
+               return values[0].size;
        } else {
                agp_bridge->previous_size = agp_bridge->current_size = (void *) values;
                agp_bridge->aperture_size_idx = 1;
-               return(values[1].size);
+               return values[1].size;
        }
 
-       return(0);
+       return 0;
 }
 
 static int intel_i830_configure(void)
@@ -243,14 +242,17 @@ static int intel_i830_configure(void)
        gmch_ctrl |= I830_GMCH_ENABLED;
        pci_write_config_word(agp_bridge->dev,I830_GMCH_CTRL,gmch_ctrl);
 
-       OUTREG32(intel_i830_private.registers,I810_PGETBL_CTL,agp_bridge->gatt_bus_addr | I810_PGETBL_ENABLED);
-       global_cache_flush();
-
-       if (agp_bridge->driver->needs_scratch_page)
-               for (i = intel_i830_private.gtt_entries; i < current_size->num_entries; i++)
-                       OUTREG32(intel_i830_private.registers,I810_PTE_BASE + (i * 4),agp_bridge->scratch_page);
+       writel(agp_bridge->gatt_bus_addr|I810_PGETBL_ENABLED, intel_i830_private.registers+I810_PGETBL_CTL);
+       readl(intel_i830_private.registers+I810_PGETBL_CTL);    /* PCI Posting. */
 
-       return (0);
+       if (agp_bridge->driver->needs_scratch_page) {
+               for (i = intel_i830_private.gtt_entries; i < current_size->num_entries; i++) {
+                       writel(agp_bridge->scratch_page, intel_i830_private.registers+I810_PTE_BASE+(i*4));
+                       readl(intel_i830_private.registers+I810_PTE_BASE+(i*4));        /* PCI Posting. */
+               }
+       }
+       global_cache_flush();
+       return 0;
 }
 
 static void intel_i830_cleanup(void)
@@ -272,11 +274,11 @@ static int intel_i830_insert_entries(struct agp_memory *mem,off_t pg_start,
                                pg_start,intel_i830_private.gtt_entries);
 
                printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n");
-               return (-EINVAL);
+               return -EINVAL;
        }
 
        if ((pg_start + mem->page_count) > num_entries)
-               return (-EINVAL);
+               return -EINVAL;
 
        /* The i830 can't check the GTT for entries since its read only,
         * depend on the caller to make the correct offset decisions.
@@ -284,19 +286,21 @@ static int intel_i830_insert_entries(struct agp_memory *mem,off_t pg_start,
 
        if ((type != 0 && type != AGP_PHYS_MEMORY) ||
                (mem->type != 0 && mem->type != AGP_PHYS_MEMORY))
-               return (-EINVAL);
+               return -EINVAL;
 
-       global_cache_flush();
+       global_cache_flush();   /* FIXME: ?? */
 
-       for (i = 0, j = pg_start; i < mem->page_count; i++, j++)
-               OUTREG32(intel_i830_private.registers,I810_PTE_BASE + (j * 4),
-                       agp_bridge->driver->mask_memory(mem->memory[i], mem->type));
+       for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
+               writel(agp_bridge->driver->mask_memory(mem->memory[i], mem->type),
+                               intel_i830_private.registers+I810_PTE_BASE+(j*4));
+               readl(intel_i830_private.registers+I810_PTE_BASE+(j*4));        /* PCI Posting. */
+       }
 
        global_cache_flush();
 
        agp_bridge->driver->tlb_flush(mem);
 
-       return(0);
+       return 0;
 }
 
 static int intel_i830_remove_entries(struct agp_memory *mem,off_t pg_start,
@@ -308,26 +312,26 @@ static int intel_i830_remove_entries(struct agp_memory *mem,off_t pg_start,
 
        if (pg_start < intel_i830_private.gtt_entries) {
                printk (KERN_INFO PFX "Trying to disable local/stolen memory\n");
-               return (-EINVAL);
+               return -EINVAL;
        }
 
-       for (i = pg_start; i < (mem->page_count + pg_start); i++)
-               OUTREG32(intel_i830_private.registers,I810_PTE_BASE + (i * 4),agp_bridge->scratch_page);
+       for (i = pg_start; i < (mem->page_count + pg_start); i++) {
+               writel(agp_bridge->scratch_page, intel_i830_private.registers+I810_PTE_BASE+(i*4));
+               readl(intel_i830_private.registers+I810_PTE_BASE+(i*4));        /* PCI Posting. */
+       }
 
        global_cache_flush();
-
        agp_bridge->driver->tlb_flush(mem);
-
-       return (0);
+       return 0;
 }
 
 static struct agp_memory *intel_i830_alloc_by_type(size_t pg_count,int type)
 {
        if (type == AGP_PHYS_MEMORY)
-               return(alloc_agpphysmem_i8xx(pg_count, type));
+               return alloc_agpphysmem_i8xx(pg_count, type);
 
        /* always return NULL for other allocation types for now */
-       return(NULL);
+       return NULL;
 }
 
 static int intel_8xx_fetch_size(void)
@@ -470,9 +474,9 @@ static int find_i830(u16 device)
 {
        struct pci_dev *i830_dev;
 
-       i830_dev = pci_find_device(PCI_VENDOR_ID_INTEL, device, NULL);
+       i830_dev = pci_get_device(PCI_VENDOR_ID_INTEL, device, NULL);
        if (i830_dev && PCI_FUNC(i830_dev->devfn) != 0) {
-               i830_dev = pci_find_device(PCI_VENDOR_ID_INTEL,
+               i830_dev = pci_get_device(PCI_VENDOR_ID_INTEL,
                                device, i830_dev);
        }
 
@@ -536,7 +540,7 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
        if (!r->start && r->end) {
                if(pci_assign_resource(pdev, 0)) {
                        printk(KERN_ERR PFX "could not assign resource 0\n");
-                       return (-ENODEV);
+                       return -ENODEV;
                }
        }
 
@@ -547,7 +551,7 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
        */
        if (pci_enable_device(pdev)) {
                printk(KERN_ERR PFX "Unable to Enable PCI device\n");
-               return (-ENODEV);
+               return -ENODEV;
        }
 
        /* Fill in the mode register */
@@ -566,14 +570,16 @@ static void __devexit agp_intelmch_remove(struct pci_dev *pdev)
        struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
 
        agp_remove_bridge(bridge);
+       if (intel_i830_private.i830_dev)
+               pci_dev_put(intel_i830_private.i830_dev);
        agp_put_bridge(bridge);
 }
 
 static int agp_intelmch_resume(struct pci_dev *pdev)
 {
        struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
-       
-       pci_restore_state(pdev, pdev->saved_config_space);
+
+       pci_restore_state(pdev);
 
        if (bridge->driver == &intel_845_driver)
                intel_845_configure();