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

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

?? sgbuffer.c

?? PNX系列設(shè)備驅(qū)動 PNX系列設(shè)備驅(qū)動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*---------------------------------------------------------------------------- 
COPYRIGHT (c) 1997 by Philips Semiconductors

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED AND COPIED IN 
ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH A LICENSE AND WITH THE 
INCLUSION OF THE THIS COPY RIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES 
OF THIS SOFTWARE MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
PERSON. THE OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. 

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ANY PRIOR NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY Philips Semiconductor. 

PHILIPS ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWARE
ON PLATFORMS OTHER THAN THE ONE ON WHICH THIS SOFTWARE IS FURNISHED.
----------------------------------------------------------------------------*/
/*
	sgbuffer.c

	Pvides a mechanism for the operating system running on one processor
	to signal the operating system running on another processor.

	Author : T.Roy (Tilakraj.Roychoudhury@sv.sc.philips.com)

	HISTORY
	#define	TR	Tilakraj Roy
	960530	TR 	Created
	960905	TR	Pulled in from host channel sources
	960907	TR	Moved packet queuing to higher layer
	960924	TR	Pulled in mailbox sources from IPC 
	961019	TR	Enabled in the new interface stuff.
	970520	TR	Generic Host-Communication for Apple
	970707	Tilakraj Roy	Pulled in form the Channel and VIntr sources.
*/

/*----------------------------------------------------------------------------
          SYSTEM INCLUDE FILES
----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
          DRIVER SPECIFIC INCLUDE FILES
----------------------------------------------------------------------------*/
#include "tmmanlib.h"
#include "tmmanapi.h"
/*	CONSTANTS */

#define		SGBufferManagerFourCC		tmmanOBJECTID ( 'S', 'G', 'B', 'M' )
#define		SGBufferFourCC				tmmanOBJECTID ( 'S', 'G', 'B', 'O' )

/* TYPDEFS */

typedef struct tagSGBufferObject
{
	GenericObject	Object;
	UInt32			SGBufferManager;
	UInt32			MemoryHandle;
	UInt32			NameSpaceHandle;
	UInt32			ClientHandle;
	UInt32			PageTableHandle;

	UInt32			SGBufferNumber;
	UInt32			BufferSize;
	UInt32			EntryCount;
	Pointer*		PageTableBuffer; /* pointer to the scratch buffer for pagetableCreate */

	PageTableEntry*	Control;		/* pointer to the base of shared memory */
	PageTableEntry*	Entries;		/* pointer to the page table entry list in the shared memory */
	

	/* use only on the target */
	UInt32	CurrentEntry;
	UInt32	CurrentOffset;

	/* used only on the host */
	PageTableEntry*	ControlPageTable; /* pointer to the local page table list */

}	SGBufferObject;

typedef struct tagSGBufferManagerObject
{
	GenericObject			Object;
	ObjectList				List;
	UInt32					Count;
	UInt32					HalHandle;
	UInt32					MemoryManagerHandle;
	UInt32					NameSpaceManagerHandle;
	UInt32					CriticalSectionHandle;
}	SGBufferManagerObject;


/* GLOBAL DATA STRUCTURES */
/* NONE - key to object oriented programming */


/* FUNCTIONS */

