亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? intel-mch-agp.c

?? Linux Kernel 2.6.9 for OMAP1710
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Intel MCH AGPGART routines. */#include <linux/module.h>#include <linux/pci.h>#include <linux/init.h>#include <linux/agp_backend.h>#include "agp.h"#define AGP_DCACHE_MEMORY	1#define AGP_PHYS_MEMORY		2static struct gatt_mask intel_i810_masks[] ={	{.mask = I810_PTE_VALID, .type = 0},	{.mask = (I810_PTE_VALID | I810_PTE_LOCAL), .type = AGP_DCACHE_MEMORY},	{.mask = I810_PTE_VALID, .type = 0}};static void intel_i810_tlbflush(struct agp_memory *mem){	return;}static void intel_i810_agp_enable(u32 mode){	return;}/* * The i810/i830 requires a physical address to program its mouse * pointer into hardware. * However the Xserver still writes to it through the agp aperture. */static struct agp_memory *alloc_agpphysmem_i8xx(size_t pg_count, int type){	struct agp_memory *new;	void *addr;	if (pg_count != 1)		return NULL;	addr = agp_bridge->driver->agp_alloc_page();	if (addr == NULL)		return NULL;	new = agp_create_memory(1);	if (new == NULL)		return NULL;	new->memory[0] = agp_bridge->driver->mask_memory(virt_to_phys(addr), type);	new->page_count = 1;	new->num_scratch_pages = 1;	new->type = AGP_PHYS_MEMORY;	new->physical = new->memory[0];	return new;}static void intel_i810_free_by_type(struct agp_memory *curr){	agp_free_key(curr->key);	if(curr->type == AGP_PHYS_MEMORY) {		agp_bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[0]));		vfree(curr->memory);	}	kfree(curr);}static unsigned long intel_i810_mask_memory(unsigned long addr, int type){	/* Type checking must be done elsewhere */	return addr | agp_bridge->driver->masks[type].mask;}static struct aper_size_info_fixed intel_i830_sizes[] ={	{128, 32768, 5},	/* The 64M mode still requires a 128k gatt */	{64, 16384, 5}};static struct _intel_i830_private {	struct pci_dev *i830_dev;		/* device one */	volatile u8 __iomem *registers;	int gtt_entries;} intel_i830_private;static void intel_i830_init_gtt_entries(void){	u16 gmch_ctrl;	int gtt_entries;	u8 rdct;	int local = 0;	static const int ddt[4] = { 0, 16, 32, 64 };	pci_read_config_word(agp_bridge->dev,I830_GMCH_CTRL,&gmch_ctrl);	if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB ||	    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) {		switch (gmch_ctrl & I830_GMCH_GMS_MASK) {		case I830_GMCH_GMS_STOLEN_512:			gtt_entries = KB(512) - KB(132);			break;		case I830_GMCH_GMS_STOLEN_1024:			gtt_entries = MB(1) - KB(132);			break;		case I830_GMCH_GMS_STOLEN_8192:			gtt_entries = MB(8) - KB(132);			break;		case I830_GMCH_GMS_LOCAL:			rdct = INREG8(intel_i830_private.registers,				      I830_RDRAM_CHANNEL_TYPE);			gtt_entries = (I830_RDRAM_ND(rdct) + 1) *					MB(ddt[I830_RDRAM_DDT(rdct)]);			local = 1;			break;		default:			gtt_entries = 0;			break;		}	} else {		switch (gmch_ctrl & I830_GMCH_GMS_MASK) {		case I855_GMCH_GMS_STOLEN_1M:			gtt_entries = MB(1) - KB(132);			break;		case I855_GMCH_GMS_STOLEN_4M:			gtt_entries = MB(4) - KB(132);			break;		case I855_GMCH_GMS_STOLEN_8M:			gtt_entries = MB(8) - KB(132);			break;		case I855_GMCH_GMS_STOLEN_16M:			gtt_entries = MB(16) - KB(132);			break;		case I855_GMCH_GMS_STOLEN_32M:			gtt_entries = MB(32) - KB(132);			break;		default:			gtt_entries = 0;			break;		}	}	if (gtt_entries > 0)		printk(KERN_INFO PFX "Detected %dK %s memory.\n",		       gtt_entries / KB(1), local ? "local" : "stolen");	else		printk(KERN_INFO PFX		       "No pre-allocated video memory detected.\n");	gtt_entries /= KB(4);	intel_i830_private.gtt_entries = gtt_entries;}/* The intel i830 automatically initializes the agp aperture during POST. * Use the memory already set aside for in the GTT. */static int intel_i830_create_gatt_table(void){	int page_order;	struct aper_size_info_fixed *size;	int num_entries;	u32 temp;	size = agp_bridge->current_size;	page_order = size->page_order;	num_entries = size->num_entries;	agp_bridge->gatt_table_real = NULL;	pci_read_config_dword(intel_i830_private.i830_dev,I810_MMADDR,&temp);	temp &= 0xfff80000;	intel_i830_private.registers = (volatile u8 __iomem*) ioremap(temp,128 * 4096);	if (!intel_i830_private.registers)		return (-ENOMEM);	temp = INREG32(intel_i830_private.registers,I810_PGETBL_CTL) & 0xfffff000;	global_cache_flush();	/* we have to call this as early as possible after the MMIO base address is known */	intel_i830_init_gtt_entries();	agp_bridge->gatt_table = NULL;	agp_bridge->gatt_bus_addr = temp;	return(0);}/* Return the gatt table to a sane state. Use the top of stolen * memory for the GTT. */static int intel_i830_free_gatt_table(void){	return(0);}static int intel_i830_fetch_size(void){	u16 gmch_ctrl;	struct aper_size_info_fixed *values;	values = A_SIZE_FIX(agp_bridge->driver->aperture_sizes);	if (agp_bridge->dev->device != PCI_DEVICE_ID_INTEL_82830_HB &&	    agp_bridge->dev->device != PCI_DEVICE_ID_INTEL_82845G_HB) {		/* 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);	}	pci_read_config_word(agp_bridge->dev,I830_GMCH_CTRL,&gmch_ctrl);	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);	} else {		agp_bridge->previous_size = agp_bridge->current_size = (void *) values;		agp_bridge->aperture_size_idx = 1;		return(values[1].size);	}	return(0);}static int intel_i830_configure(void){	struct aper_size_info_fixed *current_size;	u32 temp;	u16 gmch_ctrl;	int i;	current_size = A_SIZE_FIX(agp_bridge->current_size);	pci_read_config_dword(intel_i830_private.i830_dev,I810_GMADDR,&temp);	agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK);	pci_read_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);	return (0);}static void intel_i830_cleanup(void){	iounmap((void __iomem *) intel_i830_private.registers);}static int intel_i830_insert_entries(struct agp_memory *mem,off_t pg_start,				int type){	int i,j,num_entries;	void *temp;	temp = agp_bridge->current_size;	num_entries = A_SIZE_FIX(temp)->num_entries;	if (pg_start < intel_i830_private.gtt_entries) {		printk (KERN_DEBUG PFX "pg_start == 0x%.8lx,intel_i830_private.gtt_entries == 0x%.8x\n",				pg_start,intel_i830_private.gtt_entries);		printk (KERN_INFO PFX "Trying to insert into local/stolen memory\n");		return (-EINVAL);	}	if ((pg_start + mem->page_count) > num_entries)		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.	 */	if ((type != 0 && type != AGP_PHYS_MEMORY) ||		(mem->type != 0 && mem->type != AGP_PHYS_MEMORY))		return (-EINVAL);	global_cache_flush();	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));	global_cache_flush();	agp_bridge->driver->tlb_flush(mem);	return(0);}static int intel_i830_remove_entries(struct agp_memory *mem,off_t pg_start,				int type){	int i;	global_cache_flush();	if (pg_start < intel_i830_private.gtt_entries) {		printk (KERN_INFO PFX "Trying to disable local/stolen memory\n");		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);	global_cache_flush();	agp_bridge->driver->tlb_flush(mem);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一卡二卡| 天天综合日日夜夜精品| 国产原创一区二区| 26uuu久久天堂性欧美| 国内精品伊人久久久久av一坑| 精品国产免费久久| 国产精品77777竹菊影视小说| 欧美极品aⅴ影院| 91女厕偷拍女厕偷拍高清| 一区二区三区中文字幕在线观看| 欧洲日韩一区二区三区| 日韩av一区二区三区| 日韩三级在线免费观看| 国产在线精品国自产拍免费| 国产欧美精品在线观看| 色综合久久88色综合天天| 婷婷亚洲久悠悠色悠在线播放| 日韩午夜中文字幕| 成人免费av资源| 亚洲福利国产精品| 欧美xingq一区二区| 不卡一区二区中文字幕| 午夜伊人狠狠久久| 亚洲精品一区二区精华| 色综合久久88色综合天天免费| 日韩高清在线观看| 国产精品久久久久永久免费观看 | 在线观看av一区二区| 日本午夜精品一区二区三区电影| 久久久影视传媒| 在线亚洲一区二区| 国产乱妇无码大片在线观看| 亚洲精品v日韩精品| 精品国产一区二区三区四区四| 99国产精品国产精品毛片| 日韩成人一级片| 中文字幕一区免费在线观看| 91精品免费观看| 99国产精品国产精品久久| 久久99蜜桃精品| 亚洲一区二区精品3399| 久久美女高清视频 | 制服丝袜国产精品| 成人午夜电影网站| 久久福利视频一区二区| 亚洲美女精品一区| 中文字幕免费不卡| 欧美va亚洲va| 欧美喷水一区二区| 99亚偷拍自图区亚洲| 国产综合色在线视频区| 日本中文字幕一区二区视频| 亚洲男同1069视频| 国产欧美视频一区二区三区| 欧美一级视频精品观看| 在线国产电影不卡| av在线这里只有精品| 国产在线视视频有精品| 日本成人超碰在线观看| 亚洲一二三四在线| 亚洲激情校园春色| 中文字幕一区三区| 欧美国产日韩a欧美在线观看| 精品福利一二区| 91精品国产aⅴ一区二区| 在线一区二区三区四区| www.欧美精品一二区| 国产成人自拍在线| 国内不卡的二区三区中文字幕| 六月丁香婷婷色狠狠久久| 水野朝阳av一区二区三区| 亚洲一区二区在线播放相泽| 亚洲欧美日韩小说| 亚洲另类春色校园小说| 亚洲日本电影在线| 亚洲精品视频免费观看| 亚洲视频在线一区二区| 亚洲精品视频在线| 亚洲成人综合网站| 亚洲国产精品麻豆| 午夜激情一区二区| 美女网站一区二区| 久久成人羞羞网站| 国产一区二区久久| 国产不卡视频在线观看| 大胆欧美人体老妇| 99久久婷婷国产| 日本久久精品电影| 欧美疯狂性受xxxxx喷水图片| 欧美日韩成人激情| 精品国产一区a| 久久久久久久网| 中文字幕一区在线观看视频| 亚洲激情图片一区| 无码av免费一区二区三区试看 | 激情都市一区二区| 国产精品18久久久久久vr| 国产69精品久久久久毛片| 99免费精品视频| 欧美日韩在线三级| 欧美大片国产精品| 国产女主播一区| 一区二区欧美在线观看| 日本中文字幕一区二区视频| 国产精品性做久久久久久| 色综合天天天天做夜夜夜夜做| 欧美午夜片在线观看| 欧美不卡一二三| 国产精品麻豆欧美日韩ww| 一区二区三区四区精品在线视频 | 欧美大片拔萝卜| 欧美经典一区二区| 午夜精品福利在线| 国产成人精品亚洲777人妖| 在线免费观看日本一区| 欧美变态口味重另类| 亚洲色图20p| 麻豆免费精品视频| 99re66热这里只有精品3直播 | 日本道精品一区二区三区| 在线成人免费视频| 国产精品嫩草影院com| 午夜av区久久| www.在线成人| 欧美电影精品一区二区| 亚洲黄色免费网站| 国产自产2019最新不卡| 日本高清不卡在线观看| 2021久久国产精品不只是精品| 亚洲精品日韩一| 国产成人综合网站| 欧美一区二区成人6969| 亚洲视频在线一区观看| 国产在线视频一区二区三区| 欧美性高清videossexo| 国产三区在线成人av| 日本午夜一区二区| 日本精品视频一区二区| 国产女人18水真多18精品一级做| 午夜欧美视频在线观看| 色综合久久久久久久| 国产午夜精品福利| 久久97超碰国产精品超碰| 欧美色老头old∨ideo| 国产精品久久影院| 国产成人精品影视| 26uuu国产日韩综合| 日本伊人色综合网| 欧美亚洲国产怡红院影院| 国产精品理伦片| 国产大陆精品国产| xfplay精品久久| 秋霞午夜鲁丝一区二区老狼| 日本电影亚洲天堂一区| 亚洲男同1069视频| 99久久精品情趣| 国产精品灌醉下药二区| 高清不卡一区二区| 久久久久97国产精华液好用吗| 免费日本视频一区| 欧美肥妇bbw| 日韩专区一卡二卡| 91精品国产综合久久婷婷香蕉| 亚洲国产日韩一级| 欧美日韩精品免费| 午夜久久久久久久久| 欧美日韩专区在线| 午夜精品久久久久久久99樱桃| 欧美日韩一区国产| 天堂久久久久va久久久久| 在线电影欧美成精品| 日本中文一区二区三区| 日韩久久久精品| 黄色日韩网站视频| 日本一二三不卡| 成a人片国产精品| 亚洲欧美日韩精品久久久久| 色综合天天综合狠狠| 亚洲福利视频三区| 欧美一区二区在线观看| 免费在线看一区| 久久久精品2019中文字幕之3| 成人午夜精品在线| 亚洲精品免费电影| 91.成人天堂一区| 九色综合狠狠综合久久| 国产肉丝袜一区二区| 9l国产精品久久久久麻豆| 亚洲线精品一区二区三区 | 色噜噜狠狠成人网p站| 亚洲综合在线视频| 欧美精品1区2区| 国产精品99久久久久| 国产精品电影一区二区| 欧美日韩国产三级| 国产在线精品一区二区不卡了 | 韩国毛片一区二区三区| 国产精品久久久久影视| 欧美亚洲国产一区二区三区va| 蜜臂av日日欢夜夜爽一区|