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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性做久久久久久久久| 欧美日韩国产另类一区| 在线看日本不卡| 欧美美女激情18p| 欧美白人最猛性xxxxx69交| 久久夜色精品国产噜噜av| 中文字幕成人在线观看| 亚洲资源中文字幕| 韩国一区二区三区| 色狠狠色狠狠综合| 欧美精品一区二区三| 综合欧美一区二区三区| 日本网站在线观看一区二区三区 | 91精彩视频在线| 91精品国产综合久久婷婷香蕉 | 国产精品一区二区在线观看不卡| 99久久精品国产网站| 欧美一区二区三区四区久久| 中文字幕欧美区| 日本午夜一本久久久综合| 成人av网址在线观看| 日韩欧美一级二级三级久久久| 国产精品欧美经典| 日韩福利电影在线| 99久久国产综合精品女不卡| 日韩写真欧美这视频| 中文字幕字幕中文在线中不卡视频| 蜜臀久久久久久久| 欧美综合一区二区| 中日韩免费视频中文字幕| 日韩精品国产精品| 91亚洲午夜精品久久久久久| 欧美电影免费观看高清完整版在| 亚洲三级在线观看| 国产成人精品免费一区二区| 在线成人av网站| 自拍偷拍欧美精品| 国产一区二区在线电影| 91精品国产入口| 亚洲美女一区二区三区| 国产精品一线二线三线| 欧美一级电影网站| 亚洲国产欧美在线人成| 99久久精品费精品国产一区二区| 久久久久久久久久久久电影| 奇米一区二区三区av| 欧美日韩国产中文| 亚洲伊人色欲综合网| 99re在线视频这里只有精品| 国产片一区二区三区| 久久99国产精品麻豆| 91精品国产一区二区人妖| 国产精品国产自产拍高清av| 久久99精品一区二区三区| 日韩一区二区视频在线观看| 日韩黄色在线观看| 精品国产乱码久久久久久夜甘婷婷| 奇米综合一区二区三区精品视频| 欧美日韩国产一区| 老汉av免费一区二区三区| 久久久久久黄色| 成人免费看的视频| 亚洲另类中文字| 69堂国产成人免费视频| 美女一区二区三区| 久久精品欧美日韩精品| 91女厕偷拍女厕偷拍高清| 亚洲欧美在线视频| 欧美三级午夜理伦三级中视频| 天天免费综合色| 成人性生交大片免费看视频在线| 久久人人爽人人爽| 男男视频亚洲欧美| 精品粉嫩超白一线天av| 成人丝袜视频网| 理论电影国产精品| 激情综合色综合久久| 91麻豆精品视频| 久久精品欧美一区二区三区麻豆| 精品一区二区三区欧美| 欧美不卡一区二区三区| 久久99九九99精品| 久久精品人人做人人爽人人| 成人午夜av在线| 日韩理论片中文av| 在线观看www91| 五月婷婷久久丁香| 日韩网站在线看片你懂的| 精东粉嫩av免费一区二区三区| www国产成人| 成人app软件下载大全免费| 中文字幕欧美一| 欧美日韩在线亚洲一区蜜芽| 日本免费新一区视频| 精品国产免费人成电影在线观看四季| 韩国av一区二区三区四区| 欧美激情一区三区| 在线观看国产一区二区| 日本午夜精品一区二区三区电影| 久久综合九色综合久久久精品综合 | 亚洲一区二区三区三| 欧美久久久影院| 国产真实乱子伦精品视频| 日本一区二区免费在线| 色成人在线视频| 久久精品国产亚洲一区二区三区 | 成人午夜视频在线观看| 亚洲人精品午夜| 在线综合视频播放| 国产一区二区三区高清播放| 国产精品久久久爽爽爽麻豆色哟哟 | 精品福利av导航| 97aⅴ精品视频一二三区| 日韩精品色哟哟| 日本一区免费视频| 欧美综合久久久| 精品在线播放免费| 亚洲免费观看在线视频| 日韩一区二区电影在线| 99国产精品久久久久久久久久| 亚洲成人tv网| 国产亚洲短视频| 欧美日韩在线电影| 国产精品911| 三级一区在线视频先锋 | a在线播放不卡| 日韩精品一二三区| 国产精品乱人伦一区二区| 这里只有精品免费| 91啪亚洲精品| 国产真实乱对白精彩久久| 亚洲二区在线观看| 国产精品久久夜| 欧美一区二区在线看| 91丨九色porny丨蝌蚪| 久久国产精品无码网站| 艳妇臀荡乳欲伦亚洲一区| 久久精品免费在线观看| 91麻豆精品国产91久久久资源速度 | 日韩欧美国产午夜精品| 在线影院国内精品| 国产精品一二三| 免费一区二区视频| 亚洲影视资源网| 自拍偷拍欧美精品| 国产日韩亚洲欧美综合| 91精品国产91综合久久蜜臀| 色综合久久综合网97色综合| 国产麻豆精品在线| 日本不卡在线视频| 一区av在线播放| 国产精品国产三级国产aⅴ无密码| 精品捆绑美女sm三区| 欧美日韩精品欧美日韩精品一 | 国产精品伦一区| 久久久亚洲精品一区二区三区| 欧美欧美午夜aⅴ在线观看| 91免费观看国产| 成人黄色国产精品网站大全在线免费观看 | 色女孩综合影院| 国产91精品一区二区| 国产一区二区三区视频在线播放| 日韩和欧美一区二区| 一区二区三区波多野结衣在线观看 | 美脚の诱脚舐め脚责91 | 欧美精品丝袜中出| 91精品福利在线| 91福利视频网站| 色综合欧美在线| 91网址在线看| 91蜜桃免费观看视频| 成人av在线观| 成+人+亚洲+综合天堂| 国产成人免费视频网站| 国产一区在线看| 国产在线精品一区在线观看麻豆| 免费人成精品欧美精品| 青娱乐精品视频在线| 日韩中文字幕亚洲一区二区va在线 | 国产激情91久久精品导航| 乱一区二区av| 另类小说综合欧美亚洲| 激情伊人五月天久久综合| 精品一区二区在线看| 精品中文字幕一区二区| 国产在线精品一区二区三区不卡| 狠狠网亚洲精品| 国产一区美女在线| 丁香一区二区三区| www.在线成人| 91在线视频网址| 在线观看三级视频欧美| 欧美人xxxx| 欧美成人a∨高清免费观看| 欧美日本在线视频| 午夜天堂影视香蕉久久| 2024国产精品| 在线看一区二区| 国产高清无密码一区二区三区| 国产精品久久久久婷婷|