Commit 5d83644a authored by Dave Jones's avatar Dave Jones

[AGPGART] intel agp init cleanups.

From Christoph Hellwig.
(1) Kill the _setup functions - most of it can be nice, static
    structs - the few remainders are handled better elsewhere
(2) _one_ big switch in ->probe assigning these tables.

Almost 200 lOC gone and it's even readable :)
parent e7b56910
...@@ -249,38 +249,6 @@ static unsigned long intel_i810_mask_memory(unsigned long addr, int type) ...@@ -249,38 +249,6 @@ static unsigned long intel_i810_mask_memory(unsigned long addr, int type)
return addr | agp_bridge->masks[type].mask; return addr | agp_bridge->masks[type].mask;
} }
static int __init intel_i810_setup(struct pci_dev *i810_dev)
{
intel_i810_private.i810_dev = i810_dev;
agp_bridge->masks = intel_i810_masks;
agp_bridge->aperture_sizes = (void *) intel_i810_sizes;
agp_bridge->size_type = FIXED_APER_SIZE;
agp_bridge->num_aperture_sizes = 2;
agp_bridge->dev_private_data = (void *) &intel_i810_private;
agp_bridge->needs_scratch_page = TRUE;
agp_bridge->configure = intel_i810_configure;
agp_bridge->fetch_size = intel_i810_fetch_size;
agp_bridge->cleanup = intel_i810_cleanup;
agp_bridge->tlb_flush = intel_i810_tlbflush;
agp_bridge->mask_memory = intel_i810_mask_memory;
agp_bridge->agp_enable = intel_i810_agp_enable;
agp_bridge->cache_flush = global_cache_flush;
agp_bridge->create_gatt_table = agp_generic_create_gatt_table;
agp_bridge->free_gatt_table = agp_generic_free_gatt_table;
agp_bridge->insert_memory = intel_i810_insert_entries;
agp_bridge->remove_memory = intel_i810_remove_entries;
agp_bridge->alloc_by_type = intel_i810_alloc_by_type;
agp_bridge->free_by_type = intel_i810_free_by_type;
agp_bridge->agp_alloc_page = agp_generic_alloc_page;
agp_bridge->agp_destroy_page = agp_generic_destroy_page;
agp_bridge->suspend = agp_generic_suspend;
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static struct aper_size_info_fixed intel_i830_sizes[] = static struct aper_size_info_fixed intel_i830_sizes[] =
{ {
{128, 32768, 5}, {128, 32768, 5},
...@@ -564,43 +532,6 @@ static agp_memory *intel_i830_alloc_by_type(size_t pg_count,int type) ...@@ -564,43 +532,6 @@ static agp_memory *intel_i830_alloc_by_type(size_t pg_count,int type)
return(NULL); return(NULL);
} }
static int __init intel_i830_setup(struct pci_dev *i830_dev)
{
intel_i830_private.i830_dev = i830_dev;
agp_bridge->masks = intel_i810_masks;
agp_bridge->aperture_sizes = (void *) intel_i830_sizes;
agp_bridge->size_type = FIXED_APER_SIZE;
agp_bridge->num_aperture_sizes = 2;
agp_bridge->dev_private_data = (void *) &intel_i830_private;
agp_bridge->needs_scratch_page = TRUE;
agp_bridge->configure = intel_i830_configure;
agp_bridge->fetch_size = intel_i830_fetch_size;
agp_bridge->cleanup = intel_i830_cleanup;
agp_bridge->tlb_flush = intel_i810_tlbflush;
agp_bridge->mask_memory = intel_i810_mask_memory;
agp_bridge->agp_enable = intel_i810_agp_enable;
agp_bridge->cache_flush = global_cache_flush;
agp_bridge->create_gatt_table = intel_i830_create_gatt_table;
agp_bridge->free_gatt_table = intel_i830_free_gatt_table;
agp_bridge->insert_memory = intel_i830_insert_entries;
agp_bridge->remove_memory = intel_i830_remove_entries;
agp_bridge->alloc_by_type = intel_i830_alloc_by_type;
agp_bridge->free_by_type = intel_i810_free_by_type;
agp_bridge->agp_alloc_page = agp_generic_alloc_page;
agp_bridge->agp_destroy_page = agp_generic_destroy_page;
agp_bridge->suspend = agp_generic_suspend;
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return(0);
}
static int intel_fetch_size(void) static int intel_fetch_size(void)
{ {
int i; int i;
...@@ -1041,584 +972,470 @@ static struct aper_size_info_8 intel_830mp_sizes[4] = ...@@ -1041,584 +972,470 @@ static struct aper_size_info_8 intel_830mp_sizes[4] =
{32, 8192, 3, 56} {32, 8192, 3, 56}
}; };
static int __init intel_generic_setup (struct pci_dev *pdev) struct agp_bridge_data intel_generic_bridge = {
{ .type = INTEL_GENERIC,
agp_bridge->masks = intel_generic_masks; .masks = intel_generic_masks,
agp_bridge->aperture_sizes = (void *) intel_generic_sizes; .aperture_sizes = (void *)intel_generic_sizes,
agp_bridge->size_type = U16_APER_SIZE; .size_type = U16_APER_SIZE,
agp_bridge->num_aperture_sizes = 7; .num_aperture_sizes = 7,
agp_bridge->dev_private_data = NULL; .configure = intel_configure,
agp_bridge->needs_scratch_page = FALSE; .fetch_size = intel_fetch_size,
agp_bridge->configure = intel_configure; .cleanup = intel_cleanup,
agp_bridge->fetch_size = intel_fetch_size; .tlb_flush = intel_tlbflush,
agp_bridge->cleanup = intel_cleanup; .mask_memory = intel_mask_memory,
agp_bridge->tlb_flush = intel_tlbflush; .agp_enable = agp_generic_enable,
agp_bridge->mask_memory = intel_mask_memory; .cache_flush = global_cache_flush,
agp_bridge->agp_enable = agp_generic_enable; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->cache_flush = global_cache_flush; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .insert_memory = agp_generic_insert_memory,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .remove_memory = agp_generic_remove_memory,
agp_bridge->insert_memory = agp_generic_insert_memory; .alloc_by_type = agp_generic_alloc_by_type,
agp_bridge->remove_memory = agp_generic_remove_memory; .free_by_type = agp_generic_free_by_type,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->free_by_type = agp_generic_free_by_type; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .suspend = agp_generic_suspend,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .resume = intel_resume,
agp_bridge->suspend = agp_generic_suspend; };
agp_bridge->resume = intel_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static int __init intel_815_setup (struct pci_dev *pdev) struct agp_bridge_data intel_810_bridge = {
{ .type = INTEL_I810,
agp_bridge->masks = intel_generic_masks; .masks = intel_i810_masks,
agp_bridge->aperture_sizes = (void *) intel_815_sizes; .aperture_sizes = (void *)intel_i810_sizes,
agp_bridge->size_type = U8_APER_SIZE; .size_type = FIXED_APER_SIZE,
agp_bridge->num_aperture_sizes = 2; .num_aperture_sizes = 2,
agp_bridge->dev_private_data = NULL; .dev_private_data = (void *)&intel_i810_private,
agp_bridge->needs_scratch_page = FALSE; .needs_scratch_page = TRUE,
agp_bridge->configure = intel_815_configure; .configure = intel_i810_configure,
agp_bridge->fetch_size = intel_8xx_fetch_size; .fetch_size = intel_i810_fetch_size,
agp_bridge->cleanup = intel_8xx_cleanup; .cleanup = intel_i810_cleanup,
agp_bridge->tlb_flush = intel_8xx_tlbflush; .tlb_flush = intel_i810_tlbflush,
agp_bridge->mask_memory = intel_mask_memory; .mask_memory = intel_i810_mask_memory,
agp_bridge->agp_enable = agp_generic_enable; .agp_enable = intel_i810_agp_enable,
agp_bridge->cache_flush = global_cache_flush; .cache_flush = global_cache_flush,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->insert_memory = agp_generic_insert_memory; .insert_memory = intel_i810_insert_entries,
agp_bridge->remove_memory = agp_generic_remove_memory; .remove_memory = intel_i810_remove_entries,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .alloc_by_type = intel_i810_alloc_by_type,
agp_bridge->free_by_type = agp_generic_free_by_type; .free_by_type = intel_i810_free_by_type,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->suspend = agp_generic_suspend; .suspend = agp_generic_suspend,
agp_bridge->resume = agp_generic_resume; .resume = agp_generic_resume,
agp_bridge->cant_use_aperture = 0; };
return 0;
}
static int __init intel_820_setup (struct pci_dev *pdev) struct agp_bridge_data intel_815_bridge = {
{ .type = INTEL_I815,
agp_bridge->masks = intel_generic_masks; .masks = intel_generic_masks,
agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; .aperture_sizes = (void *)intel_815_sizes,
agp_bridge->size_type = U8_APER_SIZE; .size_type = U8_APER_SIZE,
agp_bridge->num_aperture_sizes = 7; .num_aperture_sizes = 2,
agp_bridge->dev_private_data = NULL; .configure = intel_815_configure,
agp_bridge->needs_scratch_page = FALSE; .fetch_size = intel_8xx_fetch_size,
agp_bridge->configure = intel_820_configure; .cleanup = intel_8xx_cleanup,
agp_bridge->fetch_size = intel_8xx_fetch_size; .tlb_flush = intel_8xx_tlbflush,
agp_bridge->cleanup = intel_820_cleanup; .mask_memory = intel_mask_memory,
agp_bridge->tlb_flush = intel_820_tlbflush; .agp_enable = agp_generic_enable,
agp_bridge->mask_memory = intel_mask_memory; .cache_flush = global_cache_flush,
agp_bridge->agp_enable = agp_generic_enable; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->cache_flush = global_cache_flush; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .insert_memory = agp_generic_insert_memory,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .remove_memory = agp_generic_remove_memory,
agp_bridge->insert_memory = agp_generic_insert_memory; .alloc_by_type = agp_generic_alloc_by_type,
agp_bridge->remove_memory = agp_generic_remove_memory; .free_by_type = agp_generic_free_by_type,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->free_by_type = agp_generic_free_by_type; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .suspend = agp_generic_suspend,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .resume = agp_generic_resume,
agp_bridge->suspend = agp_generic_suspend; };
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static int __init intel_830mp_setup (struct pci_dev *pdev) struct agp_bridge_data intel_830_bridge = {
{ .type = INTEL_I810,
agp_bridge->masks = intel_generic_masks; .masks = intel_i810_masks,
agp_bridge->aperture_sizes = (void *) intel_830mp_sizes; .aperture_sizes = (void *)intel_i830_sizes,
agp_bridge->size_type = U8_APER_SIZE; .size_type = FIXED_APER_SIZE,
agp_bridge->num_aperture_sizes = 4; .num_aperture_sizes = 2,
agp_bridge->dev_private_data = NULL; .dev_private_data = (void *)&intel_i830_private,
agp_bridge->needs_scratch_page = FALSE; .needs_scratch_page = TRUE,
agp_bridge->configure = intel_830mp_configure; .configure = intel_i830_configure,
agp_bridge->fetch_size = intel_8xx_fetch_size; .fetch_size = intel_i830_fetch_size,
agp_bridge->cleanup = intel_8xx_cleanup; .cleanup = intel_i830_cleanup,
agp_bridge->tlb_flush = intel_8xx_tlbflush; .tlb_flush = intel_i810_tlbflush,
agp_bridge->mask_memory = intel_mask_memory; .mask_memory = intel_i810_mask_memory,
agp_bridge->agp_enable = agp_generic_enable; .agp_enable = intel_i810_agp_enable,
agp_bridge->cache_flush = global_cache_flush; .cache_flush = global_cache_flush,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .create_gatt_table = intel_i830_create_gatt_table,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .free_gatt_table = intel_i830_free_gatt_table,
agp_bridge->insert_memory = agp_generic_insert_memory; .insert_memory = intel_i830_insert_entries,
agp_bridge->remove_memory = agp_generic_remove_memory; .remove_memory = intel_i830_remove_entries,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .alloc_by_type = intel_i830_alloc_by_type,
agp_bridge->free_by_type = agp_generic_free_by_type; .free_by_type = intel_i810_free_by_type,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->suspend = agp_generic_suspend; .suspend = agp_generic_suspend,
agp_bridge->resume = agp_generic_resume; .resume = agp_generic_resume,
agp_bridge->cant_use_aperture = 0; };
return 0;
}
static int __init intel_840_setup (struct pci_dev *pdev)
{
agp_bridge->masks = intel_generic_masks;
agp_bridge->aperture_sizes = (void *) intel_8xx_sizes;
agp_bridge->size_type = U8_APER_SIZE;
agp_bridge->num_aperture_sizes = 7;
agp_bridge->dev_private_data = NULL;
agp_bridge->needs_scratch_page = FALSE;
agp_bridge->configure = intel_840_configure;
agp_bridge->fetch_size = intel_8xx_fetch_size;
agp_bridge->cleanup = intel_8xx_cleanup;
agp_bridge->tlb_flush = intel_8xx_tlbflush;
agp_bridge->mask_memory = intel_mask_memory;
agp_bridge->agp_enable = agp_generic_enable;
agp_bridge->cache_flush = global_cache_flush;
agp_bridge->create_gatt_table = agp_generic_create_gatt_table;
agp_bridge->free_gatt_table = agp_generic_free_gatt_table;
agp_bridge->insert_memory = agp_generic_insert_memory;
agp_bridge->remove_memory = agp_generic_remove_memory;
agp_bridge->alloc_by_type = agp_generic_alloc_by_type;
agp_bridge->free_by_type = agp_generic_free_by_type;
agp_bridge->agp_alloc_page = agp_generic_alloc_page;
agp_bridge->agp_destroy_page = agp_generic_destroy_page;
agp_bridge->suspend = agp_generic_suspend;
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static int __init intel_845_setup (struct pci_dev *pdev) struct agp_bridge_data intel_820_bridge = {
{ .type = INTEL_I820,
agp_bridge->masks = intel_generic_masks; .masks = intel_generic_masks,
agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; .aperture_sizes = (void *)intel_8xx_sizes,
agp_bridge->size_type = U8_APER_SIZE; .size_type = U8_APER_SIZE,
agp_bridge->num_aperture_sizes = 7; .num_aperture_sizes = 7,
agp_bridge->dev_private_data = NULL; .configure = intel_820_configure,
agp_bridge->needs_scratch_page = FALSE; .fetch_size = intel_8xx_fetch_size,
agp_bridge->configure = intel_845_configure; .cleanup = intel_820_cleanup,
agp_bridge->fetch_size = intel_8xx_fetch_size; .tlb_flush = intel_820_tlbflush,
agp_bridge->cleanup = intel_8xx_cleanup; .mask_memory = intel_mask_memory,
agp_bridge->tlb_flush = intel_8xx_tlbflush; .agp_enable = agp_generic_enable,
agp_bridge->mask_memory = intel_mask_memory; .cache_flush = global_cache_flush,
agp_bridge->agp_enable = agp_generic_enable; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->cache_flush = global_cache_flush; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .insert_memory = agp_generic_insert_memory,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .remove_memory = agp_generic_remove_memory,
agp_bridge->insert_memory = agp_generic_insert_memory; .alloc_by_type = agp_generic_alloc_by_type,
agp_bridge->remove_memory = agp_generic_remove_memory; .free_by_type = agp_generic_free_by_type,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->free_by_type = agp_generic_free_by_type; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .suspend = agp_generic_suspend,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .resume = agp_generic_resume,
agp_bridge->suspend = agp_generic_suspend; };
agp_bridge->resume = intel_845_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static int __init intel_850_setup (struct pci_dev *pdev) struct agp_bridge_data intel_830mp_bridge = {
{ .type = INTEL_I830_M,
agp_bridge->masks = intel_generic_masks; .masks = intel_generic_masks,
agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; .aperture_sizes = (void *)intel_830mp_sizes,
agp_bridge->size_type = U8_APER_SIZE; .size_type = U8_APER_SIZE,
agp_bridge->num_aperture_sizes = 7; .num_aperture_sizes = 4,
agp_bridge->dev_private_data = NULL; .configure = intel_830mp_configure,
agp_bridge->needs_scratch_page = FALSE; .fetch_size = intel_8xx_fetch_size,
agp_bridge->configure = intel_850_configure; .cleanup = intel_8xx_cleanup,
agp_bridge->fetch_size = intel_8xx_fetch_size; .tlb_flush = intel_8xx_tlbflush,
agp_bridge->cleanup = intel_8xx_cleanup; .mask_memory = intel_mask_memory,
agp_bridge->tlb_flush = intel_8xx_tlbflush; .agp_enable = agp_generic_enable,
agp_bridge->mask_memory = intel_mask_memory; .cache_flush = global_cache_flush,
agp_bridge->agp_enable = agp_generic_enable; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->cache_flush = global_cache_flush; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .insert_memory = agp_generic_insert_memory,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .remove_memory = agp_generic_remove_memory,
agp_bridge->insert_memory = agp_generic_insert_memory; .alloc_by_type = agp_generic_alloc_by_type,
agp_bridge->remove_memory = agp_generic_remove_memory; .free_by_type = agp_generic_free_by_type,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->free_by_type = agp_generic_free_by_type; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .suspend = agp_generic_suspend,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .resume = agp_generic_resume,
agp_bridge->suspend = agp_generic_suspend; };
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static int __init intel_860_setup (struct pci_dev *pdev) struct agp_bridge_data intel_840_bridge = {
{ .masks = intel_generic_masks,
agp_bridge->masks = intel_generic_masks; .aperture_sizes = (void *)intel_8xx_sizes,
agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; .size_type = U8_APER_SIZE,
agp_bridge->size_type = U8_APER_SIZE; .num_aperture_sizes = 7,
agp_bridge->num_aperture_sizes = 7; .configure = intel_840_configure,
agp_bridge->dev_private_data = NULL; .fetch_size = intel_8xx_fetch_size,
agp_bridge->needs_scratch_page = FALSE; .cleanup = intel_8xx_cleanup,
agp_bridge->configure = intel_860_configure; .tlb_flush = intel_8xx_tlbflush,
agp_bridge->fetch_size = intel_8xx_fetch_size; .mask_memory = intel_mask_memory,
agp_bridge->cleanup = intel_8xx_cleanup; .agp_enable = agp_generic_enable,
agp_bridge->tlb_flush = intel_8xx_tlbflush; .cache_flush = global_cache_flush,
agp_bridge->mask_memory = intel_mask_memory; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->agp_enable = agp_generic_enable; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->cache_flush = global_cache_flush; .insert_memory = agp_generic_insert_memory,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .remove_memory = agp_generic_remove_memory,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .alloc_by_type = agp_generic_alloc_by_type,
agp_bridge->insert_memory = agp_generic_insert_memory; .free_by_type = agp_generic_free_by_type,
agp_bridge->remove_memory = agp_generic_remove_memory; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->free_by_type = agp_generic_free_by_type; .suspend = agp_generic_suspend,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .resume = agp_generic_resume,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; };
agp_bridge->suspend = agp_generic_suspend;
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
static int __init intel_7505_setup (struct pci_dev *pdev) struct agp_bridge_data intel_845_bridge = {
{ .type = INTEL_I845,
agp_bridge->masks = intel_generic_masks; .masks = intel_generic_masks,
agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; .aperture_sizes = (void *)intel_8xx_sizes,
agp_bridge->size_type = U8_APER_SIZE; .size_type = U8_APER_SIZE,
agp_bridge->num_aperture_sizes = 7; .num_aperture_sizes = 7,
agp_bridge->dev_private_data = NULL; .configure = intel_845_configure,
agp_bridge->needs_scratch_page = FALSE; .fetch_size = intel_8xx_fetch_size,
agp_bridge->configure = intel_7505_configure; .cleanup = intel_8xx_cleanup,
agp_bridge->fetch_size = intel_8xx_fetch_size; .tlb_flush = intel_8xx_tlbflush,
agp_bridge->cleanup = intel_8xx_cleanup; .mask_memory = intel_mask_memory,
agp_bridge->tlb_flush = intel_8xx_tlbflush; .agp_enable = agp_generic_enable,
agp_bridge->mask_memory = intel_mask_memory; .cache_flush = global_cache_flush,
agp_bridge->agp_enable = agp_generic_enable; .create_gatt_table = agp_generic_create_gatt_table,
agp_bridge->cache_flush = global_cache_flush; .free_gatt_table = agp_generic_free_gatt_table,
agp_bridge->create_gatt_table = agp_generic_create_gatt_table; .insert_memory = agp_generic_insert_memory,
agp_bridge->free_gatt_table = agp_generic_free_gatt_table; .remove_memory = agp_generic_remove_memory,
agp_bridge->insert_memory = agp_generic_insert_memory; .alloc_by_type = agp_generic_alloc_by_type,
agp_bridge->remove_memory = agp_generic_remove_memory; .free_by_type = agp_generic_free_by_type,
agp_bridge->alloc_by_type = agp_generic_alloc_by_type; .agp_alloc_page = agp_generic_alloc_page,
agp_bridge->free_by_type = agp_generic_free_by_type; .agp_destroy_page = agp_generic_destroy_page,
agp_bridge->agp_alloc_page = agp_generic_alloc_page; .suspend = agp_generic_suspend,
agp_bridge->agp_destroy_page = agp_generic_destroy_page; .resume = intel_845_resume,
agp_bridge->suspend = agp_generic_suspend;
agp_bridge->resume = agp_generic_resume;
agp_bridge->cant_use_aperture = 0;
return 0;
}
struct agp_device_ids intel_agp_device_ids[] __initdata =
{
{
.device_id = PCI_DEVICE_ID_INTEL_82443LX_0,
.chipset = INTEL_LX,
.chipset_name = "440LX",
},
{
.device_id = PCI_DEVICE_ID_INTEL_82443BX_0,
.chipset = INTEL_BX,
.chipset_name = "440BX",
},
{
.device_id = PCI_DEVICE_ID_INTEL_82443GX_0,
.chipset = INTEL_GX,
.chipset_name = "440GX",
},
{
.device_id = PCI_DEVICE_ID_INTEL_82815_MC,
.chipset = INTEL_I815,
.chipset_name = "i815",
.chipset_setup = intel_815_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82820_HB,
.chipset = INTEL_I820,
.chipset_name = "i820",
.chipset_setup = intel_820_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82820_UP_HB,
.chipset = INTEL_I820,
.chipset_name = "i820",
.chipset_setup = intel_820_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82830_HB,
.chipset = INTEL_I830_M,
.chipset_name = "830M",
.chipset_setup = intel_830mp_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82840_HB,
.chipset = INTEL_I840,
.chipset_name = "i840",
.chipset_setup = intel_840_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82845_HB,
.chipset = INTEL_I845,
.chipset_name = "i845",
.chipset_setup = intel_845_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82845G_HB,
.chipset = INTEL_I845_G,
.chipset_name = "845G",
.chipset_setup = intel_845_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82850_HB,
.chipset = INTEL_I850,
.chipset_name = "i850",
.chipset_setup = intel_850_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82855_HB,
.chipset = INTEL_I855_PM,
.chipset_name = "855PM",
.chipset_setup = intel_845_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82860_HB,
.chipset = INTEL_I860,
.chipset_name = "i860",
.chipset_setup = intel_860_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_82865_HB,
.chipset = INTEL_I865_G,
.chipset_name = "865G",
.chipset_setup = intel_845_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_7505_0,
.chipset = INTEL_E7505,
.chipset_name = "E7505",
.chipset_setup = intel_7505_setup
},
{
.device_id = PCI_DEVICE_ID_INTEL_7205_0,
.chipset = INTEL_E7505,
.chipset_name = "E7205",
.chipset_setup = intel_7505_setup
},
{ }, /* dummy final entry, always present */
}; };
struct agp_bridge_data intel_850_bridge = {
.type = INTEL_I850,
.masks = intel_generic_masks,
.aperture_sizes = (void *)intel_8xx_sizes,
.size_type = U8_APER_SIZE,
.num_aperture_sizes = 7,
.configure = intel_850_configure,
.fetch_size = intel_8xx_fetch_size,
.cleanup = intel_8xx_cleanup,
.tlb_flush = intel_8xx_tlbflush,
.mask_memory = intel_mask_memory,
.agp_enable = agp_generic_enable,
.cache_flush = global_cache_flush,
.create_gatt_table = agp_generic_create_gatt_table,
.free_gatt_table = agp_generic_free_gatt_table,
.insert_memory = agp_generic_insert_memory,
.remove_memory = agp_generic_remove_memory,
.alloc_by_type = agp_generic_alloc_by_type,
.free_by_type = agp_generic_free_by_type,
.agp_alloc_page = agp_generic_alloc_page,
.agp_destroy_page = agp_generic_destroy_page,
.suspend = agp_generic_suspend,
.resume = agp_generic_resume,
};
/* scan table above for supported devices */ struct agp_bridge_data intel_860_bridge = {
static int __init agp_lookup_host_bridge (struct pci_dev *pdev) .type = INTEL_I860,
{ .masks = intel_generic_masks,
int j=0; .aperture_sizes = (void *)intel_8xx_sizes,
struct agp_device_ids *devs; .size_type = U8_APER_SIZE,
.num_aperture_sizes = 7,
.configure = intel_860_configure,
.fetch_size = intel_8xx_fetch_size,
.cleanup = intel_8xx_cleanup,
.tlb_flush = intel_8xx_tlbflush,
.mask_memory = intel_mask_memory,
.agp_enable = agp_generic_enable,
.cache_flush = global_cache_flush,
.create_gatt_table = agp_generic_create_gatt_table,
.free_gatt_table = agp_generic_free_gatt_table,
.insert_memory = agp_generic_insert_memory,
.remove_memory = agp_generic_remove_memory,
.alloc_by_type = agp_generic_alloc_by_type,
.free_by_type = agp_generic_free_by_type,
.agp_alloc_page = agp_generic_alloc_page,
.agp_destroy_page = agp_generic_destroy_page,
.suspend = agp_generic_suspend,
.resume = agp_generic_resume,
};
devs = intel_agp_device_ids; struct agp_bridge_data intel_7505_bridge = {
.type = INTEL_E7505,
.masks = intel_generic_masks,
.aperture_sizes = (void *)intel_8xx_sizes,
.size_type = U8_APER_SIZE,
.num_aperture_sizes = 7,
.configure = intel_7505_configure,
.fetch_size = intel_8xx_fetch_size,
.cleanup = intel_8xx_cleanup,
.tlb_flush = intel_8xx_tlbflush,
.mask_memory = intel_mask_memory,
.agp_enable = agp_generic_enable,
.cache_flush = global_cache_flush,
.create_gatt_table = agp_generic_create_gatt_table,
.free_gatt_table = agp_generic_free_gatt_table,
.insert_memory = agp_generic_insert_memory,
.remove_memory = agp_generic_remove_memory,
.alloc_by_type = agp_generic_alloc_by_type,
.free_by_type = agp_generic_free_by_type,
.agp_alloc_page = agp_generic_alloc_page,
.agp_destroy_page = agp_generic_destroy_page,
.suspend = agp_generic_suspend,
.resume = agp_generic_resume,
};
while (devs[j].chipset_name != NULL) { static struct agp_driver intel_agp_driver = {
if (pdev->device == devs[j].device_id) { .owner = THIS_MODULE,
printk (KERN_INFO PFX "Detected Intel %s chipset\n", };
devs[j].chipset_name);
agp_bridge->type = devs[j].chipset;
if (devs[j].chipset_setup != NULL) static int find_i810(u16 device, const char *name)
return devs[j].chipset_setup(pdev); {
else struct pci_dev *i810_dev;
return intel_generic_setup(pdev);
} i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, device, NULL);
j++; if (!i810_dev) {
} printk(KERN_ERR PFX "Detected an Intel %s Chipset, "
j--; "but could not find the secondary device.\n",
name);
/* try init anyway, if user requests it */ return 0;
if (agp_try_unsupported) {
printk(KERN_WARNING PFX "Trying generic Intel routines"
" for device id: %04x\n", pdev->device);
agp_bridge->type = INTEL_GENERIC;
return intel_generic_setup(pdev);
} }
printk(KERN_ERR PFX "Unsupported Intel chipset (device id: %04x)," intel_i810_private.i810_dev = i810_dev;
" you might want to try agp_try_unsupported=1.\n", pdev->device); return 1;
return -ENODEV;
} }
static int find_i830(u16 device)
{
struct pci_dev *i830_dev;
/* Supported Device Scanning routine */ i830_dev = pci_find_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,
device, i830_dev);
}
if (!i830_dev)
return 0;
intel_i830_private.i830_dev = i830_dev;
return 1;
}
static int __init agp_find_supported_device(struct pci_dev *dev) static int __init agp_intel_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{ {
struct pci_dev *i810_dev; struct agp_bridge_data *bridge;
char *name = "(unknown)";
u8 cap_ptr = 0; u8 cap_ptr = 0;
agp_bridge->dev = dev; cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
if (!cap_ptr)
return -ENODEV;
/* This shit needs moving into tables/init-routines. */ switch (pdev->device) {
switch (dev->device) { case PCI_DEVICE_ID_INTEL_82443LX_0:
bridge = &intel_generic_bridge;
bridge->type = INTEL_LX;
name = "440LX";
break;
case PCI_DEVICE_ID_INTEL_82443BX_0:
bridge = &intel_generic_bridge;
bridge->type = INTEL_BX;
name = "440BX";
break;
case PCI_DEVICE_ID_INTEL_82443GX_0:
bridge = &intel_generic_bridge;
bridge->type = INTEL_GX;
name = "440GX";
break;
case PCI_DEVICE_ID_INTEL_82810_MC1: case PCI_DEVICE_ID_INTEL_82810_MC1:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1, NULL); if (!find_i810(PCI_DEVICE_ID_INTEL_82810_IG1, "i810"))
if (i810_dev == NULL) {
printk(KERN_ERR PFX "Detected an Intel i810,"
" but could not find the secondary device.\n");
return -ENODEV; return -ENODEV;
} bridge = &intel_810_bridge;
printk(KERN_INFO PFX "Detected an Intel i810 Chipset.\n"); name = "i810";
agp_bridge->type = INTEL_I810; break;
return intel_i810_setup (i810_dev);
case PCI_DEVICE_ID_INTEL_82810_MC3: case PCI_DEVICE_ID_INTEL_82810_MC3:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3, NULL); if (!find_i810(PCI_DEVICE_ID_INTEL_82810_IG3, "i810 DC100"))
if (i810_dev == NULL) {
printk(KERN_ERR PFX "Detected an Intel i810 DC100, but could not find the "
"secondary device.\n");
return -ENODEV; return -ENODEV;
} bridge = &intel_810_bridge;
printk(KERN_INFO PFX "Detected an Intel i810 DC100 Chipset.\n"); name = "i810 DC100";
agp_bridge->type = INTEL_I810; break;
return intel_i810_setup(i810_dev);
case PCI_DEVICE_ID_INTEL_82810E_MC: case PCI_DEVICE_ID_INTEL_82810E_MC:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810E_IG, NULL); if (!find_i810(PCI_DEVICE_ID_INTEL_82810E_IG, "i810 E"))
if (i810_dev == NULL) {
printk(KERN_ERR PFX "Detected an Intel i810 E"
", but could not find the secondary device.\n");
return -ENODEV; return -ENODEV;
} bridge = &intel_810_bridge;
printk(KERN_INFO PFX "Detected an Intel i810 E Chipset.\n"); name = "i810 E";
agp_bridge->type = INTEL_I810; break;
return intel_i810_setup(i810_dev);
case PCI_DEVICE_ID_INTEL_82815_MC: case PCI_DEVICE_ID_INTEL_82815_MC:
/* The i815 can operate either as an i810 style /*
* The i815 can operate either as an i810 style
* integrated device, or as an AGP4X motherboard. * integrated device, or as an AGP4X motherboard.
*
* This only addresses the first mode:
*/ */
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC, NULL); if (find_i810(PCI_DEVICE_ID_INTEL_82815_CGC, "i815"))
if (i810_dev == NULL) { bridge = &intel_810_bridge;
printk(KERN_ERR PFX "agpgart: Detected an " else
"Intel i815, but could not find the" bridge = &intel_815_bridge;
" secondary device. Assuming a " name = "i815";
"non-integrated video card.\n");
break; break;
} case PCI_DEVICE_ID_INTEL_82820_HB:
printk(KERN_INFO PFX "agpgart: Detected an Intel i815 Chipset.\n"); case PCI_DEVICE_ID_INTEL_82820_UP_HB:
agp_bridge->type = INTEL_I810; bridge = &intel_820_bridge;
return intel_i810_setup(i810_dev); name = "i820";
case PCI_DEVICE_ID_INTEL_82845G_HB:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL,
PCI_DEVICE_ID_INTEL_82845G_IG, NULL);
if (i810_dev && PCI_FUNC(i810_dev->devfn) != 0) {
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL,
PCI_DEVICE_ID_INTEL_82845G_IG, i810_dev);
}
if (i810_dev == NULL) {
/*
* We probably have a I845G chipset with an external graphics
* card. It will be initialized later
*/
agp_bridge->type = INTEL_I845_G;
break; break;
}
printk(KERN_INFO PFX "Detected an Intel(R) 845G Chipset.\n");
agp_bridge->type = INTEL_I810;
return intel_i830_setup(i810_dev);
case PCI_DEVICE_ID_INTEL_82830_HB: case PCI_DEVICE_ID_INTEL_82830_HB:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82830_CGC, NULL); if (find_i830(PCI_DEVICE_ID_INTEL_82830_CGC)) {
if(i810_dev && PCI_FUNC(i810_dev->devfn) != 0) bridge = &intel_830_bridge;
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82830_CGC, i810_dev); } else {
bridge = &intel_830mp_bridge;
if (i810_dev == NULL) {
/* Intel 830MP with external graphic card */
/* It will be initialized later */
agp_bridge->type = INTEL_I830_M;
break;
} }
printk(KERN_INFO PFX "Detected an Intel(R) 830M Chipset.\n"); name = "830M";
agp_bridge->type = INTEL_I810;
return intel_i830_setup(i810_dev);
case PCI_DEVICE_ID_INTEL_82855_HB:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855_IG, NULL);
if(i810_dev && PCI_FUNC(i810_dev->devfn) != 0)
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855_IG, i810_dev);
if (i810_dev == NULL) {
/* Intel 855PM with external graphic card */
/* It will be initialized later */
agp_bridge->type = INTEL_I855_PM;
break; break;
} case PCI_DEVICE_ID_INTEL_82840_HB:
{ bridge = &intel_840_bridge;
u32 capval = 0; name = "i840";
const char *name = "855GM/852GM";
pci_read_config_dword(dev, I85X_CAPID, &capval);
switch ((capval >> I85X_VARIANT_SHIFT) &
I85X_VARIANT_MASK) {
case I855_GME:
name = "855GME";
break; break;
case I855_GM: case PCI_DEVICE_ID_INTEL_82845_HB:
name = "855GM"; bridge = &intel_845_bridge;
name = "i845";
break; break;
case I852_GME: case PCI_DEVICE_ID_INTEL_82845G_HB:
name = "852GME"; if (find_i830(PCI_DEVICE_ID_INTEL_82845G_IG)) {
bridge = &intel_830_bridge;
} else {
bridge = &intel_845_bridge;
bridge->type = INTEL_I845_G;
}
name = "845G";
break; break;
case I852_GM: case PCI_DEVICE_ID_INTEL_82850_HB:
name = "852GM"; bridge = &intel_850_bridge;
name = "i850";
break; break;
case PCI_DEVICE_ID_INTEL_82855_HB:
if (find_i830(PCI_DEVICE_ID_INTEL_82855_IG)) {
bridge = &intel_830_bridge;
name = "855";
} else {
bridge = &intel_845_bridge;
bridge->type = INTEL_I855_PM;
name = "855PM";
} }
printk(KERN_INFO PFX break;
"Detected an Intel(R) %s Chipset.\n", name); case PCI_DEVICE_ID_INTEL_82860_HB:
} bridge = &intel_860_bridge;
agp_bridge->type = INTEL_I810; name = "i860";
return intel_i830_setup(i810_dev); break;
case PCI_DEVICE_ID_INTEL_82865_HB: case PCI_DEVICE_ID_INTEL_82865_HB:
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, if (find_i830(PCI_DEVICE_ID_INTEL_82865_IG)) {
PCI_DEVICE_ID_INTEL_82865_IG, NULL); bridge = &intel_830_bridge;
if (i810_dev && PCI_FUNC(i810_dev->devfn) != 0) { } else {
i810_dev = pci_find_device(PCI_VENDOR_ID_INTEL, bridge = &intel_845_bridge;
PCI_DEVICE_ID_INTEL_82865_IG, i810_dev); bridge->type = INTEL_I865_G;
} }
name = "865";
if (i810_dev == NULL) {
/*
* We probably have a 865G chipset with an external graphics
* card. It will be initialized later
*/
agp_bridge->type = INTEL_I865_G;
break; break;
} case PCI_DEVICE_ID_INTEL_7505_0:
printk(KERN_INFO PFX "Detected an Intel(R) 865G Chipset.\n"); bridge = &intel_7505_bridge;
agp_bridge->type = INTEL_I810; name = "E7505";
return intel_i830_setup(i810_dev); break;
case PCI_DEVICE_ID_INTEL_7205_0:
default: bridge = &intel_7505_bridge;
name = "E7205";
break; break;
default:
if (!agp_try_unsupported) {
printk(KERN_ERR PFX
"Unsupported Intel chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.\n",
pdev->device);
return -ENODEV;
} }
bridge = &intel_generic_bridge;
break;
};
cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP); bridge->dev = pdev;
if (cap_ptr == 0) bridge->capndx = cap_ptr;
return -ENODEV;
agp_bridge->capndx = cap_ptr;
/* Fill in the mode register */ printk(KERN_INFO PFX "Detected an Intel %s Chipset.\n", name);
pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+PCI_AGP_STATUS, &agp_bridge->mode);
/* probe for known chipsets */ /* Fill in the mode register */
return agp_lookup_host_bridge(dev); pci_read_config_dword(pdev,
} bridge->capndx+PCI_AGP_STATUS,
&bridge->mode);
static struct agp_driver intel_agp_driver = {
.owner = THIS_MODULE,
};
static int __init agp_intel_probe (struct pci_dev *dev, const struct pci_device_id *ent) memcpy(agp_bridge, bridge, sizeof(struct agp_bridge_data));
{ intel_agp_driver.dev = pdev;
if (agp_find_supported_device(dev) == 0) {
intel_agp_driver.dev = dev;
agp_register_driver(&intel_agp_driver); agp_register_driver(&intel_agp_driver);
return 0; return 0;
}
return -ENODEV;
} }
static struct pci_device_id agp_intel_pci_table[] __initdata = { static struct pci_device_id agp_intel_pci_table[] __initdata = {
...@@ -1645,18 +1462,13 @@ static struct __initdata pci_driver agp_intel_pci_driver = { ...@@ -1645,18 +1462,13 @@ static struct __initdata pci_driver agp_intel_pci_driver = {
early initialization to work (ie i810fb) */ early initialization to work (ie i810fb) */
int __init agp_intel_init(void) int __init agp_intel_init(void)
{ {
int ret_val;
static int agp_initialised=0; static int agp_initialised=0;
if (agp_initialised==1) if (agp_initialised == 1)
return 0; return 0;
agp_initialised=1; agp_initialised=1;
ret_val = pci_module_init(&agp_intel_pci_driver); return pci_module_init(&agp_intel_pci_driver);
if (ret_val)
agp_bridge->type = NOT_SUPPORTED;
return ret_val;
} }
static void __exit agp_intel_cleanup(void) static void __exit agp_intel_cleanup(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment