⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intel-agp.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	.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,	.agp_type_to_mask_type  = agp_generic_type_to_mask_type,};static const struct agp_bridge_driver intel_915_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_i830_sizes,	.size_type		= FIXED_APER_SIZE,	.num_aperture_sizes	= 4,	.needs_scratch_page	= TRUE,	.configure		= intel_i915_configure,	.fetch_size		= intel_i9xx_fetch_size,	.cleanup		= intel_i915_cleanup,	.tlb_flush		= intel_i810_tlbflush,	.mask_memory		= intel_i810_mask_memory,	.masks			= intel_i810_masks,	.agp_enable		= intel_i810_agp_enable,	.cache_flush		= global_cache_flush,	.create_gatt_table	= intel_i915_create_gatt_table,	.free_gatt_table	= intel_i830_free_gatt_table,	.insert_memory		= intel_i915_insert_entries,	.remove_memory		= intel_i915_remove_entries,	.alloc_by_type		= intel_i830_alloc_by_type,	.free_by_type		= intel_i810_free_by_type,	.agp_alloc_page		= agp_generic_alloc_page,	.agp_destroy_page	= agp_generic_destroy_page,	.agp_type_to_mask_type  = intel_i830_type_to_mask_type,};static const struct agp_bridge_driver intel_i965_driver = {       .owner                  = THIS_MODULE,       .aperture_sizes         = intel_i830_sizes,       .size_type              = FIXED_APER_SIZE,       .num_aperture_sizes     = 4,       .needs_scratch_page     = TRUE,       .configure              = intel_i915_configure,       .fetch_size             = intel_i9xx_fetch_size,       .cleanup                = intel_i915_cleanup,       .tlb_flush              = intel_i810_tlbflush,       .mask_memory            = intel_i965_mask_memory,       .masks                  = intel_i810_masks,       .agp_enable             = intel_i810_agp_enable,       .cache_flush            = global_cache_flush,       .create_gatt_table      = intel_i965_create_gatt_table,       .free_gatt_table        = intel_i830_free_gatt_table,       .insert_memory          = intel_i915_insert_entries,       .remove_memory          = intel_i915_remove_entries,       .alloc_by_type          = intel_i830_alloc_by_type,       .free_by_type           = intel_i810_free_by_type,       .agp_alloc_page         = agp_generic_alloc_page,       .agp_destroy_page       = agp_generic_destroy_page,       .agp_type_to_mask_type  = intel_i830_type_to_mask_type,};static const struct agp_bridge_driver intel_7505_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= 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		= agp_generic_mask_memory,	.masks			= intel_generic_masks,	.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,	.agp_type_to_mask_type  = agp_generic_type_to_mask_type,};static const struct agp_bridge_driver intel_g33_driver = {	.owner                  = THIS_MODULE,	.aperture_sizes         = intel_i830_sizes,	.size_type              = FIXED_APER_SIZE,	.num_aperture_sizes     = 4,	.needs_scratch_page     = TRUE,	.configure              = intel_i915_configure,	.fetch_size             = intel_i9xx_fetch_size,	.cleanup                = intel_i915_cleanup,	.tlb_flush              = intel_i810_tlbflush,	.mask_memory            = intel_i965_mask_memory,	.masks                  = intel_i810_masks,	.agp_enable             = intel_i810_agp_enable,	.cache_flush            = global_cache_flush,	.create_gatt_table      = intel_i915_create_gatt_table,	.free_gatt_table        = intel_i830_free_gatt_table,	.insert_memory          = intel_i915_insert_entries,	.remove_memory          = intel_i915_remove_entries,	.alloc_by_type          = intel_i830_alloc_by_type,	.free_by_type           = intel_i810_free_by_type,	.agp_alloc_page         = agp_generic_alloc_page,	.agp_destroy_page       = agp_generic_destroy_page,	.agp_type_to_mask_type  = intel_i830_type_to_mask_type,};static int find_gmch(u16 device){	struct pci_dev *gmch_device;	gmch_device = pci_get_device(PCI_VENDOR_ID_INTEL, device, NULL);	if (gmch_device && PCI_FUNC(gmch_device->devfn) != 0) {		gmch_device = pci_get_device(PCI_VENDOR_ID_INTEL,                                device, gmch_device);	}	if (!gmch_device)		return 0;	intel_private.pcidev = gmch_device;	return 1;}/* Table to describe Intel GMCH and AGP/PCIE GART drivers.  At least one of * driver and gmch_driver must be non-null, and find_gmch will determine * which one should be used if a gmch_chip_id is present. */static const struct intel_driver_description {	unsigned int chip_id;	unsigned int gmch_chip_id;	unsigned int multi_gmch_chip; /* if we have more gfx chip type on this HB. */	char *name;	const struct agp_bridge_driver *driver;	const struct agp_bridge_driver *gmch_driver;} intel_agp_chipsets[] = {	{ PCI_DEVICE_ID_INTEL_82443LX_0, 0, 0, "440LX", &intel_generic_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82443BX_0, 0, 0, "440BX", &intel_generic_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82443GX_0, 0, 0, "440GX", &intel_generic_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82810_MC1, PCI_DEVICE_ID_INTEL_82810_IG1, 0, "i810",		NULL, &intel_810_driver },	{ PCI_DEVICE_ID_INTEL_82810_MC3, PCI_DEVICE_ID_INTEL_82810_IG3, 0, "i810",		NULL, &intel_810_driver },	{ PCI_DEVICE_ID_INTEL_82810E_MC, PCI_DEVICE_ID_INTEL_82810E_IG, 0, "i810",		NULL, &intel_810_driver },	{ PCI_DEVICE_ID_INTEL_82815_MC, PCI_DEVICE_ID_INTEL_82815_CGC, 0, "i815",		&intel_815_driver, &intel_810_driver },	{ PCI_DEVICE_ID_INTEL_82820_HB, 0, 0, "i820", &intel_820_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82820_UP_HB, 0, 0, "i820", &intel_820_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82830_HB, PCI_DEVICE_ID_INTEL_82830_CGC, 0, "830M",		&intel_830mp_driver, &intel_830_driver },	{ PCI_DEVICE_ID_INTEL_82840_HB, 0, 0, "i840", &intel_840_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82845_HB, 0, 0, "845G", &intel_845_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, 0, "830M",		&intel_845_driver, &intel_830_driver },	{ PCI_DEVICE_ID_INTEL_82850_HB, 0, 0, "i850", &intel_850_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82855PM_HB, 0, 0, "855PM", &intel_845_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, 0, "855GM",		&intel_845_driver, &intel_830_driver },	{ PCI_DEVICE_ID_INTEL_82860_HB, 0, 0, "i860", &intel_860_driver, NULL },	{ PCI_DEVICE_ID_INTEL_82865_HB, PCI_DEVICE_ID_INTEL_82865_IG, 0, "865",		&intel_845_driver, &intel_830_driver },	{ PCI_DEVICE_ID_INTEL_82875_HB, 0, 0, "i875", &intel_845_driver, NULL },	{ PCI_DEVICE_ID_INTEL_E7221_HB, PCI_DEVICE_ID_INTEL_E7221_IG, 0, "E7221 (i915)",		NULL, &intel_915_driver },	{ PCI_DEVICE_ID_INTEL_82915G_HB, PCI_DEVICE_ID_INTEL_82915G_IG, 0, "915G",		NULL, &intel_915_driver },	{ PCI_DEVICE_ID_INTEL_82915GM_HB, PCI_DEVICE_ID_INTEL_82915GM_IG, 0, "915GM",		NULL, &intel_915_driver },	{ PCI_DEVICE_ID_INTEL_82945G_HB, PCI_DEVICE_ID_INTEL_82945G_IG, 0, "945G",		NULL, &intel_915_driver },	{ PCI_DEVICE_ID_INTEL_82945GM_HB, PCI_DEVICE_ID_INTEL_82945GM_IG, 0, "945GM",		NULL, &intel_915_driver },	{ PCI_DEVICE_ID_INTEL_82945GME_HB, PCI_DEVICE_ID_INTEL_82945GME_IG, 0, "945GME",		NULL, &intel_915_driver },	{ PCI_DEVICE_ID_INTEL_82946GZ_HB, PCI_DEVICE_ID_INTEL_82946GZ_IG, 0, "946GZ",		NULL, &intel_i965_driver },	{ PCI_DEVICE_ID_INTEL_82965G_1_HB, PCI_DEVICE_ID_INTEL_82965G_1_IG, 0, "965G",		NULL, &intel_i965_driver },	{ PCI_DEVICE_ID_INTEL_82965Q_HB, PCI_DEVICE_ID_INTEL_82965Q_IG, 0, "965Q",		NULL, &intel_i965_driver },	{ PCI_DEVICE_ID_INTEL_82965G_HB, PCI_DEVICE_ID_INTEL_82965G_IG, 0, "965G",		NULL, &intel_i965_driver },	{ PCI_DEVICE_ID_INTEL_82965GM_HB, PCI_DEVICE_ID_INTEL_82965GM_IG, 0, "965GM",		NULL, &intel_i965_driver },	{ PCI_DEVICE_ID_INTEL_82965GME_HB, PCI_DEVICE_ID_INTEL_82965GME_IG, 0, "965GME/GLE",		NULL, &intel_i965_driver },	{ PCI_DEVICE_ID_INTEL_7505_0, 0, 0, "E7505", &intel_7505_driver, NULL },	{ PCI_DEVICE_ID_INTEL_7205_0, 0, 0, "E7205", &intel_7505_driver, NULL },	{ PCI_DEVICE_ID_INTEL_G33_HB, PCI_DEVICE_ID_INTEL_G33_IG, 0, "G33",		NULL, &intel_g33_driver },	{ PCI_DEVICE_ID_INTEL_Q35_HB, PCI_DEVICE_ID_INTEL_Q35_IG, 0, "Q35",		NULL, &intel_g33_driver },	{ PCI_DEVICE_ID_INTEL_Q33_HB, PCI_DEVICE_ID_INTEL_Q33_IG, 0, "Q33",		NULL, &intel_g33_driver },	{ 0, 0, 0, NULL, NULL, NULL }};static int __devinit agp_intel_probe(struct pci_dev *pdev,				     const struct pci_device_id *ent){	struct agp_bridge_data *bridge;	u8 cap_ptr = 0;	struct resource *r;	int i;	cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);	bridge = agp_alloc_bridge();	if (!bridge)		return -ENOMEM;	for (i = 0; intel_agp_chipsets[i].name != NULL; i++) {		/* In case that multiple models of gfx chip may		   stand on same host bridge type, this can be		   sure we detect the right IGD. */		if (pdev->device == intel_agp_chipsets[i].chip_id) {			if ((intel_agp_chipsets[i].gmch_chip_id != 0) &&				find_gmch(intel_agp_chipsets[i].gmch_chip_id)) {				bridge->driver =					intel_agp_chipsets[i].gmch_driver;				break;			} else if (intel_agp_chipsets[i].multi_gmch_chip) {				continue;			} else {				bridge->driver = intel_agp_chipsets[i].driver;				break;			}		}	}	if (intel_agp_chipsets[i].name == NULL) {		if (cap_ptr)			printk(KERN_WARNING PFX "Unsupported Intel chipset"                               "(device id: %04x)\n", pdev->device);		agp_put_bridge(bridge);		return -ENODEV;	}	if (bridge->driver == NULL) {		/* bridge has no AGP and no IGD detected */		if (cap_ptr)			printk(KERN_WARNING PFX "Failed to find bridge device "				"(chip_id: %04x)\n",				intel_agp_chipsets[i].gmch_chip_id);		agp_put_bridge(bridge);		return -ENODEV;        }	bridge->dev = pdev;	bridge->capndx = cap_ptr;	bridge->dev_private_data = &intel_private;	printk(KERN_INFO PFX "Detected an Intel %s Chipset.\n",		intel_agp_chipsets[i].name);	/*	* The following fixes the case where the BIOS has "forgotten" to	* provide an address range for the GART.	* 20030610 - hamish@zot.org	*/	r = &pdev->resource[0];	if (!r->start && r->end) {		if (pci_assign_resource(pdev, 0)) {			printk(KERN_ERR PFX "could not assign resource 0\n");			agp_put_bridge(bridge);			return -ENODEV;		}	}	/*	* If the device has not been properly setup, the following will catch	* the problem and should stop the system from crashing.	* 20030610 - hamish@zot.org	*/	if (pci_enable_device(pdev)) {		printk(KERN_ERR PFX "Unable to Enable PCI device\n");		agp_put_bridge(bridge);		return -ENODEV;	}	/* Fill in the mode register */	if (cap_ptr) {		pci_read_config_dword(pdev,				bridge->capndx+PCI_AGP_STATUS,				&bridge->mode);	}	pci_set_drvdata(pdev, bridge);	return agp_add_bridge(bridge);}static void __devexit agp_intel_remove(struct pci_dev *pdev){	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);	agp_remove_bridge(bridge);	if (intel_private.pcidev)		pci_dev_put(intel_private.pcidev);	agp_put_bridge(bridge);}#ifdef CONFIG_PMstatic int agp_intel_resume(struct pci_dev *pdev){	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);	pci_restore_state(pdev);	/* We should restore our graphics device's config space,	 * as host bridge (00:00) resumes before graphics device (02:00),	 * then our access to its pci space can work right.	 */	if (intel_private.pcidev)		pci_restore_state(intel_private.pcidev);	if (bridge->driver == &intel_generic_driver)		intel_configure();	else if (bridge->driver == &intel_850_driver)		intel_850_configure();	else if (bridge->driver == &intel_845_driver)		intel_845_configure();	else if (bridge->driver == &intel_830mp_driver)		intel_830mp_configure();	else if (bridge->driver == &intel_915_driver)		intel_i915_configure();	else if (bridge->driver == &intel_830_driver)		intel_i830_configure();	else if (bridge->driver == &intel_810_driver)		intel_i810_configure();	else if (bridge->driver == &intel_i965_driver)		intel_i915_configure();	return 0;}#endifstatic struct pci_device_id agp_intel_pci_table[] = {#define ID(x)						\	{						\	.class		= (PCI_CLASS_BRIDGE_HOST << 8),	\	.class_mask	= ~0,				\	.vendor		= PCI_VENDOR_ID_INTEL,		\	.device		= x,				\	.subvendor	= PCI_ANY_ID,			\	.subdevice	= PCI_ANY_ID,			\	}	ID(PCI_DEVICE_ID_INTEL_82443LX_0),	ID(PCI_DEVICE_ID_INTEL_82443BX_0),	ID(PCI_DEVICE_ID_INTEL_82443GX_0),	ID(PCI_DEVICE_ID_INTEL_82810_MC1),	ID(PCI_DEVICE_ID_INTEL_82810_MC3),	ID(PCI_DEVICE_ID_INTEL_82810E_MC),	ID(PCI_DEVICE_ID_INTEL_82815_MC),	ID(PCI_DEVICE_ID_INTEL_82820_HB),	ID(PCI_DEVICE_ID_INTEL_82820_UP_HB),	ID(PCI_DEVICE_ID_INTEL_82830_HB),	ID(PCI_DEVICE_ID_INTEL_82840_HB),	ID(PCI_DEVICE_ID_INTEL_82845_HB),	ID(PCI_DEVICE_ID_INTEL_82845G_HB),	ID(PCI_DEVICE_ID_INTEL_82850_HB),	ID(PCI_DEVICE_ID_INTEL_82855PM_HB),	ID(PCI_DEVICE_ID_INTEL_82855GM_HB),	ID(PCI_DEVICE_ID_INTEL_82860_HB),	ID(PCI_DEVICE_ID_INTEL_82865_HB),	ID(PCI_DEVICE_ID_INTEL_82875_HB),	ID(PCI_DEVICE_ID_INTEL_7505_0),	ID(PCI_DEVICE_ID_INTEL_7205_0),	ID(PCI_DEVICE_ID_INTEL_E7221_HB),	ID(PCI_DEVICE_ID_INTEL_82915G_HB),	ID(PCI_DEVICE_ID_INTEL_82915GM_HB),	ID(PCI_DEVICE_ID_INTEL_82945G_HB),	ID(PCI_DEVICE_ID_INTEL_82945GM_HB),	ID(PCI_DEVICE_ID_INTEL_82945GME_HB),	ID(PCI_DEVICE_ID_INTEL_82946GZ_HB),	ID(PCI_DEVICE_ID_INTEL_82965G_1_HB),	ID(PCI_DEVICE_ID_INTEL_82965Q_HB),	ID(PCI_DEVICE_ID_INTEL_82965G_HB),	ID(PCI_DEVICE_ID_INTEL_82965GM_HB),	ID(PCI_DEVICE_ID_INTEL_82965GME_HB),	ID(PCI_DEVICE_ID_INTEL_G33_HB),	ID(PCI_DEVICE_ID_INTEL_Q35_HB),	ID(PCI_DEVICE_ID_INTEL_Q33_HB),	{ }};MODULE_DEVICE_TABLE(pci, agp_intel_pci_table);static struct pci_driver agp_intel_pci_driver = {	.name		= "agpgart-intel",	.id_table	= agp_intel_pci_table,	.probe		= agp_intel_probe,	.remove		= __devexit_p(agp_intel_remove),#ifdef CONFIG_PM	.resume		= agp_intel_resume,#endif};static int __init agp_intel_init(void){	if (agp_off)		return -EINVAL;	return pci_register_driver(&agp_intel_pci_driver);}static void __exit agp_intel_cleanup(void){	pci_unregister_driver(&agp_intel_pci_driver);}module_init(agp_intel_init);module_exit(agp_intel_cleanup);MODULE_AUTHOR("Dave Jones <davej@codemonkey.org.uk>");MODULE_LICENSE("GPL and additional rights");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -