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

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

?? cp_setup.c

?? ati driver
?? C
?? 第 1 頁 / 共 2 頁
字號:
	//case rt_rv250:	//case rt_m9:		microcode = r200_cp_microcode;		break;	case rt_rs100:	default:		microcode = radeon_cp_microcode;	}	Radeon_WaitForIdle( di, false, false );/*		// HACK start	Radeon_ResetEngine( di );	OUTREG( di->regs, 0x30, 0x5133a3a0 );	// bus_cntl	OUTREGP( di->regs, 0xf0c, 0xff00, ~0xff );	// latency	Radeon_WaitForIdle( di, false, false );	Radeon_ResetEngine( di );	// HACK end*/	OUTREG( di->regs, RADEON_CP_ME_RAM_ADDR, 0 );		for ( i = 0 ; i < 256 ; i++ ) {		OUTREG( di->regs, RADEON_CP_ME_RAM_DATAH, microcode[i][1] );		OUTREG( di->regs, RADEON_CP_ME_RAM_DATAL, microcode[i][0] );	}}// aring_size - size of ring in dwordsstatic status_t initRingBuffer( device_info *di, int aring_size ){	status_t res;	shared_info *si = di->si;	CP_info *cp = &si->cp;	vuint8 *regs = di->regs;	int32 offset;	memory_type_e memory_type;	memset( &cp->ring, 0, sizeof( cp->ring ));	// ring and indirect buffers can be either in AGP or PCI GART	// (it seems that they cannot be in graphics memory, at least	//  I had serious coherency problems when I tried that)	memory_type = mt_nonlocal;		ALLOC_MEM( aring_size * 4, memory_type, true, 		&cp->ring.mem_handle, &offset );	if( res != B_OK ) {		SHOW_ERROR0( 0, "Cannot allocate ring buffer" );		return res;	}		// setup CP buffer	cp->ring.mem_type = memory_type;	cp->ring.mem_offset = offset;	cp->ring.vm_base = MEM2GC( memory_type, offset );	cp->ring.size = aring_size;	cp->ring.tail_mask = aring_size - 1;	OUTREG( regs, RADEON_CP_RB_BASE, cp->ring.vm_base );	SHOW_INFO( 3, "CP buffer address=%lx", cp->ring.vm_base );	// set ring buffer size	// (it's log2 of qwords)	OUTREG( regs, RADEON_CP_RB_CNTL, log2( cp->ring.size / 2 ));	SHOW_INFO( 3, "CP buffer size mask=%d", log2( cp->ring.size / 2 ) );	// set write pointer delay to zero;	// we assume that memory synchronization is done correctly my MoBo	// and Radeon_SendCP contains a hack that hopefully fixes such problems	OUTREG( regs, RADEON_CP_RB_WPTR_DELAY, 0 );		memset( MEM2CPU( cp->ring.mem_type, cp->ring.mem_offset), 0, cp->ring.size * 4 );	// set CP buffer pointers	OUTREG( regs, RADEON_CP_RB_RPTR, 0 );	OUTREG( regs, RADEON_CP_RB_WPTR, 0 );	//*cp->ring.head = 0;	cp->ring.tail = 0;}static void uninitRingBuffer( device_info *di ){	vuint8 *regs = di->regs;		// abort any activity	Radeon_ResetEngine( di );		// disable CP BM	OUTREG( regs, RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS );		// read-back for flushing	INREG( regs, RADEON_CP_CSQ_CNTL );		FREE_MEM( mt_nonlocal, di->si->cp.ring.mem_handle );}static status_t initCPFeedback( device_info *di ){	CP_info *cp = &di->si->cp;	vuint8 *regs = di->regs;	int32 offset;	memory_type_e memory_type;	status_t res;	// status information should be in PCI memory, so CPU can	// poll it without locking the bus (PCI memory is the only	// cachable memory available)	memory_type = mt_PCI;		ALLOC_MEM( RADEON_SCRATCH_REG_OFFSET + 0x40, memory_type, true, 		&cp->feedback.mem_handle, &offset );	if( res != B_OK ) {		SHOW_ERROR0( 0, "Cannot allocate buffers for status information" );		return res;	}		// setup CP read pointer buffer	cp->feedback.mem_type = memory_type;	cp->feedback.head_mem_offset = offset;	cp->feedback.head_vm_address = MEM2GC( memory_type, cp->feedback.head_mem_offset );	OUTREG( regs, RADEON_CP_RB_RPTR_ADDR, cp->feedback.head_vm_address );	SHOW_INFO( 3, "CP read pointer buffer==%lx", cp->feedback.head_vm_address );	// setup scratch register buffer	cp->feedback.scratch_mem_offset = offset + RADEON_SCRATCH_REG_OFFSET;	cp->feedback.scratch_vm_start = MEM2GC( memory_type, cp->feedback.scratch_mem_offset );	OUTREG( regs, RADEON_SCRATCH_ADDR, cp->feedback.scratch_vm_start );	OUTREG( regs, RADEON_SCRATCH_UMSK, 0x3f );		*(uint32 *)MEM2CPU( cp->feedback.mem_type, cp->feedback.head_mem_offset) = 0;	memset( MEM2CPU( cp->feedback.mem_type, cp->feedback.scratch_mem_offset), 0, 0x40 );	//*cp->ring.head = 0;}static void uninitCPFeedback( device_info *di ){	vuint8 *regs = di->regs;		// don't allow any scratch buffer update	OUTREG( regs, RADEON_SCRATCH_UMSK, 0x0 );		FREE_MEM( mt_PCI, di->si->cp.feedback.mem_handle );}static status_t initIndirectBuffers( device_info *di ){	CP_info *cp = &di->si->cp;	int32 offset;	memory_type_e memory_type;	int i;	status_t res;		memory_type = mt_nonlocal;		ALLOC_MEM( NUM_INDIRECT_BUFFERS * INDIRECT_BUFFER_SIZE * 4, memory_type, 		true, &cp->buffers.mem_handle, &offset );	if( res != B_OK ) {		SHOW_ERROR0( 0, "Cannot allocate indirect buffers" );		return B_ERROR;	}	cp->buffers.mem_type = memory_type;	cp->buffers.mem_offset = offset;	cp->buffers.vm_start = MEM2GC( memory_type, cp->buffers.mem_offset );		for( i = 0; i < NUM_INDIRECT_BUFFERS - 1; ++i ) {		cp->buffers.buffers[i].next = i + 1;	}		cp->buffers.buffers[i].next = -1;		cp->buffers.free_list = 0;	cp->buffers.oldest = -1;	cp->buffers.newest = -1;	cp->buffers.active_state = -1;	cp->buffers.cur_tag = 0;		memset( MEM2CPU( cp->buffers.mem_type, cp->buffers.mem_offset), 0, 		NUM_INDIRECT_BUFFERS * INDIRECT_BUFFER_SIZE * 4 );		return B_OK;}static void uninitIndirectBuffers( device_info *di ){	FREE_MEM( mt_nonlocal, di->si->cp.buffers.mem_handle );}// initialize CP so it's ready for BMstatus_t Radeon_InitCP( device_info *di ){		thread_id thid;    thread_info thinfo;	status_t res;		SHOW_FLOW0( 3, "" );		// this is _really_ necessary so functions like ResetEngine() know	// that the CP is not set up yet	memset( &di->si->cp, 0, sizeof( di->si->cp ));		if( (res = INIT_BEN( di->si->cp.lock, "Radeon CP" )) < 0 )		return res;		// HACK: change owner of benaphore semaphore to team of calling thread;	// reason: user code cannot acquire kernel semaphores, but the accelerant	// is in user space; interestingly, it's enough to change the semaphore's	// owner to _any_ non-system team (that's the only security check done by	// the kernel)	thid = find_thread( NULL );    get_thread_info( thid, &thinfo );    set_sem_owner( di->si->cp.lock.sem, thinfo.team );		// init raw CP	loadMicroEngineRAMData( di );	// do soft-reset	Radeon_ResetEngine( di );		// after warm-reset, the CP may still be active and thus react to	// register writes during initialization unpredictably, so we better	// stop it first	OUTREG( di->regs, RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS );	INREG( di->regs, RADEON_CP_CSQ_CNTL );	// reset CP to make disabling active	Radeon_ResetEngine( di );	res = initRingBuffer( di, CP_RING_SIZE );	if( res < 0 )		goto err4;		res = initCPFeedback( di );	if( res < 0 )		goto err3;			res = initIndirectBuffers( di );	if( res < 0 )		goto err2;			// tell CP to use BM	Radeon_WaitForIdle( di, false, false );		// enable direct and indirect CP bus mastering	OUTREG( di->regs, RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM );		// allow bus mastering in general	OUTREGP( di->regs, RADEON_BUS_CNTL, 0, ~RADEON_BUS_MASTER_DIS );	// don't allow mixing of 2D/3D/scratch/wait_until commands	// (in fact, this doesn't seem to make any difference as we do a	// manual sync in all these cases anyway)	OUTREG( di->regs, RADEON_ISYNC_CNTL,		RADEON_ISYNC_ANY2D_IDLE3D |		RADEON_ISYNC_ANY3D_IDLE2D |		RADEON_ISYNC_WAIT_IDLEGUI |		RADEON_ISYNC_CPSCRATCH_IDLEGUI );		 	SHOW_FLOW( 3, "bus_cntl=%lx", INREG( di->regs, RADEON_BUS_CNTL ));	SHOW_FLOW0( 3, "Done" );			return B_OK;	//err://	uninitIndirectBuffers( ai );	err2:	uninitCPFeedback( di );err3:	uninitRingBuffer( di );err4:	DELETE_BEN( di->si->cp.lock );	return res;}// shutdown CP, freeing any memoryvoid Radeon_UninitCP( device_info *di ){	vuint8 *regs = di->regs;	// abort any pending commands	Radeon_ResetEngine( di );		// disable CP BM	OUTREG( regs, RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS );		// read-back for flushing	INREG( regs, RADEON_CP_CSQ_CNTL );	uninitRingBuffer( di );	uninitCPFeedback( di );	uninitIndirectBuffers( di );		DELETE_BEN( di->si->cp.lock );}// mark all indirect buffers as being free;// this should only be called after a reset;// lock must be holdvoid Radeon_DiscardAllIndirectBuffers( device_info *di ){	CP_info *cp = &di->si->cp;		// during init, there is no indirect buffer	if( cp->buffers.mem_handle == 0 )		return;		// mark all sent indirect buffers as free	while( cp->buffers.oldest != -1 ) {		indirect_buffer *oldest_buffer = 			&cp->buffers.buffers[cp->buffers.oldest];		int tmp_oldest_buffer;					SHOW_FLOW( 0, "%d", cp->buffers.oldest );				// remove buffer from "used" list		tmp_oldest_buffer = oldest_buffer->next;					if( tmp_oldest_buffer == -1 )			cp->buffers.newest = -1;					// put it on free list		oldest_buffer->next = cp->buffers.free_list;		cp->buffers.free_list = cp->buffers.oldest;				cp->buffers.oldest = tmp_oldest_buffer;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产不卡| 一区二区三区中文字幕| 亚洲欧美影音先锋| 午夜日韩在线电影| 91免费精品国自产拍在线不卡| 欧美伦理电影网| 国产精品免费视频网站| 美脚の诱脚舐め脚责91| 在线观看网站黄不卡| 中日韩免费视频中文字幕| 免费成人美女在线观看| 欧美三级资源在线| 自拍偷拍亚洲综合| 成人一区二区视频| 2019国产精品| 精品一区二区三区香蕉蜜桃| 欧美日韩综合一区| 亚洲激情在线激情| 91伊人久久大香线蕉| 国产精品美女久久久久aⅴ| 国内精品国产成人| 337p粉嫩大胆色噜噜噜噜亚洲| 水野朝阳av一区二区三区| 色综合激情久久| 亚洲免费在线看| 97se亚洲国产综合自在线不卡| 中文字幕av一区二区三区高 | 欧美日韩成人综合| 一区二区在线看| 99久久精品免费看国产免费软件| 久久精品一区二区三区四区| 精品一区二区影视| 精品福利在线导航| 国产麻豆日韩欧美久久| 亚洲精品一线二线三线无人区| 麻豆国产精品官网| 久久综合九色综合欧美98 | 午夜视频久久久久久| 欧美日韩国产一区二区三区地区| 亚洲自拍偷拍综合| 欧美日韩精品一二三区| 午夜精品爽啪视频| 日韩免费看的电影| 国产伦精品一区二区三区在线观看| 久久久久久9999| 懂色中文一区二区在线播放| 亚洲男人的天堂在线观看| 欧美视频一二三区| 毛片av中文字幕一区二区| 精品伦理精品一区| av动漫一区二区| 亚洲国产日产av| 日韩精品一区二区三区swag| 国产精品综合在线视频| 亚洲欧美自拍偷拍色图| 欧美日韩一区国产| 久久99精品久久只有精品| 中文字幕欧美激情一区| 一本一道综合狠狠老| 日韩中文字幕一区二区三区| 欧美电影免费提供在线观看| 成人性视频网站| 亚洲午夜在线观看视频在线| 欧美大白屁股肥臀xxxxxx| 国产精品18久久久| 亚洲成人免费影院| 国产婷婷色一区二区三区| 在线国产电影不卡| 国产精品1区2区| 亚洲成人动漫一区| 国产欧美一区二区在线| 在线观看日韩国产| 国产一区二区视频在线播放| 亚洲欧美韩国综合色| 日韩一区二区三区精品视频| 成人国产亚洲欧美成人综合网 | 中文字幕一区二区三区视频 | 99这里只有久久精品视频| 丝袜国产日韩另类美女| 日本一区二区三区免费乱视频 | 久久电影国产免费久久电影| 亚洲精品视频在线看| 精品日产卡一卡二卡麻豆| 色中色一区二区| 粉嫩aⅴ一区二区三区四区| 日韩成人免费电影| 亚洲精品欧美在线| 国产亚洲精品bt天堂精选| 欧美人xxxx| 一本色道a无线码一区v| 国产精品一二三四五| 美女性感视频久久| 亚洲专区一二三| 亚洲欧美怡红院| 国产日韩v精品一区二区| 欧美一区二区在线免费观看| 欧洲视频一区二区| 99精品1区2区| 成人网页在线观看| 国产在线不卡一区| 久久99精品国产.久久久久久| 亚洲国产日韩精品| 亚洲一卡二卡三卡四卡| 亚洲女人****多毛耸耸8| 国产欧美日韩视频一区二区| 精品乱人伦一区二区三区| 3d成人h动漫网站入口| 欧美色偷偷大香| 欧美天堂亚洲电影院在线播放| 91蜜桃在线免费视频| 成人精品一区二区三区四区| 国产99精品在线观看| 国产黄色精品网站| 国产成人午夜精品5599 | 中文字幕成人网| 国产欧美日韩综合精品一区二区 | 国产精品一区2区| 国产精品66部| 成人一区二区视频| 91社区在线播放| 欧美亚洲高清一区| 欧美肥妇free| 欧美电影免费观看高清完整版在线 | 国产成人在线电影| 成人美女视频在线观看| av高清久久久| 欧美亚洲高清一区| 欧美一级二级三级乱码| 精品国产成人系列| 中文欧美字幕免费| 亚洲一区二区三区在线播放| 五月天一区二区三区| 免费成人美女在线观看.| 国产精品一二二区| 99国产精品久久| 欧美日本一区二区三区四区| 欧美成人aa大片| 欧美国产日韩在线观看| 亚洲猫色日本管| 日本va欧美va瓶| 国产成人免费在线视频| 日本高清不卡一区| 91精品在线免费| 欧美激情一区二区三区蜜桃视频 | 亚洲国产成人私人影院tom| 一区二区三区成人在线视频| 日韩av一区二区在线影视| 国产精品123| 欧美日韩中字一区| 国产女人18毛片水真多成人如厕 | 精品免费国产一区二区三区四区| 久久久久99精品国产片| 有码一区二区三区| 麻豆精品一区二区| 91在线观看免费视频| 日韩欧美一级特黄在线播放| 亚洲免费观看高清| 精品一区二区三区久久久| 色偷偷一区二区三区| 日韩欧美一级在线播放| 一区二区三区加勒比av| 国产真实乱对白精彩久久| 欧美日韩一卡二卡三卡| 国产欧美一区二区三区在线看蜜臀 | 欧美日韩国产高清一区二区| 国产色产综合色产在线视频| 天堂精品中文字幕在线| av资源站一区| 久久麻豆一区二区| 日韩精品五月天| 色婷婷精品久久二区二区蜜臂av| 精品奇米国产一区二区三区| 一区二区高清视频在线观看| 懂色中文一区二区在线播放| 欧美一区二区在线免费播放| 亚洲男人天堂av网| av高清不卡在线| 欧美国产国产综合| 国精产品一区一区三区mba桃花| 欧美精品免费视频| 亚洲一区二区中文在线| 成人免费三级在线| 国产欧美一二三区| 国产精品一区二区视频| 精品国产91洋老外米糕| 日韩在线a电影| 7777精品伊人久久久大香线蕉完整版 | 欧美亚洲综合网| 亚洲欧洲精品一区二区三区| 国产黄色成人av| 久久精品水蜜桃av综合天堂| 韩国一区二区视频| 日韩视频在线你懂得| 秋霞成人午夜伦在线观看| 欧美精品第1页| 日韩电影一二三区| 精品国产露脸精彩对白| 精品一区二区三区在线播放| 久久久亚洲精品石原莉奈| 久久99国内精品|