TMStatus	sgbufferManagerCreate ( 
	sgbufferManagerParameters* Parameters,
	UInt32* SGBufferManagerHandle )
{
	TMStatus		StatusCode;

	SGBufferManagerObject*	Manager;

	if ( ( Manager = objectAllocate ( 
		sizeof ( SGBufferManagerObject ),
		SGBufferManagerFourCC ) ) == Null )
	{
		DPF(0,("tmman:sgbufferManagerCreate:objectAllocate:FAIL\n"));
		StatusCode = statusObjectAllocFail; 
		goto sgbufferManagerCreateExit1;
	}

	Manager->Count					= Parameters->SGBufferCount;
	Manager->HalHandle				= Parameters->HalHandle;
	Manager->MemoryManagerHandle	= Parameters->MemoryManagerHandle;
	Manager->NameSpaceManagerHandle	= Parameters->NameSpaceManagerHandle;

	if ( objectlistCreate ( &Manager->List,  
		Manager->Count ) != True )
	{
		DPF(0,("tmman:sgbufferManagerCreate:objectlistCreate:FAIL\n"));
		StatusCode = statusObjectListAllocFail;
		goto	sgbufferManagerCreateExit2;
	}

	if ( critsectCreate ( &Manager->CriticalSectionHandle ) == False )
	{
		DPF(0,("tmman:sgbufferManagerCreate:critsectCreate:FAIL\n"));
		StatusCode = statusCriticalSectionCreateFail;
		goto sgbufferManagerCreateExit3;
	}

	*SGBufferManagerHandle  = (UInt32)Manager;

	return statusSuccess;

/*
sgbufferManagerCreateExit3:
	critsectDestroy ( Manager->CriticalSectionHandle );
*/

sgbufferManagerCreateExit3:
	objectlistDestroy ( &Manager->List );

sgbufferManagerCreateExit2:
	objectFree ( Manager );

sgbufferManagerCreateExit1:
	return StatusCode;
}

TMStatus	sgbufferManagerReset ( 
	UInt32 SGBufferManagerHandle )
{
	SGBufferManagerObject* Manager = 
		( SGBufferManagerObject* )SGBufferManagerHandle;

	SGBufferObject* Object;

	UInt32	Idx;

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

	for ( Idx = 0 ; Idx < Manager->Count ; Idx ++ )
	{
		UInt32	EntryIdx;

		if ( ( Object = objectlistGetObject (
			&Manager->List, 
			Idx ) ) != Null )
		{
			halAccessEnable( Manager->HalHandle );

			Object->Control[0].PhysicalAddress = 
				halAccess32 ( Manager->HalHandle, Object->EntryCount );

			Object->Control[0].RunLength = 
				halAccess32 ( Manager->HalHandle, Object->BufferSize );

			halAccessDisable( Manager->HalHandle );

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

				Object->Control[EntryIdx+1].PhysicalAddress = 
					halAccess32 ( Manager->HalHandle, 
					Object->ControlPageTable[EntryIdx].PhysicalAddress );

				Object->Control[EntryIdx+1].RunLength = 
					halAccess32 ( Manager->HalHandle, 
					Object->ControlPageTable[EntryIdx].RunLength );

				halAccessDisable( Manager->HalHandle );
			}
		
		}
	
	}

	return statusSuccess;
}

TMStatus	sgbufferManagerDestroy ( 
	UInt32 SGBufferManagerHandle )
{
	SGBufferManagerObject* Manager = 
		( SGBufferManagerObject* )SGBufferManagerHandle;

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

	critsectDestroy ( Manager->CriticalSectionHandle );

	objectlistDestroy ( &Manager->List );

	objectFree ( Manager );

	return statusSuccess;
}

