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

📄 intel-agp.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 4 页
字号:
	/* the Intel 815 chipset spec. says that bits 29-31 in the	* ATTBASE register are reserved -> try not to write them */	if (agp_bridge->gatt_bus_addr & INTEL_815_ATTBASE_MASK) {		printk (KERN_EMERG PFX "gatt bus addr too high");		return -EINVAL;	}	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE,			current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	pci_read_config_dword(agp_bridge->dev, INTEL_ATTBASE, &addr);	addr &= INTEL_815_ATTBASE_MASK;	addr |= agp_bridge->gatt_bus_addr;	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* apcont */	pci_read_config_byte(agp_bridge->dev, INTEL_815_APCONT, &temp2);	pci_write_config_byte(agp_bridge->dev, INTEL_815_APCONT, temp2 | (1 << 1));	/* clear any possible error conditions */	/* Oddness : this chipset seems to have no ERRSTS register ! */	return 0;}static void intel_820_tlbflush(struct agp_memory *mem){	return;}static void intel_820_cleanup(void){	u8 temp;	struct aper_size_info_8 *previous_size;	previous_size = A_SIZE_8(agp_bridge->previous_size);	pci_read_config_byte(agp_bridge->dev, INTEL_I820_RDCR, &temp);	pci_write_config_byte(agp_bridge->dev, INTEL_I820_RDCR,			temp & ~(1 << 1));	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE,			previous_size->size_value);}static int intel_820_configure(void){	u32 temp;	u8 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* global enable aperture access */	/* This flag is not accessed through MCHCFG register as in */	/* i850 chipset. */	pci_read_config_byte(agp_bridge->dev, INTEL_I820_RDCR, &temp2);	pci_write_config_byte(agp_bridge->dev, INTEL_I820_RDCR, temp2 | (1 << 1));	/* clear any possible AGP-related error conditions */	pci_write_config_word(agp_bridge->dev, INTEL_I820_ERRSTS, 0x001c);	return 0;}static int intel_840_configure(void){	u32 temp;	u16 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* mcgcfg */	pci_read_config_word(agp_bridge->dev, INTEL_I840_MCHCFG, &temp2);	pci_write_config_word(agp_bridge->dev, INTEL_I840_MCHCFG, temp2 | (1 << 9));	/* clear any possible error conditions */	pci_write_config_word(agp_bridge->dev, INTEL_I840_ERRSTS, 0xc000);	return 0;}static int intel_845_configure(void){	u32 temp;	u8 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	if (agp_bridge->apbase_config != 0) {		pci_write_config_dword(agp_bridge->dev, AGP_APBASE,				       agp_bridge->apbase_config);	} else {		/* address to map to */		pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);		agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);		agp_bridge->apbase_config = temp;	}	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* agpm */	pci_read_config_byte(agp_bridge->dev, INTEL_I845_AGPM, &temp2);	pci_write_config_byte(agp_bridge->dev, INTEL_I845_AGPM, temp2 | (1 << 1));	/* clear any possible error conditions */	pci_write_config_word(agp_bridge->dev, INTEL_I845_ERRSTS, 0x001c);	return 0;}static int intel_850_configure(void){	u32 temp;	u16 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* mcgcfg */	pci_read_config_word(agp_bridge->dev, INTEL_I850_MCHCFG, &temp2);	pci_write_config_word(agp_bridge->dev, INTEL_I850_MCHCFG, temp2 | (1 << 9));	/* clear any possible AGP-related error conditions */	pci_write_config_word(agp_bridge->dev, INTEL_I850_ERRSTS, 0x001c);	return 0;}static int intel_860_configure(void){	u32 temp;	u16 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* mcgcfg */	pci_read_config_word(agp_bridge->dev, INTEL_I860_MCHCFG, &temp2);	pci_write_config_word(agp_bridge->dev, INTEL_I860_MCHCFG, temp2 | (1 << 9));	/* clear any possible AGP-related error conditions */	pci_write_config_word(agp_bridge->dev, INTEL_I860_ERRSTS, 0xf700);	return 0;}static int intel_830mp_configure(void){	u32 temp;	u16 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* gmch */	pci_read_config_word(agp_bridge->dev, INTEL_NBXCFG, &temp2);	pci_write_config_word(agp_bridge->dev, INTEL_NBXCFG, temp2 | (1 << 9));	/* clear any possible AGP-related error conditions */	pci_write_config_word(agp_bridge->dev, INTEL_I830_ERRSTS, 0x1c);	return 0;}static int intel_7505_configure(void){	u32 temp;	u16 temp2;	struct aper_size_info_8 *current_size;	current_size = A_SIZE_8(agp_bridge->current_size);	/* aperture size */	pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value);	/* address to map to */	pci_read_config_dword(agp_bridge->dev, AGP_APBASE, &temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	/* attbase - aperture base */	pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr);	/* agpctrl */	pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000);	/* mchcfg */	pci_read_config_word(agp_bridge->dev, INTEL_I7505_MCHCFG, &temp2);	pci_write_config_word(agp_bridge->dev, INTEL_I7505_MCHCFG, temp2 | (1 << 9));	return 0;}/* Setup function */static struct gatt_mask intel_generic_masks[] ={	{.mask = 0x00000017, .type = 0}};static struct aper_size_info_8 intel_815_sizes[2] ={	{64, 16384, 4, 0},	{32, 8192, 3, 8},};static struct aper_size_info_8 intel_8xx_sizes[7] ={	{256, 65536, 6, 0},	{128, 32768, 5, 32},	{64, 16384, 4, 48},	{32, 8192, 3, 56},	{16, 4096, 2, 60},	{8, 2048, 1, 62},	{4, 1024, 0, 63}};static struct aper_size_info_16 intel_generic_sizes[7] ={	{256, 65536, 6, 0},	{128, 32768, 5, 32},	{64, 16384, 4, 48},	{32, 8192, 3, 56},	{16, 4096, 2, 60},	{8, 2048, 1, 62},	{4, 1024, 0, 63}};static struct aper_size_info_8 intel_830mp_sizes[4] ={	{256, 65536, 6, 0},	{128, 32768, 5, 32},	{64, 16384, 4, 48},	{32, 8192, 3, 56}};static struct agp_bridge_driver intel_generic_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_generic_sizes,	.size_type		= U16_APER_SIZE,	.num_aperture_sizes	= 7,	.configure		= intel_configure,	.fetch_size		= intel_fetch_size,	.cleanup		= intel_cleanup,	.tlb_flush		= intel_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,};static struct agp_bridge_driver intel_810_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_i810_sizes,	.size_type		= FIXED_APER_SIZE,	.num_aperture_sizes	= 2,	.needs_scratch_page	= TRUE,	.configure		= intel_i810_configure,	.fetch_size		= intel_i810_fetch_size,	.cleanup		= intel_i810_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	= agp_generic_create_gatt_table,	.free_gatt_table	= agp_generic_free_gatt_table,	.insert_memory		= intel_i810_insert_entries,	.remove_memory		= intel_i810_remove_entries,	.alloc_by_type		= intel_i810_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,};static struct agp_bridge_driver intel_815_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_815_sizes,	.size_type		= U8_APER_SIZE,	.num_aperture_sizes	= 2,	.configure		= intel_815_configure,	.fetch_size		= intel_815_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,};static struct agp_bridge_driver intel_830_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_i830_sizes,	.size_type		= FIXED_APER_SIZE,	.num_aperture_sizes	= 3,	.needs_scratch_page	= TRUE,	.configure		= intel_i830_configure,	.fetch_size		= intel_i830_fetch_size,	.cleanup		= intel_i830_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_i830_create_gatt_table,	.free_gatt_table	= intel_i830_free_gatt_table,	.insert_memory		= intel_i830_insert_entries,	.remove_memory		= intel_i830_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,};static struct agp_bridge_driver intel_820_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_8xx_sizes,	.size_type		= U8_APER_SIZE,	.num_aperture_sizes	= 7,	.configure		= intel_820_configure,	.fetch_size		= intel_8xx_fetch_size,	.cleanup		= intel_820_cleanup,	.tlb_flush		= intel_820_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,};static struct agp_bridge_driver intel_830mp_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_830mp_sizes,	.size_type		= U8_APER_SIZE,	.num_aperture_sizes	= 4,	.configure		= intel_830mp_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,};static struct agp_bridge_driver intel_840_driver = {	.owner			= THIS_MODULE,	.aperture_sizes		= intel_8xx_sizes,	.size_type		= U8_APER_SIZE,	.num_aperture_sizes	= 7,	.configure		= intel_840_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,

⌨️ 快捷键说明

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