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

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

?? cp_setup.c

?? ati driver
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*	Copyright (c) 2002, Thomas Kurschel		Part of Radeon accelerant			CP initialization/sync/cleanup.		It also handles command buffer synchronization.	non-local memory is used as following:	- 2048 dwords for ring buffer	- 253 indirect buffers a 4k (1024 dwords)	- 8 dwords for returned data (i.e. current read ptr)	  & 6 dwords for "scratch registers"	usage of scratch registers:	- reg 0 = reached engine.count	with a granularity of 4 KByte, we need 2+253+1=256 blocks, which is exactly 1 MB*/#include "radeon_driver.h"#include "CPMicroCode.h"#include "../shared/mmio.h"#include "../regs/cp_regs.h"#include "../regs/pll_regs.h"#include "../regs/rbbm_regs.h"#include "../regs/buscntrl_regs.h"#include "../common/utils.h"#include "../shared/pll_access.h"#include "log_coll.h"#include "shared/log_enum.h"#include <string.h>#if 0// macros for user-space#define ALLOC_MEM( asize, mem_type, aglobal, handle, offset ) \	{ \		radeon_alloc_mem am; \\		am.magic = RADEON_PRIVATE_DATA_MAGIC; \		am.size = (asize) * 4; \		am.memory_type = (mt_nonlocal); \		am.global = (aglobal); \\		res = ioctl( ai->fd, RADEON_ALLOC_MEM, &am ); \		if( res == B_OK ) \			*(handle) = am.handle; \			*(offset) = am.offset; \	}#define MEM2CPU( mem ) \	((uint32 *)(ai->mapped_memory[(mem).memory_type].data + (mem).offset))#define MEM2GC( mem ) ((mem).offset + si->memory[(mem).memory_type].virtual_addr_start)#define FREE_MEM( mem_type, handle ) \	{ \		radeon_free_mem fm; \\		fm.magic = RADEON_PRIVATE_DATA_MAGIC; \		fm.memory_type = mem_type; \		fm.handle = offset; \\		ioctl( ai->fd, RADEON_FREE_MEM, &fm ); \	}	#else// macros for kernel-space// allocate memory// if memory_type is non-local, it is replaced with default non-local type#define ALLOC_MEM( asize, mem_type, aglobal, handle, offset ) \	if( mem_type == mt_nonlocal ) \		mem_type = di->si->nonlocal_type; \	res = mem_alloc( di->memmgr[mem_type], asize, NULL, handle, offset );// get address as seen by program to access allocated memory// (memory_type must _not_ be non-local, see ALLOC_MEM)#define MEM2CPU( memory_type, offset ) \	((uint8 *)(memory_type == mt_local ? di->si->local_mem : \	(memory_type == mt_PCI ? di->pci_gart.buffer.ptr : di->agp_gart.buffer.ptr)) \	+ (offset))// get graphics card's virtual address of allocated memory// (memory_type must _not_ be non-local, see ALLOC_MEM)#define MEM2GC( memory_type, offset ) \	(di->si->memory[(memory_type)].virtual_addr_start + (offset))// free memory// if memory_type is non-local, it is replaced with default non-local type#define FREE_MEM( mem_type, handle ) \	mem_free( \		di->memmgr[ mem_type == mt_nonlocal ? di->si->nonlocal_type : mem_type], \		handle, NULL );	#endifvoid Radeon_DiscardAllIndirectBuffers( device_info *di );#define RADEON_SCRATCH_REG_OFFSET	32void Radeon_FlushPixelCache( device_info *di );// wait until engine is idle;// acquire_lock - 	true, if lock must be hold//					false, if lock is already acquired// keep_lock -		true, keep lock on exit (only valid if acquire_lock is true)void Radeon_WaitForIdle( device_info *di, bool acquire_lock, bool keep_lock ){	if( acquire_lock )		ACQUIRE_BEN( di->si->cp.lock );		Radeon_WaitForFifo( di, 64 );		while( 1 ) {		bigtime_t start_time = system_time();			do {			if( (INREG( di->regs, RADEON_RBBM_STATUS ) & RADEON_RBBM_ACTIVE) == 0 ) {				Radeon_FlushPixelCache( di );								if( acquire_lock && !keep_lock)					RELEASE_BEN( di->si->cp.lock );									return;			}						snooze( 1 );		} while( system_time() - start_time < 1000000 );				SHOW_ERROR( 3, "Engine didn't become idle (rbbm_status=%lx, cp_stat=%lx, tlb_address=%lx, tlb_data=%lx)",			INREG( di->regs, RADEON_RBBM_STATUS ),			INREG( di->regs, RADEON_CP_STAT ),			INREG( di->regs, RADEON_AIC_TLB_ADDR ),			INREG( di->regs, RADEON_AIC_TLB_DATA ));				LOG( di->si->log, _Radeon_WaitForIdle );		Radeon_ResetEngine( di );	}}// wait until "entries" FIFO entries are empty// lock must be holdvoid Radeon_WaitForFifo( device_info *di, int entries ){	while( 1 ) {		bigtime_t start_time = system_time();			do {			int slots = INREG( di->regs, RADEON_RBBM_STATUS ) & RADEON_RBBM_FIFOCNT_MASK;						if ( slots >= entries ) 				return;			snooze( 1 );		} while( system_time() - start_time < 1000000 );				LOG( di->si->log, _Radeon_WaitForFifo );				Radeon_ResetEngine( di );	}}// flush pixel cache of graphics cardvoid Radeon_FlushPixelCache( device_info *di ){	bigtime_t start_time;		OUTREGP( di->regs, RADEON_RB2D_DSTCACHE_CTLSTAT, RADEON_RB2D_DC_FLUSH_ALL,		~RADEON_RB2D_DC_FLUSH_ALL );	start_time = system_time();		do {		if( (INREG( di->regs, RADEON_RB2D_DSTCACHE_CTLSTAT ) 			 & RADEON_RB2D_DC_BUSY) == 0 ) 			return;		snooze( 1 );	} while( system_time() - start_time < 1000000 );		LOG( di->si->log, _Radeon_FlushPixelCache );	SHOW_ERROR0( 0, "pixel cache didn't become empty" );}// reset graphics card's engine// lock must be holdvoid Radeon_ResetEngine( device_info *di ){	vuint8 *regs = di->regs;	shared_info *si = di->si;	uint32 clock_cntl_index, mclk_cntl, rbbm_soft_reset, host_path_cntl;	uint32 cur_read_ptr;		SHOW_FLOW0( 3, "" );	Radeon_FlushPixelCache( di );	clock_cntl_index = INREG( regs, RADEON_CLOCK_CNTL_INDEX );	R300_PLLFix( di->regs, di->asic );		// OUCH!	// XFree disables any kind of automatic power power management 	// because of bugs of some ASIC revision (seems like the revisions	// cannot be read out)	// -> this is a very bad idea, especially when it comes to laptops	// I comment it out for now, let's hope noone takes notice    if( di->num_crtc > 1 ) {		Radeon_OUTPLLP( regs, di->asic, RADEON_SCLK_CNTL, 			RADEON_CP_MAX_DYN_STOP_LAT |			RADEON_SCLK_FORCEON_MASK,			~RADEON_DYN_STOP_LAT_MASK );	/*		if( ai->si->asic == rt_rv200 ) {		    Radeon_OUTPLLP( ai, RADEON_SCLK_MORE_CNTL, 		    	RADEON_SCLK_MORE_FORCEON, ~0 );		}*/    }	mclk_cntl = Radeon_INPLL( regs, di->asic, RADEON_MCLK_CNTL );	// enable clock of units to be reset	Radeon_OUTPLL( regs, di->asic, RADEON_MCLK_CNTL, mclk_cntl |      RADEON_FORCEON_MCLKA |      RADEON_FORCEON_MCLKB |      RADEON_FORCEON_YCLKA |      RADEON_FORCEON_YCLKB |      RADEON_FORCEON_MC |      RADEON_FORCEON_AIC );	// do the reset    host_path_cntl = INREG( regs, RADEON_HOST_PATH_CNTL );	rbbm_soft_reset = INREG( regs, RADEON_RBBM_SOFT_RESET );	switch( di->asic ) {	case rt_r300:		OUTREG( regs, RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset |			RADEON_SOFT_RESET_CP |			RADEON_SOFT_RESET_HI |			RADEON_SOFT_RESET_E2 |			RADEON_SOFT_RESET_AIC ));		INREG( regs, RADEON_RBBM_SOFT_RESET);		OUTREG( regs, RADEON_RBBM_SOFT_RESET, 0);		// this bit has no description		OUTREGP( regs, RADEON_RB2D_DSTCACHE_MODE, (1 << 17), ~0 );		break;	default:		OUTREG( regs, RADEON_RBBM_SOFT_RESET, rbbm_soft_reset |			RADEON_SOFT_RESET_CP |			RADEON_SOFT_RESET_HI |			RADEON_SOFT_RESET_SE |			RADEON_SOFT_RESET_RE |			RADEON_SOFT_RESET_PP |			RADEON_SOFT_RESET_E2 |			RADEON_SOFT_RESET_RB |			RADEON_SOFT_RESET_AIC );		INREG( regs, RADEON_RBBM_SOFT_RESET );		OUTREG( regs, RADEON_RBBM_SOFT_RESET, rbbm_soft_reset &			~( RADEON_SOFT_RESET_CP |			RADEON_SOFT_RESET_HI |			RADEON_SOFT_RESET_SE |			RADEON_SOFT_RESET_RE |			RADEON_SOFT_RESET_PP |			RADEON_SOFT_RESET_E2 |			RADEON_SOFT_RESET_RB |			RADEON_SOFT_RESET_AIC ) );		INREG( regs, RADEON_RBBM_SOFT_RESET );	}    OUTREG( regs, RADEON_HOST_PATH_CNTL, host_path_cntl | RADEON_HDP_SOFT_RESET );    INREG( regs, RADEON_HOST_PATH_CNTL );    OUTREG( regs, RADEON_HOST_PATH_CNTL, host_path_cntl );	// restore regs	OUTREG( regs, RADEON_RBBM_SOFT_RESET, rbbm_soft_reset);	OUTREG( regs, RADEON_CLOCK_CNTL_INDEX, clock_cntl_index );	R300_PLLFix( regs, di->asic );	Radeon_OUTPLL( regs, di->asic, RADEON_MCLK_CNTL, mclk_cntl );		// reset ring buffer	cur_read_ptr = INREG( regs, RADEON_CP_RB_RPTR );	OUTREG( regs, RADEON_CP_RB_WPTR, cur_read_ptr );		//if( si->cp.ring.head ) {	// during init, there are no feedback data	if( si->cp.feedback.mem_handle != 0 ) {		*(uint32 *)MEM2CPU( si->cp.feedback.mem_type, si->cp.feedback.head_mem_offset) = 			cur_read_ptr;		//	*si->cp.ring.head = cur_read_ptr;		si->cp.ring.tail = cur_read_ptr;	}	++si->engine.count;		// mark all buffers as being finished	Radeon_DiscardAllIndirectBuffers( di );	return;}// upload Micro-Code of CPstatic void loadMicroEngineRAMData( device_info *di ){	int i;	const uint32 (*microcode)[2];		SHOW_FLOW0( 3, "" );		switch( di->asic ) {	case rt_r300:	case rt_r300_4p:	case rt_rv350:	case rt_rv360:	case rt_r350:	case rt_r360:		microcode = r300_cp_microcode;		break;	case rt_r200:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品播放一区二区| 亚洲免费电影在线| 亚洲少妇最新在线视频| 奇米综合一区二区三区精品视频| 狠狠色丁香婷综合久久| 欧美日韩一区视频| 国产精品麻豆网站| 国内精品久久久久影院一蜜桃| 91成人网在线| 国产精品久久久久久久午夜片| 麻豆精品在线播放| 欧美精品一卡二卡| 一区二区理论电影在线观看| 丁香啪啪综合成人亚洲小说| 精品久久久久久久久久久久包黑料| 亚洲一区二区三区四区五区中文| 9色porny自拍视频一区二区| 久久久久久9999| 国产麻豆精品视频| 精品久久免费看| 久久精品99久久久| 7777女厕盗摄久久久| 五月婷婷另类国产| 欧美日韩国产一区二区三区地区| 亚洲欧洲综合另类| 91蜜桃免费观看视频| 亚洲视频一区二区在线| 成人av电影免费观看| 日本一区二区三区在线观看| 国产一区在线视频| 久久嫩草精品久久久精品一| 精品一二三四区| 久久色中文字幕| 国产福利一区在线观看| 国产欧美日韩卡一| k8久久久一区二区三区 | 韩国一区二区三区| 精品久久久久久久久久久院品网| 日本中文字幕一区| 久久综合九色欧美综合狠狠 | 同产精品九九九| 欧美欧美欧美欧美首页| 丝袜国产日韩另类美女| 91麻豆精品国产91久久久使用方法| 午夜欧美视频在线观看| 日韩欧美国产高清| 国内成人自拍视频| 国产精品色在线观看| 一本大道久久a久久精品综合| 亚洲国产日韩一级| 69av一区二区三区| 国产一区二区精品久久99 | 男人的天堂久久精品| 成人精品视频一区二区三区 | 欧美性猛片aaaaaaa做受| 亚洲一区二区视频| 欧美电影影音先锋| 国产综合色精品一区二区三区| 国产女人aaa级久久久级| 91视频91自| 日本成人在线一区| 国产精品网曝门| 欧美丝袜丝交足nylons图片| 精品一区二区影视| 亚洲欧美区自拍先锋| 欧美一级日韩一级| 99视频国产精品| 奇米色777欧美一区二区| 国产欧美日韩在线看| 欧美精品在线观看播放| 成人午夜私人影院| 日本中文一区二区三区| 国产精品久久久久久久岛一牛影视 | 国产成人在线视频免费播放| 夜夜嗨av一区二区三区| 精品动漫一区二区三区在线观看| 91一区二区在线| 精品一区二区三区在线观看国产| 亚洲欧美aⅴ...| 久久久五月婷婷| 91 com成人网| 91浏览器入口在线观看| 国产成人啪免费观看软件| 性久久久久久久久久久久| 国产三区在线成人av| 欧美日韩精品专区| 97精品国产97久久久久久久久久久久| 欧美aaa在线| 一区二区三区 在线观看视频| 久久午夜电影网| 日韩久久久精品| 欧美日韩成人在线一区| 色嗨嗨av一区二区三区| 99久久er热在这里只有精品15| 久久97超碰色| 免费久久精品视频| 天堂久久一区二区三区| 一区二区三区四区激情| 国产精品久久久99| 久久久精品免费免费| 精品国一区二区三区| 日韩精品一区二区在线观看| 欧美人xxxx| 欧美人与禽zozo性伦| 欧美性猛交xxxxxx富婆| 欧美在线观看视频一区二区| 99精品视频在线观看| 丁香婷婷综合激情五月色| 国产乱一区二区| 国产成人福利片| 国产成人午夜高潮毛片| 国产不卡一区视频| 丁香六月综合激情| 成a人片国产精品| 成人av资源网站| 99久久国产综合精品色伊| 波多野结衣的一区二区三区| 99re这里只有精品6| 9久草视频在线视频精品| 91免费版pro下载短视频| 欧亚洲嫩模精品一区三区| 在线不卡免费欧美| 欧美一区二区三区免费大片| 日韩欧美国产三级| 久久精品视频网| 日韩毛片精品高清免费| 亚洲一区二区在线观看视频| 午夜精品福利一区二区蜜股av | 国内精品久久久久影院一蜜桃| 精品中文字幕一区二区| 国产精品 欧美精品| av成人动漫在线观看| 欧美艳星brazzers| 日韩一区二区三免费高清| 国产午夜精品久久久久久久| 中文字幕一区在线观看视频| 亚洲一区二区在线免费观看视频| 日韩在线a电影| 国产裸体歌舞团一区二区| 北条麻妃国产九九精品视频| 91网页版在线| 欧美一区二区日韩一区二区| 久久在线观看免费| 日韩一区欧美一区| 日韩av一区二区在线影视| 国产乱码一区二区三区| 91女厕偷拍女厕偷拍高清| 欧美电影一区二区| 久久精品人人做人人爽97| 亚洲精品国产品国语在线app| 爽好多水快深点欧美视频| 成人综合在线观看| 欧美日韩国产中文| 中文字幕第一页久久| 日日夜夜精品免费视频| 丰满亚洲少妇av| 欧美一区2区视频在线观看| 国产精品天天看| 免费在线观看精品| 色狠狠色狠狠综合| 国产午夜精品久久| 人人精品人人爱| 欧美在线观看视频一区二区| 久久久久久久久岛国免费| 日日摸夜夜添夜夜添亚洲女人| 99久免费精品视频在线观看 | 亚洲欧洲成人精品av97| 男男成人高潮片免费网站| 99久久99久久精品国产片果冻 | 国产综合久久久久久鬼色| 日本韩国欧美在线| 欧美国产国产综合| 久久精品国产成人一区二区三区| 色婷婷综合久久久久中文一区二区| 欧美不卡123| 天天亚洲美女在线视频| 91蜜桃免费观看视频| 国产精品入口麻豆九色| 精品制服美女丁香| 欧美一级淫片007| 亚洲观看高清完整版在线观看| 99国产一区二区三精品乱码| 国产欧美一区二区精品忘忧草 | 香蕉久久一区二区不卡无毒影院| 福利一区在线观看| 久久久久久97三级| 久久69国产一区二区蜜臀| 日韩欧美电影一区| 无码av中文一区二区三区桃花岛| 日本丶国产丶欧美色综合| 国产精品乱码一区二区三区软件 | 亚洲激情图片小说视频| 99久久综合国产精品| 国产精品卡一卡二卡三| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产91精品在线观看| 国产日本欧美一区二区| 大桥未久av一区二区三区中文| 国产午夜精品一区二区三区四区| 国产毛片一区二区|