git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 2.0 rc7
[linux-2.6.git]
/
drivers
/
char
/
agp
/
nvidia-agp.c
diff --git
a/drivers/char/agp/nvidia-agp.c
b/drivers/char/agp/nvidia-agp.c
index
2981fa1
..
80dafa3
100644
(file)
--- a/
drivers/char/agp/nvidia-agp.c
+++ b/
drivers/char/agp/nvidia-agp.c
@@
-28,7
+28,7
@@
static struct _nvidia_private {
struct pci_dev *dev_1;
struct pci_dev *dev_2;
struct pci_dev *dev_3;
struct pci_dev *dev_1;
struct pci_dev *dev_2;
struct pci_dev *dev_3;
- volatile u32 *aperture;
+ volatile u32
__iomem
*aperture;
int num_active_entries;
off_t pg_offset;
u32 wbc_mask;
int num_active_entries;
off_t pg_offset;
u32 wbc_mask;
@@
-154,7
+154,7
@@
static int nvidia_configure(void)
/* map aperture */
nvidia_private.aperture =
/* map aperture */
nvidia_private.aperture =
- (volatile u32 *) ioremap(apbase, 33 * PAGE_SIZE);
+ (volatile u32
__iomem
*) ioremap(apbase, 33 * PAGE_SIZE);
return 0;
}
return 0;
}
@@
-173,7
+173,7
@@
static void nvidia_cleanup(void)
pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_GARTCTRL, temp & ~(0x11));
/* unmap aperture */
pci_write_config_dword(nvidia_private.dev_2, NVIDIA_2_GARTCTRL, temp & ~(0x11));
/* unmap aperture */
- iounmap((void *) nvidia_private.aperture);
+ iounmap((void
__iomem
*) nvidia_private.aperture);
/* restore previous aperture size */
previous_size = A_SIZE_8(agp_bridge->previous_size);
/* restore previous aperture size */
previous_size = A_SIZE_8(agp_bridge->previous_size);
@@
-206,7
+206,7
@@
static int nvidia_insert_memory(struct agp_memory *mem, off_t pg_start, int type
return -EINVAL;
for(j = pg_start; j < (pg_start + mem->page_count); j++) {
return -EINVAL;
for(j = pg_start; j < (pg_start + mem->page_count); j++) {
- if (!PGE_EMPTY(agp_bridge,
agp_bridge->gatt_table[nvidia_private.pg_offset + j]
))
+ if (!PGE_EMPTY(agp_bridge,
readl(agp_bridge->gatt_table+nvidia_private.pg_offset+j)
))
return -EBUSY;
}
return -EBUSY;
}
@@
-214,10
+214,12
@@
static int nvidia_insert_memory(struct agp_memory *mem, off_t pg_start, int type
global_cache_flush();
mem->is_flushed = TRUE;
}
global_cache_flush();
mem->is_flushed = TRUE;
}
- for (i = 0, j = pg_start; i < mem->page_count; i++, j++)
- agp_bridge->gatt_table[nvidia_private.pg_offset + j] =
- 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(agp_bridge,
+ mem->memory[i], mem->type),
+ agp_bridge->gatt_table+nvidia_private.pg_offset+j);
+ readl(agp_bridge->gatt_table+nvidia_private.pg_offset+j); /* PCI Posting. */
+ }
agp_bridge->driver->tlb_flush(mem);
return 0;
}
agp_bridge->driver->tlb_flush(mem);
return 0;
}
@@
-229,11
+231,9
@@
static int nvidia_remove_memory(struct agp_memory *mem, off_t pg_start, int type
if ((type != 0) || (mem->type != 0))
return -EINVAL;
if ((type != 0) || (mem->type != 0))
return -EINVAL;
-
- for (i = pg_start; i < (mem->page_count + pg_start); i++) {
- agp_bridge->gatt_table[nvidia_private.pg_offset + i] =
- (unsigned long) agp_bridge->scratch_page;
- }
+
+ for (i = pg_start; i < (mem->page_count + pg_start); i++)
+ writel(agp_bridge->scratch_page, agp_bridge->gatt_table+nvidia_private.pg_offset+i);
agp_bridge->driver->tlb_flush(mem);
return 0;
agp_bridge->driver->tlb_flush(mem);
return 0;
@@
-265,9
+265,9
@@
static void nvidia_tlbflush(struct agp_memory *mem)
/* flush TLB entries */
for(i = 0; i < 32 + 1; i++)
/* flush TLB entries */
for(i = 0; i < 32 + 1; i++)
- temp =
nvidia_private.aperture[i * PAGE_SIZE / sizeof(u32)]
;
+ temp =
readl(nvidia_private.aperture+(i * PAGE_SIZE / sizeof(u32)))
;
for(i = 0; i < 32 + 1; i++)
for(i = 0; i < 32 + 1; i++)
- temp =
nvidia_private.aperture[i * PAGE_SIZE / sizeof(u32)]
;
+ temp =
readl(nvidia_private.aperture+(i * PAGE_SIZE / sizeof(u32)))
;
}
}
@@
-288,7
+288,7
@@
static struct gatt_mask nvidia_generic_masks[] =
};
};
-struct agp_bridge_driver nvidia_driver = {
+st
atic st
ruct agp_bridge_driver nvidia_driver = {
.owner = THIS_MODULE,
.aperture_sizes = nvidia_generic_sizes,
.size_type = U8_APER_SIZE,
.owner = THIS_MODULE,
.aperture_sizes = nvidia_generic_sizes,
.size_type = U8_APER_SIZE,
@@
-380,7
+380,15
@@
static struct pci_device_id agp_nvidia_pci_table[] = {
.class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_NVIDIA,
.class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_ANY_ID,
+ .device = PCI_DEVICE_ID_NVIDIA_NFORCE,
+ .subvendor = PCI_ANY_ID,
+ .subdevice = PCI_ANY_ID,
+ },
+ {
+ .class = (PCI_CLASS_BRIDGE_HOST << 8),
+ .class_mask = ~0,
+ .vendor = PCI_VENDOR_ID_NVIDIA,
+ .device = PCI_DEVICE_ID_NVIDIA_NFORCE2,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
},
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
},
@@
-398,7
+406,9
@@
static struct pci_driver agp_nvidia_pci_driver = {
static int __init agp_nvidia_init(void)
{
static int __init agp_nvidia_init(void)
{
- return pci_module_init(&agp_nvidia_pci_driver);
+ if (agp_off)
+ return -EINVAL;
+ return pci_register_driver(&agp_nvidia_pci_driver);
}
static void __exit agp_nvidia_cleanup(void)
}
static void __exit agp_nvidia_cleanup(void)