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 1.9.5.x5
[linux-2.6.git]
/
drivers
/
char
/
agp
/
intel-mch-agp.c
diff --git
a/drivers/char/agp/intel-mch-agp.c
b/drivers/char/agp/intel-mch-agp.c
index
f40942e
..
5902726
100644
(file)
--- a/
drivers/char/agp/intel-mch-agp.c
+++ b/
drivers/char/agp/intel-mch-agp.c
@@
-51,7
+51,7
@@
static struct agp_memory *alloc_agpphysmem_i8xx(size_t pg_count, int type)
if (new == NULL)
return NULL;
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;
new->page_count = 1;
new->num_scratch_pages = 1;
new->type = AGP_PHYS_MEMORY;
@@
-84,7
+84,7
@@
static struct aper_size_info_fixed intel_i830_sizes[] =
static struct _intel_i830_private {
struct pci_dev *i830_dev; /* device one */
static struct _intel_i830_private {
struct pci_dev *i830_dev; /* device one */
- volatile u8 *registers;
+ volatile u8
__iomem
*registers;
int gtt_entries;
} intel_i830_private;
int gtt_entries;
} intel_i830_private;
@@
-111,8
+111,7
@@
static void intel_i830_init_gtt_entries(void)
gtt_entries = MB(8) - KB(132);
break;
case I830_GMCH_GMS_LOCAL:
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;
gtt_entries = (I830_RDRAM_ND(rdct) + 1) *
MB(ddt[I830_RDRAM_DDT(rdct)]);
local = 1;
@@
-167,17
+166,17
@@
static int intel_i830_create_gatt_table(void)
size = agp_bridge->current_size;
page_order = size->page_order;
num_entries = size->num_entries;
size = agp_bridge->current_size;
page_order = size->page_order;
num_entries = size->num_entries;
- agp_bridge->gatt_table_real =
0
;
+ agp_bridge->gatt_table_real =
NULL
;
pci_read_config_dword(intel_i830_private.i830_dev,I810_MMADDR,&temp);
temp &= 0xfff80000;
pci_read_config_dword(intel_i830_private.i830_dev,I810_MMADDR,&temp);
temp &= 0xfff80000;
- intel_i830_private.registers = (volatile u8 *) ioremap(temp,128 * 4096);
+ intel_i830_private.registers = (volatile u8
__iomem
*) ioremap(temp,128 * 4096);
if (!intel_i830_private.registers)
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();
/* 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;
agp_bridge->gatt_bus_addr = temp;
- return
(0)
;
+ return
0
;
}
/* Return the gatt table to a sane state. Use the top of stolen
}
/* 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)
{
*/
static int intel_i830_free_gatt_table(void)
{
- return
(0)
;
+ return
0
;
}
static int intel_i830_fetch_size(void)
}
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;
/* 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);
}
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;
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;
} 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)
}
static int intel_i830_configure(void)
@@
-243,19
+242,22
@@
static int intel_i830_configure(void)
gmch_ctrl |= I830_GMCH_ENABLED;
pci_write_config_word(agp_bridge->dev,I830_GMCH_CTRL,gmch_ctrl);
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)
{
}
static void intel_i830_cleanup(void)
{
- iounmap((void *) intel_i830_private.registers);
+ iounmap((void
__iomem
*) intel_i830_private.registers);
}
static int intel_i830_insert_entries(struct agp_memory *mem,off_t pg_start,
}
static int intel_i830_insert_entries(struct agp_memory *mem,off_t pg_start,
@@
-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");
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)
}
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.
/* 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))
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);
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,
}
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");
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();
global_cache_flush();
-
agp_bridge->driver->tlb_flush(mem);
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)
}
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 */
/* always return NULL for other allocation types for now */
- return
(NULL)
;
+ return
NULL
;
}
static int intel_8xx_fetch_size(void)
}
static int intel_8xx_fetch_size(void)
@@
-470,9
+474,9
@@
static int find_i830(u16 device)
{
struct pci_dev *i830_dev;
{
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) {
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);
}
device, i830_dev);
}
@@
-491,10
+495,9
@@
static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
char *name = "(unknown)";
u8 cap_ptr = 0;
char *name = "(unknown)";
u8 cap_ptr = 0;
- if (!boot_cpu_has(X86_FEATURE_LM))
- return -ENODEV;
-
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
+ if (!cap_ptr)
+ return -ENODEV;
bridge = agp_alloc_bridge();
if (!bridge)
bridge = agp_alloc_bridge();
if (!bridge)
@@
-537,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");
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
;
}
}
}
}
@@
-548,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");
*/
if (pci_enable_device(pdev)) {
printk(KERN_ERR PFX "Unable to Enable PCI device\n");
- return
(-ENODEV)
;
+ return
-ENODEV
;
}
/* Fill in the mode register */
}
/* Fill in the mode register */
@@
-567,18
+570,17
@@
static void __devexit agp_intelmch_remove(struct pci_dev *pdev)
struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
agp_remove_bridge(bridge);
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);
}
agp_put_bridge(bridge);
}
-static int agp_intelmch_suspend(struct pci_dev *dev, u32 state)
-{
- return 0;
-}
-
static int agp_intelmch_resume(struct pci_dev *pdev)
{
struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
static int agp_intelmch_resume(struct pci_dev *pdev)
{
struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
+ pci_restore_state(pdev);
+
if (bridge->driver == &intel_845_driver)
intel_845_configure();
if (bridge->driver == &intel_845_driver)
intel_845_configure();
@@
-590,7
+592,15
@@
static struct pci_device_id agp_intelmch_pci_table[] = {
.class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_INTEL,
.class = (PCI_CLASS_BRIDGE_HOST << 8),
.class_mask = ~0,
.vendor = PCI_VENDOR_ID_INTEL,
- .device = PCI_ANY_ID,
+ .device = PCI_DEVICE_ID_INTEL_82865_HB,
+ .subvendor = PCI_ANY_ID,
+ .subdevice = PCI_ANY_ID,
+ },
+ {
+ .class = (PCI_CLASS_BRIDGE_HOST << 8),
+ .class_mask = ~0,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_INTEL_82875_HB,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
},
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
},
@@
-604,7
+614,6
@@
static struct pci_driver agp_intelmch_pci_driver = {
.id_table = agp_intelmch_pci_table,
.probe = agp_intelmch_probe,
.remove = agp_intelmch_remove,
.id_table = agp_intelmch_pci_table,
.probe = agp_intelmch_probe,
.remove = agp_intelmch_remove,
- .suspend = agp_intelmch_suspend,
.resume = agp_intelmch_resume,
};
.resume = agp_intelmch_resume,
};
@@
-630,5
+639,5
@@
module_init(agp_intelmch_init);
module_exit(agp_intelmch_cleanup);
MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>");
module_exit(agp_intelmch_cleanup);
MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>");
-MODULE_LICENSE("GPL
and additional rights
");
+MODULE_LICENSE("GPL");