TMStatus  sgbufferManagerDestroySGBufferByClient (
	UInt32	SGBufferManagerHandle, 
	UInt32 ClientHandle )
{
	SGBufferManagerObject* Manager = 
		( SGBufferManagerObject* )SGBufferManagerHandle;
	SGBufferObject*	Object;
	UInt32	Idx;

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


	for ( Idx = 0 ; Idx < Manager->Count ; Idx++ )
	{
		Object = objectlistGetObject (
			&Manager->List, 
			Idx );
		if ( ( Object ) && Object->ClientHandle == ClientHandle )
		{

#ifdef TMMAN_HOST
			sgbufferDestroy ( (UInt32) Object );
#else
			
#endif
		}
	}

	return statusSuccess;
}
/*
	This is the general algorithm of how scatter gather locking is going to 
	work.
	The shraed PTE has 1 extra entry in the begining that contains the 
	Size and the number of actual PTE entries. If it is not done this way then
	we would be wasting another shared memory block where sgbuffer has to store its 
	private data structures.

	platform.h has a structure PageLockBufferDescription which is transparent to
		this file
	tmif calls sgbufferCreate with pointer PageLockBufferDescription
	sgbufferCreate
		ContextPointerLength = pagetableGetSize ( BufferDescription );

		memAllocate ( ContextPointerLength );

		ContextPointer = pagetableCreate ( 
			BufferDescription,
			ContextPointer,
			&PTEPointer,
			&EntryCount,
			&Size,
			&Address,
			PageTableHandle );
		
		SharedPTE = memoryCreate ( sizeof ( PageTableEntry ) * ( EntryCount + 1) );

		memCopy ( PTEPoitner, ShredPTE, sizeof ( PageTableEntry ) * EntryCount );

		memFree ( contextPointer );




*/
#ifdef TMMAN_HOST
TMStatus	sgbufferCreate (
	UInt32	SGBufferManagerHandle,
	Pointer	ListHead,
	Int8*	Name,
	UInt32	BufferAddress,
	UInt32	BufferSize,
	UInt32	Flags,
	UInt32*	SGBufferHandlePointer )
{
	SGBufferManagerObject* Manager = 
		( SGBufferManagerObject* )SGBufferManagerHandle;
	SGBufferObject*	SGBuffer;

	TMStatus		StatusCode;
	UInt32			Idx;
	UInt32			EstimatedScatterTableSize;
	UInt8			MemoryName[constTMManNameSpaceNameLength];

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

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

	SGBuffer->BufferSize  = BufferSize;
	SGBuffer->SGBufferManager = (UInt32)Manager;
	SGBuffer->ClientHandle = (UInt32)ListHead;


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


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


	/* 
		make the name unique by putting the calling object type
		before the name.
	*/


	if ( ! ( EstimatedScatterTableSize = 
		pagetableGetTempBufferSize ( 
			BufferAddress, SGBuffer->BufferSize ) ) )
	{
		DPF(0,("tmman:sgbufferCreate:pagetableGetSize:FAIL\n"));
		StatusCode = statusSGBufferPageTableSizeFail;
		goto sgbufferCreateExit4;	
	}

	/*
	 allocate a local buffer for retrieving the page table.
	 pagetableCreate does not allocate this buffer
	 as we don't need this buffer after this call
	 and it would not get deallocated until pagetableDestroy
	 is called
	*/
	if ( ( SGBuffer->PageTableBuffer =  memAllocate ( 
		EstimatedScatterTableSize ) ) == Null )
	{
		DPF(0,("tmman:sgbufferCreate:memAlloc:FAIL\n"));
		StatusCode = statusSGBufferTempPageAllocFail;
		goto sgbufferCreateExit4;	
	}

	/* page lock the memory and receive the page table in the buffer provided 
		we need not pass the EstimatedScatterTableSize as it can be derived
		from the BufferDescritpion

	*/
	
	if ( pagetableCreate ( 
		BufferAddress,
		SGBuffer->BufferSize,
		SGBuffer->PageTableBuffer,
		Manager->HalHandle,
		&SGBuffer->ControlPageTable,
		&SGBuffer->EntryCount,
		&SGBuffer->PageTableHandle ) != True )
	{
		DPF(0,("tmman:sgbufferCreate:pagetableCreate:FAIL\n"));
		StatusCode = statusSGBufferPageLockingFail;
		goto sgbufferCreateExit5;	
	}
	
	strSprintf ( MemoryName, "%d\\%s", 
		constTMManNameSpaceObjectSGBuffer, Name );

	if ( ( StatusCode = memoryCreate (
		Manager->MemoryManagerHandle,
		ListHead,
		MemoryName, 
		(SGBuffer->EntryCount + 1) * sizeof(PageTableEntry), /* one extra entry for table size & count */
		&SGBuffer->Control,
		&SGBuffer->MemoryHandle ) ) != statusSuccess )
	{
		DPF(0,("tmman:sgbufferCreate:memoryCreate:FAIL[%x]\n", StatusCode ));
		goto sgbufferCreateExit6;
	}

	/* 
		the first entry contains the buffer size & count
		PhysicalAddress = number of entries
		BufferSize = Total amount of memory locked
	*/

	SGBuffer->Entries = SGBuffer->Control + 1;

	halAccessEnable( Manager->HalHandle );

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

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

	halAccessDisable( Manager->HalHandle );

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

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

		SGBuffer->Entries[Idx].PhysicalAddress  = halAccess32( 
			Manager->HalHandle,
			SGBuffer->ControlPageTable[Idx].PhysicalAddress );

		SGBuffer->Entries[Idx].RunLength = halAccess32( 
			Manager->HalHandle,
			SGBuffer->ControlPageTable[Idx].RunLength );

		halAccessDisable( Manager->HalHandle );

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

	}
	
	*SGBufferHandlePointer = (UInt32)SGBuffer;

	return statusSuccess;

