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

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

?? sgbuffer.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
sgbufferCreateExit4 :
	objectlistDelete ( 
		&Manager->List, 
		SGBuffer,
		SGBuffer->SGBufferNumber );


sgbufferCreateExit3 :
	namespaceDestroy ( SGBuffer->NameSpaceHandle );

sgbufferCreateExit2 :
	objectFree ( SGBuffer );

sgbufferCreateExit1 :
	return StatusCode;
}

TMStatus	sgbufferDestroy ( 
	UInt32 SGBufferHandle )
{
	SGBufferManagerObject*	SGBufferManager;
	SGBufferObject*	SGBuffer =
		(SGBufferObject*) SGBufferHandle;
	UInt32	NameSpaceHandle;

	if ( objectValidate ( SGBuffer, SGBufferFourCC ) != True )
	{
		DPF(0,("tmman:sgbufferDestroy:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	SGBufferManager = (SGBufferManagerObject* )SGBuffer->SGBufferManager;
	NameSpaceHandle = SGBuffer->NameSpaceHandle;


	memoryDestroy ( SGBuffer->MemoryHandle );

	pagetableDestroy ( SGBuffer->PageTableHandle );

	memFree ( SGBuffer->PageTableBuffer );

	objectlistDelete ( 
		&SGBufferManager->List, 
		SGBuffer,
		SGBuffer->SGBufferNumber );

	namespaceDestroy ( NameSpaceHandle );

	objectFree ( SGBuffer );

	return statusSuccess;
}

	
#else /* TARGET */

TMStatus	sgbufferOpen ( 
	UInt32	SGBufferManagerHandle, 
	Pointer	ListHead,
	Int8*	Name,
	UInt32*	EntryCountPointer,
	UInt32* SizePointer,
	UInt32*	SGBufferHandlePointer )
{
	SGBufferManagerObject*	Manager = (SGBufferManagerObject*)SGBufferManagerHandle;
	SGBufferObject*			Object;
	UInt8			MemoryName[constTMManNameSpaceNameLength];
	UInt32			Dummy, Idx;
	TMStatus		StatusCode;

	if ( objectValidate ( Manager, SGBufferManagerFourCC ) != True )
	{
		DPF(0,("tmman:sgbufferOpen:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	if ( ( Object = objectAllocate (
		sizeof ( SGBufferObject ), SGBufferFourCC ) ) == Null )
	{
		DPF(0,("tmman:sgbufferOpen:objectAllocate:FAIL\n" ));
		StatusCode = statusObjectAllocFail;
		goto sgbufferOpenExit2;	
	}

	if ( ( StatusCode = namespaceCreate  (
		Manager->NameSpaceManagerHandle,
		constTMManNameSpaceObjectSGBuffer,
		Name,
		&Object->SGBufferNumber,
		&Object->NameSpaceHandle ) ) != statusSuccess )
	{
		DPF(0,("tmman:sgbufferOpen:namespaceCreate:FAIL[%x]\n", 
			StatusCode ));
		goto sgbufferOpenExit1;	
	}

	if ( objectlistInsert ( 
		&Manager->List, 
		Object,
		Object->SGBufferNumber ) != True )
	{
		DPF(0,("tmman:sgbufferOpen:objectlistInsert:FAIL\n" ));
		StatusCode = statusObjectInsertFail;
		goto sgbufferOpenExit3;	
	}

	strSprintf ( MemoryName, "%d\\%s", 
		constTMManNameSpaceObjectSGBuffer, Name );

	if ( ( StatusCode = memoryOpen (
		Manager->MemoryManagerHandle,
		ListHead,
		MemoryName, 
		&Dummy,
		(Pointer *)&Object->Control,
		&Object->MemoryHandle ) ) != statusSuccess )
	{
		DPF(0,("tmman:sgbufferOpen:memoryOpen:FAIL[%x]\n",StatusCode ));
		goto sgbufferOpenExit4;
	}

	/* 
		the first entry contains the length of the entire buffer 
		and the number of PTEs 
	*/

	halAccessEnable( Manager->HalHandle );

	Object->BufferSize = halAccess32 ( Manager->HalHandle, 
		Object->Control->RunLength );

	Object->EntryCount = halAccess32 ( Manager->HalHandle,
		Object->Control->PhysicalAddress );

	halAccessDisable( Manager->HalHandle );

	Object->CurrentEntry = 0;
	Object->CurrentOffset = 0;
	Object->SGBufferManager = Manager;
	Object->Entries = Object->Control + 1;

	DPF(0,("tmman:sgbufferOpen:EntryCount[%x]:BufferSize[%x]\n", Object->EntryCount, Object->BufferSize ));

	for ( Idx = 0 ; Idx < Object->EntryCount ; Idx++ )
	{
		halAccessEnable( Manager->HalHandle );

		DPF(0,("tmman:sgbufferOpen:Entry[%x]:PhysicalAddress[%x]:RunLength[%x]\n", 
			Idx, Object->Entries[Idx].PhysicalAddress, Object->Entries[Idx].RunLength ));

		halAccessDisable( Manager->HalHandle );


	}


	*EntryCountPointer		= Object->EntryCount;
	*SizePointer			= Object->BufferSize;
	*SGBufferHandlePointer = (UInt32)Object;

	return statusSuccess;

/*
sgbufferOpenExit5 :
	memoryClose ( Object->MemoryHandle );
*/

sgbufferOpenExit4 :
	objectlistDelete ( 
		&Manager->List, 
		Object,
		Object->SGBufferNumber );

sgbufferOpenExit3 :
	namespaceDestroy ( Object->NameSpaceHandle );

sgbufferOpenExit2 :
	objectFree ( Object );

sgbufferOpenExit1 :
	return StatusCode;
}

TMStatus	sgbufferClose (
	UInt32	SGBufferHandle )
{
	SGBufferObject*	Object =	(SGBufferObject*)SGBufferHandle;
	SGBufferManagerObject *Manager;

	if ( objectValidate ( Object, SGBufferFourCC ) != True )
	{
		DPF(0,("tmman:sgbufferClose:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	Manager = (SGBufferManagerObject* )Object->SGBufferManager;

	memoryClose ( Object->MemoryHandle );

	objectlistDelete ( 
		&Manager->List, 
		Object,
		Object->SGBufferNumber );

	namespaceDestroy ( Object->NameSpaceHandle );

	objectFree ( Object );


	return statusSuccess;
}


TMStatus	sgbufferFirstBlock ( 
	UInt32	SGBufferHandle,
	UInt32* OffsetPointer, 
	UInt32* AddressPointer, 
	UInt32* SizePointer )
{
	/* remote object - this object exists on the host */
	SGBufferObject*	Object = (SGBufferObject*)SGBufferHandle;

	if ( objectValidate ( Object, SGBufferFourCC ) != True )
	{
		DPF(0,("tmman:sgbufferFirstBlock:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	Object->CurrentEntry = 0;
	Object->CurrentOffset = 0;

	return	sgbufferNextBlock ( 
		SGBufferHandle,
		OffsetPointer, 
		AddressPointer, 
		SizePointer );
}


TMStatus	sgbufferNextBlock ( 
	UInt32	SGBufferHandle,
	UInt32* OffsetPointer, 
	UInt32* AddressPointer, 
	UInt32* SizePointer )
{
	/* remote object - this object exists on the host */
	SGBufferObject*	Object = (SGBufferObject*)SGBufferHandle;
	SGBufferManagerObject*	Manager = (SGBufferManagerObject*)Object->SGBufferManager;

	if ( objectValidate ( Object, SGBufferFourCC ) != True )
	{
		DPF(0,("tmman:sgbufferNextBlock:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	if ( Object->EntryCount == 0 )
	{
		DPF(0,("tmman:sgbufferNextBlock:ZERO EntryCount:FAIL\n"));
		return statusSGBufferInvalidPageTable;
	}

	if ( Object->CurrentEntry >= Object->EntryCount )
	{
		DPF(0,("tmman:sgbufferNextBlock:CurrentEntry[%x] INVALID:FAIL\n",
			Object->CurrentEntry ));
		return statusSGBufferNoMoreEntries;
	}

	*OffsetPointer = Object->CurrentOffset;
	
	halAccessEnable( Manager->HalHandle );

	*AddressPointer = halAccess32( Manager->HalHandle, 
		Object->Entries[Object->CurrentEntry].PhysicalAddress );
	*SizePointer = halAccess32 ( Manager->HalHandle,
		Object->Entries[Object->CurrentEntry].RunLength );
	
	halAccessDisable( Manager->HalHandle );

	/* prepare for the call to sgbufferNextBlock */
	Object->CurrentOffset += Object->Entries[Object->CurrentEntry].RunLength;
	Object->CurrentEntry++;

	return statusSuccess;

}

TMStatus	sgbufferCopy ( 
	UInt32	SGBufferHandle,
	UInt32	Offset,
	UInt32	Address, 
	UInt32	Size, 
	UInt32	Direction )
{

	UInt32	IdxPTE;
	UInt32	BlockSize;		/* size for the current memcopy */
	UInt32	BlockStart;		/* offset from the beginning of the buffer */
	UInt32	BytesCopied;	/* bytes memcopied so far */
	SGBufferObject*	Object = (SGBufferObject*)SGBufferHandle;
	SGBufferManagerObject*	Manager = (SGBufferManagerObject*)Object->SGBufferManager;

	if ( objectValidate ( Object, SGBufferFourCC ) != True )
	{
		DPF(0,("tmman:sgbufferCopy:objectValidate:FAIL\n"));
		return statusInvalidHandle;
	}

	if ( Object->EntryCount == 0 )
	{
		DPF(0,("tmman:sgbufferCopy:ZERO EntryCount:FAIL\n"));
		return statusSGBufferInvalidPageTable;
	}

	if ( Offset > Object->BufferSize )
	{
		DPF(0,("tmman:sgbufferCopy:Offset[%x] OUT OF RANGE:FAIL\n",
			Offset ));
		return statusSGBufferOffsetOutOfRange;
	}


	/* validate the size requested */
	if ( ( Offset + Size ) >  Object->BufferSize )
	{
		DPF(0,("tmman:sgbufferCopy:Size[%x] OUT OF RANGE:FAIL\n",
			Size ));
		return statusSGBufferSizeOutOfRange;
	}

	/* base linear address of the buffer */
	BlockStart = 0;
	BytesCopied = 0;

	for ( IdxPTE = 0 ; IdxPTE < Object->EntryCount ; IdxPTE ++)
	{
		UInt32		PhysicalAddress, RunLength;
		
		halAccessEnable( Manager->HalHandle );

		RunLength = halAccess32 ( Manager->HalHandle, 
			Object->Entries[IdxPTE].RunLength );

		PhysicalAddress = halAccess32 ( Manager->HalHandle, 
			Object->Entries[IdxPTE].PhysicalAddress );

		halAccessDisable( Manager->HalHandle );

		/* offset is from the begining of the entire buffer */
		if ( ( Offset >=  BlockStart  )  && 
			( Offset <= ( BlockStart + RunLength ) ) )
		{
			/* we found the first PTE encompassing the offset */
			/* Offset points to the middle of the current block */
			BlockSize = RunLength - ( Offset - BlockStart );

			halAccessEnable( Manager->HalHandle );

			/* this is the first copy so bytes copied is assumed to be 0 */
			if ( Direction ) /* host to target */
			{
				memCopy ( 
					Address, 
					PhysicalAddress + RunLength - BlockSize,
					BlockSize );
			}
			else
			{
				memCopy ( 
					PhysicalAddress + RunLength - BlockSize,
					Address,
					BlockSize );

			}

			halAccessDisable( Manager->HalHandle );

			BlockStart += RunLength;

			BytesCopied = BlockSize;

			break;
		}

		/* 
			if Offset does not fall in this range increment BlockStart by the 
			length of the current block. 
		*/
		BlockStart += RunLength; 
	}

	for ( IdxPTE++ ; IdxPTE < Object->EntryCount ; IdxPTE ++)
	{
		UInt32		PhysicalAddress, RunLength;

		halAccessEnable( Manager->HalHandle );

		RunLength = halAccess32 ( Manager->HalHandle, 
			Object->Entries[IdxPTE].RunLength );

		PhysicalAddress = halAccess32 ( Manager->HalHandle, 
			Object->Entries[IdxPTE].PhysicalAddress );

		halAccessDisable( Manager->HalHandle );

		/* 
			check if this is the last block we have to deal with,
			the last block may be partial
		*/
		if ( ( ( Offset + Size ) >=  BlockStart  )  && 
			( ( Offset + Size ) <= ( BlockStart + RunLength ) ) )
		{
			/* we found the last PTE encompassing the ( offset + size ) */
			/* ( Offset + Size ) points to the middle of the current block */
			BlockSize = ( Offset + Size ) - BlockStart ;

			halAccessEnable( Manager->HalHandle );

			if ( Direction )
			{
				memCopy ( 
					(Pointer)( Address + BytesCopied), 
					(Pointer)PhysicalAddress,
					BlockSize );
			}
			else
			{
				memCopy ( 
					(Pointer)PhysicalAddress,
					(Pointer)( Address + BytesCopied), 
					BlockSize );

			}

			halAccessDisable( Manager->HalHandle );

			BytesCopied += BlockSize;

			break;
		}
		else
		{
			/* 
				copy this block entirely , as it does not encompass the begining 
				or end of the buffer
			*/
			halAccessEnable( Manager->HalHandle );

			if ( Direction )
			{

				memCopy ( 
					(Pointer)( Address + BytesCopied ), 
					(Pointer)PhysicalAddress,
					RunLength );
			}
			else
			{
				memCopy (
					(Pointer)PhysicalAddress,
					(Pointer)( Address + BytesCopied ), 
					RunLength );
			}

			halAccessDisable( Manager->HalHandle );

			
			BytesCopied += RunLength;
		}

		BlockStart += RunLength; 
	}

	return statusSuccess;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美在线视频| 久久精工是国产品牌吗| 琪琪一区二区三区| av在线播放成人| 精品久久久三级丝袜| 一区二区三区欧美日| 国产美女在线观看一区| 欧美日韩视频专区在线播放| 国产精品私房写真福利视频| 视频一区二区三区入口| eeuss鲁片一区二区三区| 日韩欧美一级在线播放| 一区二区久久久| 99久久99久久久精品齐齐| 精品国产免费一区二区三区香蕉| 亚洲免费观看高清完整版在线观看熊| 国产成人亚洲精品狼色在线| 欧美精品久久天天躁| 亚洲一区二区四区蜜桃| 色婷婷综合久久久| 国产精品国产三级国产| 成人一级片网址| 久久久午夜精品| 国产一区二区不卡在线| 精品免费日韩av| 免费成人在线影院| 欧美一区二区视频在线观看2020 | av成人免费在线| 久久久久高清精品| 国产高清不卡一区| 欧美激情艳妇裸体舞| 国产**成人网毛片九色 | 成人激情av网| 国产日韩欧美亚洲| 成人aa视频在线观看| 中文字幕制服丝袜一区二区三区| 成人午夜看片网址| 国产精品美女久久久久久久久 | 精品无人区卡一卡二卡三乱码免费卡 | 狠狠色丁香婷婷综合久久片| 欧美电影免费观看高清完整版在线| 日韩av中文字幕一区二区| 91精品国产一区二区三区蜜臀 | 99re热这里只有精品视频| 中文字幕亚洲区| 99r精品视频| 亚洲电影第三页| 日韩午夜av一区| 国产成人av影院| 最近日韩中文字幕| 欧美欧美欧美欧美首页| 美女脱光内衣内裤视频久久影院| 精品国产百合女同互慰| 丁香天五香天堂综合| 亚洲精品中文在线影院| 欧美日韩精品三区| 国产在线播放一区| 日韩码欧中文字| 欧美理论电影在线| 风间由美一区二区av101| 亚洲欧美日韩国产另类专区| 欧美精品v国产精品v日韩精品| 日韩一区精品视频| 欧美高清一级片在线观看| 欧美色图天堂网| 国产精品白丝jk黑袜喷水| 亚洲一二三四在线观看| 久久综合色综合88| 欧美在线免费观看亚洲| 极品美女销魂一区二区三区 | 激情欧美一区二区| 一区二区三区中文字幕| 日韩女同互慰一区二区| 色综合天天综合网天天看片 | 亚洲成人免费观看| 中文字幕精品一区| 在线播放中文字幕一区| 99久久精品免费看| 韩国欧美国产一区| 亚洲一区二区欧美| 国产精品女主播av| 欧美本精品男人aⅴ天堂| 色成年激情久久综合| 国产69精品久久久久777| 亚洲成人av一区二区三区| 国产精品福利av| 精品国产三级电影在线观看| 欧美三级在线看| 94-欧美-setu| 成人网页在线观看| 狠狠色丁香久久婷婷综| 日日摸夜夜添夜夜添国产精品 | 色哟哟国产精品| 国产老肥熟一区二区三区| 日韩av一级电影| 一卡二卡三卡日韩欧美| 欧美激情综合五月色丁香小说| 欧美一区二区三区爱爱| 欧美日韩综合不卡| 在线视频国内一区二区| 97久久精品人人爽人人爽蜜臀| 夫妻av一区二区| 国产成人精品免费在线| 精品一区二区三区在线观看国产 | 国产成人亚洲精品青草天美| 韩国av一区二区三区在线观看 | 亚洲精品ww久久久久久p站| 久久免费看少妇高潮| 精品久久久久久最新网址| 日韩一区二区在线看片| 日韩丝袜情趣美女图片| 欧美成人午夜电影| 久久中文娱乐网| 久久久精品黄色| 亚洲国产精品二十页| 久久久亚洲精华液精华液精华液| 精品少妇一区二区三区视频免付费| 91精品国产入口| 欧美tickling挠脚心丨vk| 日韩你懂的电影在线观看| 精品国产成人在线影院| 国产女主播一区| 中文字幕亚洲精品在线观看| 亚洲三级电影网站| 亚洲日本在线a| 亚洲国产日日夜夜| 亚洲成av人片一区二区梦乃| 天堂成人国产精品一区| 久久99精品久久久久久动态图| 国模一区二区三区白浆| 丰满少妇久久久久久久| 99精品视频在线观看| 91精彩视频在线| 91麻豆精品国产91久久久久 | 亚洲视频中文字幕| 亚洲成av人**亚洲成av**| 免费在线看成人av| 韩国成人在线视频| 不卡一区二区三区四区| 欧美色手机在线观看| www久久精品| 一区二区三区四区国产精品| 天堂久久一区二区三区| 国产一区视频网站| 色综合久久中文综合久久牛| 欧美精品一卡二卡| 久久久国产午夜精品| 一区二区三区日韩欧美精品| 美洲天堂一区二卡三卡四卡视频| 国产制服丝袜一区| 欧美色男人天堂| 久久精品视频在线看| 亚洲电影在线播放| 国产成人精品免费| 欧美二区三区91| 国产精品麻豆网站| 日本欧美肥老太交大片| 99re热这里只有精品视频| 精品美女在线播放| 亚洲国产日韩在线一区模特| 国产成人精品免费网站| 欧美一区二区视频在线观看2020| 国产精品国产三级国产三级人妇| 日本欧美在线看| 欧美综合亚洲图片综合区| 久久久美女艺术照精彩视频福利播放| 中文字幕在线播放不卡一区| 蜜臀av一区二区在线观看| 色狠狠综合天天综合综合| 国产日产欧美一区| 美腿丝袜一区二区三区| 欧美性猛交xxxxxxxx| 1000精品久久久久久久久| 国产乱码字幕精品高清av| 91精品国产丝袜白色高跟鞋| 亚洲乱码国产乱码精品精98午夜| 国产精品一区三区| 精品国产91乱码一区二区三区| 亚洲午夜视频在线| 91国产免费观看| 一区二区三区四区蜜桃| 国产一区二区免费看| 亚洲自拍偷拍欧美| 欧美日韩国产影片| 婷婷六月综合亚洲| 欧美精品一区二区不卡| 日本一区二区三区dvd视频在线| 视频在线观看91| 欧美日韩一区二区欧美激情| 国产精品嫩草影院com| 国产成人精品三级| 国产欧美一区二区三区在线老狼| 久久99国产精品久久99果冻传媒| 这里只有精品电影| 日韩精彩视频在线观看| 欧美疯狂性受xxxxx喷水图片| 亚洲二区视频在线| 欧美一区二区三区电影| 麻豆成人av在线| 欧美一区二区三区免费大片|