/*
sgbufferCreateExit7 :
	memoryDestroy ( SGBuffer->MemoryHandle );
*/

sgbufferCreateExit6 :	
	pagetableDestroy ( SGBuffer->PageTableHandle );

sgbufferCreateExit5 :
	memFree ( SGBuffer->PageTableBuffer );

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
北岛玲一区二区三区四区| 风间由美一区二区三区在线观看 | 久久精品国产成人一区二区三区| 成人免费不卡视频| 日韩欧美一二三四区| 亚洲精品日日夜夜| 国产91高潮流白浆在线麻豆| 日韩欧美一区在线观看| 亚洲一区二区在线观看视频| 成人污视频在线观看| 精品国产乱码久久久久久浪潮| 亚洲乱码国产乱码精品精小说| 国产成人啪午夜精品网站男同| 欧美一级欧美三级在线观看| 一级女性全黄久久生活片免费| www.亚洲精品| 中文幕一区二区三区久久蜜桃| 国内成人自拍视频| 日韩欧美一区二区在线视频| 无码av中文一区二区三区桃花岛| 色香蕉成人二区免费| 中文字幕日韩欧美一区二区三区| 国产寡妇亲子伦一区二区| 精品少妇一区二区三区日产乱码| 视频一区欧美精品| 欧美高清精品3d| 亚洲高清视频的网址| 欧美系列在线观看| 一区二区三区久久久| 国产精品综合网| 精品国产网站在线观看| 理论片日本一区| 欧美一三区三区四区免费在线看| 亚洲h在线观看| 欧美成人a∨高清免费观看| 欧美一二三区在线| 日产国产高清一区二区三区| 欧美肥大bbwbbw高潮| 日韩精品一区第一页| 欧美精品三级日韩久久| 日本vs亚洲vs韩国一区三区二区| 欧美一区二区成人| 青青草原综合久久大伊人精品优势 | 国产日韩欧美精品一区| 国产九色sp调教91| 国产精品天美传媒沈樵| 成人短视频下载| 国产精品久久久久久久裸模| 成人av免费在线| 亚洲日本韩国一区| 91福利精品视频| 午夜精品一区二区三区免费视频| 欧美日韩成人一区二区| 麻豆国产91在线播放| 精品sm在线观看| 国产91精品在线观看| 《视频一区视频二区| 欧美手机在线视频| 日本最新不卡在线| 久久久久久免费网| 99精品欧美一区二区三区小说| 亚洲精品视频在线| 91精品国产丝袜白色高跟鞋| 久久国产精品一区二区| 久久久久久久电影| 91在线码无精品| 日韩高清在线一区| 久久色成人在线| 99国产精品久久久久久久久久| 亚洲综合成人网| 精品蜜桃在线看| 成人黄色网址在线观看| 亚洲一级片在线观看| 日韩女优电影在线观看| 处破女av一区二区| 亚洲香蕉伊在人在线观| 精品久久人人做人人爰| 成人动漫一区二区三区| 亚洲国产精品一区二区尤物区| 欧美大片在线观看| 波多野结衣91| 日本不卡免费在线视频| 国产日韩三级在线| 欧美日韩免费在线视频| 国产精品一卡二| 亚洲午夜久久久| 久久久美女毛片| 欧美三级日韩三级| 国产精品18久久久久久久网站| 亚洲女同一区二区| 精品日韩欧美一区二区| 色悠悠亚洲一区二区| 激情综合网av| 亚洲欧美福利一区二区| www激情久久| 欧美专区在线观看一区| 国产在线一区二区综合免费视频| 一区二区三区高清| 久久日韩精品一区二区五区| 91久久精品午夜一区二区| 极品少妇一区二区三区精品视频| 亚洲免费三区一区二区| 久久婷婷久久一区二区三区| 欧美群妇大交群的观看方式| 成人免费视频一区| 美女在线视频一区| 亚洲一区免费在线观看| 国产精品全国免费观看高清 | 欧美精品免费视频| 91视频观看免费| 国产最新精品免费| 亚洲国产精品嫩草影院| 中文一区二区完整视频在线观看| 在线成人小视频| 91免费看`日韩一区二区| 国产在线精品视频| 视频一区中文字幕国产| 一区二区在线观看免费 | 欧美日韩一区成人| 成人国产视频在线观看| 捆绑变态av一区二区三区| 亚洲一区二区三区免费视频| 国产精品青草综合久久久久99| 欧美一区日韩一区| 欧美视频一区二区三区| 99国产精品久久久| 成人丝袜高跟foot| 国产米奇在线777精品观看| 日韩福利电影在线| 亚洲国产wwwccc36天堂| 成人欧美一区二区三区小说| 国产日产欧美一区二区视频| 欧美电影免费提供在线观看| 欧美高清激情brazzers| 欧美色偷偷大香| 色婷婷精品久久二区二区蜜臂av| 成人污视频在线观看| 国产成人免费网站| 国产一区二区三区最好精华液 | 国产日韩精品一区二区三区| 精品黑人一区二区三区久久| 69久久夜色精品国产69蝌蚪网| 欧洲国内综合视频| 91精品办公室少妇高潮对白| 91蜜桃免费观看视频| av在线播放不卡| av成人免费在线观看| 成人综合在线网站| 成人app网站| 99久久精品一区| 99久久久久久| 色哟哟在线观看一区二区三区| 91香蕉视频mp4| 一本色道久久综合狠狠躁的推荐| 91丨九色丨尤物| 91麻豆产精品久久久久久| 91论坛在线播放| 欧美最新大片在线看| 欧美日韩一区二区在线观看视频 | 99久久精品99国产精品| 白白色 亚洲乱淫| 一本大道av伊人久久综合| 欧美在线一区二区三区| 欧美人牲a欧美精品| 日韩一区二区三区av| 日韩精品一区二区三区在线| 欧美不卡123| 久久久蜜臀国产一区二区| 中文字幕欧美日本乱码一线二线 | 欧美一区二区三区四区久久| 日韩一区二区在线观看视频| 日韩欧美一区二区久久婷婷| 久久久久久久久久久99999| 国产精品三级久久久久三级| 亚洲精品免费播放| 午夜婷婷国产麻豆精品| 久久精品国产99| 成人涩涩免费视频| 欧美在线你懂得| 欧美一区二区三区四区五区| 久久久欧美精品sm网站| 日韩美女精品在线| 午夜视频一区二区| 国产在线精品一区二区不卡了| 成人黄色片在线观看| 欧美唯美清纯偷拍| 7878成人国产在线观看| 久久精品亚洲精品国产欧美 | 欧美tk丨vk视频| 国产女人18水真多18精品一级做| 中文字幕高清一区| 亚洲另类春色校园小说| 日本不卡123| 成人av在线一区二区三区| 欧美专区亚洲专区| 2欧美一区二区三区在线观看视频| 国产精品毛片高清在线完整版| 亚洲韩国精品一区| 韩国成人在线视频| 91蝌蚪porny|