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

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

?? tmif.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*---------------------------------------------------------------------------- 
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.
----------------------------------------------------------------------------*/

//////////////////////////////////////////////////////////////////////////////
//	HISTORY
//
//	960405	Tilakraj Roy 	Created
//	960710	Tilakraj Roy	Started adding code for tmman inteface 
//	961008	Tilakraj Roy	Added code for shared memory allocaiton interfaces.
//	961010	Tilakraj Roy	Added code for image loading, running & stopping
//	970806	Tilakraj Roy	Ported to Workstation V4.0
//	982005	Volker Schildwach	Ported to Windwos CE
//	981021	Tilakraj Roy	Changes for integrating into common source base
//
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
//				SYSTEM INCLUDE FILES
//////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include "ceddk.h"

//////////////////////////////////////////////////////////////////////////////
//				DRIVER INCLUDE FILES
//////////////////////////////////////////////////////////////////////////////

#include "tmmanapi.h"
#include "tmmanlib.h"
#include "platform.h"
#include "verinfo.h"
#include "tmif.h"

//////////////////////////////////////////////////////////////////////////////
//				MANIFEST CONSTANTS
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
//				TYPEDEFS
//////////////////////////////////////////////////////////////////////////////
#define tmmanDownloaderStatusToTMManStatus(x) \
	(((x)!=TMDwnLdr_OK)?(x+0x70):statusSuccess)

//////////////////////////////////////////////////////////////////////////////
//				PROTOTYPES
//////////////////////////////////////////////////////////////////////////////

TMStatus	tmmanKernelModeNegotiateVersion ( tmmanVersion* Version );



//////////////////////////////////////////////////////////////////////////////
//				IMPLEMENTATION
//////////////////////////////////////////////////////////////////////////////

DWORD
TMM_Open(
	DWORD	dwClientContext,
	DWORD	dwAccessCode,
	DWORD	dwShareMode
	)
{
	UInt32				ClientIdx, DeviceIdx;
	ClientObject*		Client;

    // search for an empty slot.
	DPF(1,("tmman:tmmanOpen:ClientList:"));
	for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
	{
		if ( TMManGlobal->ClientList[ClientIdx] )
		{
			DPF(1,("[#%x:%x]", 
				ClientIdx, ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process ));
			continue;
		}
		else
		{
			break;
		}
	}

	DPF(1,("\n"));

	if ( ClientIdx == TMManGlobal->MaximumClients )
	{
		DPF(0,("tmman:tmmanOpen:NoMoreClientsFree\n"));
		goto tmmanOpenExit1;
	}
		
	TMManGlobal->ClientList[ClientIdx] = memAllocate ( 
		sizeof ( ClientObject ) + sizeof ( ClientDeviceObject ) * ( TMManGlobal->DeviceCount - 1 ) ); 

	if ( TMManGlobal->ClientList[ClientIdx] == Null )
	{
		DPF(0,("tmman:tmmanOpen:memAllocate:FAIL\n"));
		goto tmmanOpenExit1;	
	}
	
	Client = TMManGlobal->ClientList[ClientIdx];


    // the current process always is the same (device.exe) under Windows CE
    // and the alocated address space is specific for each client, we can use
    // the address to determine a client 
    Client->Process = (DWORD) Client;


	Client->DeviceCount = TMManGlobal->DeviceCount;

	// initialize the per device data structures
	// BUGCHECK - we have to go by Client->DeviceCount since devices could have
	// gone away Workstation 5.0 problem.
	for ( DeviceIdx = 0 ; DeviceIdx < TMManGlobal->DeviceCount ; DeviceIdx++ )
	{
		TMManDeviceObject* TMManDevice = TMManGlobal->DeviceList[DeviceIdx];
		UInt32	Length;
		PVOID	AddrKernel;
		PVOID	AddrPhys;
		
		Client->Device[DeviceIdx].Device = TMManDevice;

		halGetMMIOInfo (
			TMManDevice->HalHandle,
			(Pointer*)&AddrPhys,
			(Pointer*)&AddrKernel,
			&Length );

        Client->Device[DeviceIdx].MMIOAddrUser   = AddrKernel;
        Client->Device[DeviceIdx].MMIOAddrPhys   = AddrPhys;

		halGetSDRAMInfo (
			TMManDevice->HalHandle,
			(Pointer*)&AddrPhys,
			(Pointer*)&AddrKernel,
			&Length );

        Client->Device[DeviceIdx].SDRAMAddrUser  = AddrKernel;
        Client->Device[DeviceIdx].SDRAMAddrPhys  = AddrPhys;
        Client->Device[DeviceIdx].MemoryAddrUser = TMManDevice->MemoryBlock;

	}

	TMManGlobal->ClientCount++;

	// return identifier for this client
    return Client->Process;

tmmanOpenExit1:
    return 0;
}

BOOL
TMM_Close(
	DWORD	dwOpenContext)
{
	UInt32				ClientIdx, DeviceIdx;
	ClientObject*		Client;
	PEPROCESS			Process;


    Process = dwOpenContext;
	
	DPF(1,("tmman:tmmanClose:Process[%x]\n", Process ));

	for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
	{
		if ( !TMManGlobal->ClientList[ClientIdx] )
			continue;

		if ( ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process != Process )
			continue;
		break;
	}

	if ( ClientIdx == TMManGlobal->MaximumClients )
	{
		DPF(0,("tmman:tmmanClose:PANIC:InvalidHandle:Process[%x]\n", Process ));
		goto tmmanCloseExit1;
	}
	// assume one open handle per process context		
	// if we have more than slot of a single process than
	// we are smoking something we are not supposed to
	// since tmman32.dll is the only one who calls CreateProcess
	// during ATTACH_PROCESS
	
	Client = TMManGlobal->ClientList[ClientIdx];

	

	// initialize the per device data structures
	// BUGCHECK - we have to go by Client->DeviceCount 
	for ( DeviceIdx = 0 ; DeviceIdx < TMManGlobal->DeviceCount ; DeviceIdx++ )
	{
		TMManDeviceObject* TMManDevice = TMManGlobal->DeviceList[DeviceIdx];

		memoryManagerDestroyMemoryByClient (
			TMManDevice->MemoryManagerHandle, 
			(UInt32)Process );

		messageManagerDestroyMessageByClient (
			TMManDevice->MessageManagerHandle, 
			(UInt32)Process );

		eventManagerDestroyEventByClient (
			TMManDevice->EventManagerHandle, 
			(UInt32)Process );

		sgbufferManagerDestroySGBufferByClient (
			TMManDevice->SGBufferManagerHandle, 
			(UInt32)Process );

	}


	memFree ( TMManGlobal->ClientList[ClientIdx] );

	TMManGlobal->ClientList[ClientIdx] = NULL;
	
	TMManGlobal->ClientCount--;


    return TRUE;

tmmanCloseExit1:
    return FALSE;
}

BOOL
TMM_IOControl(
	DWORD	   dwOpenContext,
	DWORD	   dwIoControlCode,
	LPVOID   lpBufIn,
	DWORD	   dwLenIn,
	LPVOID   lpBufOut,
	DWORD	   dwLenOut,
	PDWORD	pdwActualOut
	)
{

    PEPROCESS			Process;
	PVOID	IOParameters = lpBufIn;
	ULONG	ReturnInformation = 0;

    // if this function is called with an invalid context we just return
    if (!dwOpenContext)
        return TRUE;

    Process = dwOpenContext;

	switch ( dwIoControlCode )
	{

		case constIOCTLtmmanNegotiateVersion : // vxd callable
		{
			tmifNegotiateVersion* TMIF = 	
				(tmifNegotiateVersion*)IOParameters;

			TMIF->Status = tmmanKernelModeNegotiateVersion ( &TMIF->Version );
			ReturnInformation = sizeof ( tmifNegotiateVersion );
		}
		break;

		case constIOCTLtmmanDSPOpen : // vxd callable
		{
			tmifDSPOpen* TMIF = 	
				(tmifDSPOpen*)IOParameters;
			if ( TMIF->DSPNumber < TMManGlobal->DeviceCount )
			{
				TMIF->DSPHandle = (UInt32)TMManGlobal->DeviceList[TMIF->DSPNumber];
				TMIF->Status = statusSuccess;

			}
			else
			{
				TMIF->Status = statusDSPNumberOutofRange;
			}
			ReturnInformation = sizeof ( tmifDSPOpen );
			
		}
		break;

		case constIOCTLtmmanDSPClose : // vxd callable
		{
			tmifGenericFunction* TMIF = 	
				(tmifGenericFunction*)IOParameters;

			TMIF->Status = statusSuccess;
			ReturnInformation = sizeof ( tmifGenericFunction );

		}
		break;

		case constIOCTLtmmanDSPGetNum : // vxd callable
		{
			tmifDSPNum* TMIF = 	
				(tmifDSPNum*)IOParameters;
		
			TMIF->DSPCount = TMManGlobal->DeviceCount;
			TMIF->Status = statusSuccess;
			ReturnInformation = sizeof ( tmifDSPNum );

		}
		break;

		case	constIOCTLtmmanDSPInfo : // vxd callable
		{
			tmifDSPInfo*	TMIF =
				(tmifDSPInfo*)IOParameters;


			TMManDeviceObject* TMManDevice = (TMManDeviceObject*)TMIF->DSPHandle;
			UInt32	ClientIdx, DeviceIdx;
			UInt32	Dummy;
			ClientObject*		Client;

			for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
			{
				if ( !TMManGlobal->ClientList[ClientIdx] )
					continue;

				if ( ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process != Process )
					continue;
				break;
			}

			if ( ClientIdx == TMManGlobal->MaximumClients )
			{
				DPF(0,("tmman:tmmanDeviceControl:PANIC:tmmanDSPInfo:InvalidHandle:Process[%x]\n", 
					Process));
				TMIF->Status = statusInvalidHandle;
				ReturnInformation = sizeof ( tmifDSPInfo );
				break;
			}

			Client = TMManGlobal->ClientList[ClientIdx];
			
			TMIF->Info.MMIO.MappedAddress = 
				(UInt32)Client->Device[TMManDevice->DSPNumber].MMIOAddrUser;

			TMIF->Info.SDRAM.MappedAddress = 
				(UInt32)Client->Device[TMManDevice->DSPNumber].SDRAMAddrUser;

			halGetMMIOInfo (
				TMManDevice->HalHandle,
				(Pointer*)&TMIF->Info.MMIO.PhysicalAddress,
				(Pointer*)&Dummy,
				&TMIF->Info.MMIO.Size );
	

			halGetSDRAMInfo (
				TMManDevice->HalHandle,
				(Pointer*)&TMIF->Info.SDRAM.PhysicalAddress,
				(Pointer*)&Dummy,
				&TMIF->Info.SDRAM.Size );


			halGetTMPCIInfo ( 
				TMManDevice->HalHandle,
				&TMIF->Info.TMDeviceVendorID,
				&TMIF->Info.TMSubSystemID,
				&TMIF->Info.TMClassRevisionID );

			halGetBridgePCIInfo ( 
				TMManDevice->HalHandle,
				&TMIF->Info.BridgeDeviceVendorID,
				&TMIF->Info.BridgeSubsystemID,
				&TMIF->Info.BridgeClassRevisionID );

			TMIF->Info.DSPNumber = TMManDevice->DSPNumber;
			TMIF->Status = statusSuccess;
			ReturnInformation = sizeof ( tmifDSPInfo );

		}
		break;


		case	constIOCTLtmmanDSPLoad :
		{
			tmifDSPLoad*	TMIF =
				(tmifDSPLoad*)IOParameters;
			TMManDeviceObject* TMManDevice = (TMManDeviceObject*)TMIF->DSPHandle;
			// don't do anything in kernel mode for now

			// BUGCHECK : set the hal endiannesss here
			// the endian ness swap has to be done here since it is only 
			// during loading that we will know what endianess the target 
			// is running in.
			halSwapEndianess ( 
				TMManDevice->HalHandle,
				( TMIF->Endianess == constTMManEndianessBig ) );

			halSetPeerVersion ( 
				TMManDevice->HalHandle,
				TMIF->PeerMajorVersion,
				TMIF->PeerMinorVersion );

			TMIF->Status = 	statusSuccess;
			ReturnInformation = sizeof ( tmifDSPLoad );
		}
		break;

		case	constIOCTLtmmanDSPStart :
		{
			tmifGenericFunction*	TMIF =
					(tmifGenericFunction*)IOParameters;
			TMManDeviceObject* TMManDevice = (TMManDeviceObject*)TMIF->Handle;

			UInt32		CPURevision, BoardRevision;

			LARGE_INTEGER	SystemTime;

			UInt32	TargetKernelMajorVersion;
			UInt32	TargetKernelMinorVersion;
			UInt32	DeviceVendorID;
			UInt32	SubsystemID;
			UInt32	ClassRevisionID;


			TMManDevice->Status = constTMManDSPStatusRunning;


			TMManDevice->SharedData->HostKernelMajorVersion = 
				halAccess32( TMManDevice->HalHandle, verGetFileMajorVersion() );
			TMManDevice->SharedData->HostKernelMinorVersion =
				halAccess32( TMManDevice->HalHandle, verGetFileMinorVersion() );

			TMManDevice->SharedData->HalShared = 
				halAccess32( TMManDevice->HalHandle, TMManDevice->HalSharedAddress.LowPart );
			TMManDevice->SharedData->ChannelShared = 
				halAccess32( TMManDevice->HalHandle, TMManDevice->ChannelSharedAddress.LowPart );
			TMManDevice->SharedData->VIntrShared = 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级久久久| 香蕉乱码成人久久天堂爱免费| 亚洲色图第一区| 日本不卡视频在线| eeuss影院一区二区三区| 欧美日本在线一区| 中文字幕亚洲在| 精品一区二区三区免费观看 | 国产精品久久久久久久久免费桃花| 中文字幕日韩av资源站| 国产呦萝稀缺另类资源| 欧美三级资源在线| 亚洲区小说区图片区qvod| 狠狠色丁香婷婷综合| 宅男在线国产精品| 亚洲一区二区三区小说| 波多野结衣中文一区| 日韩视频免费观看高清在线视频| 亚洲一区免费观看| 99在线精品观看| 久久久高清一区二区三区| 日韩电影在线观看电影| 欧美日韩黄色影视| 亚洲大片免费看| 在线免费一区三区| 亚洲美女精品一区| 91麻豆视频网站| 亚洲色欲色欲www在线观看| 国产成人免费视频网站高清观看视频| 欧美一级艳片视频免费观看| 五月婷婷色综合| 3atv在线一区二区三区| 日韩精品亚洲专区| 日韩亚洲欧美成人一区| 免费成人在线视频观看| 51精品久久久久久久蜜臀| 青草国产精品久久久久久| 制服丝袜亚洲网站| 日韩成人一区二区三区在线观看| 欧美丰满嫩嫩电影| 免播放器亚洲一区| 精品日韩99亚洲| 国产成人精品亚洲午夜麻豆| 久久久美女毛片| 成人黄页毛片网站| 亚洲欧洲色图综合| 欧美嫩在线观看| 日韩国产精品久久久| 日韩亚洲欧美一区二区三区| 国产精品一区免费在线观看| 日本一区二区三区在线不卡| 五月激情六月综合| 亚洲精品在线观| 91视频国产资源| 亚洲福利一区二区| 精品嫩草影院久久| 成人免费毛片aaaaa**| 亚洲精品国产精品乱码不99| 欧美精品久久久久久久多人混战 | 成人高清免费在线播放| 一区二区三区中文在线| 欧美无砖砖区免费| 极品美女销魂一区二区三区 | 亚洲一级二级三级在线免费观看| 欧美日韩一区二区在线观看 | 成人黄色小视频| 亚洲狠狠丁香婷婷综合久久久| 欧美肥妇free| 不卡的av网站| 丝袜美腿成人在线| 国产精品理论片| 91 com成人网| av不卡免费在线观看| 日韩制服丝袜先锋影音| 国产精品黄色在线观看| 欧美电影一区二区| 国产成a人亚洲精| 亚洲第四色夜色| 国产精品传媒入口麻豆| 欧美精品tushy高清| 岛国av在线一区| 日韩中文欧美在线| 亚洲免费观看高清| 久久久久九九视频| 91精品国产欧美一区二区| 成人av在线播放网站| 看电影不卡的网站| 亚洲国产精品人人做人人爽| 欧美国产1区2区| 欧美不卡一区二区三区四区| 欧美亚洲国产一区二区三区va| 成人免费毛片a| 国产精品资源站在线| 久久精品久久久精品美女| 另类人妖一区二区av| 亚洲精品老司机| 亚洲人精品午夜| 国产精品国产三级国产普通话三级 | 欧美亚洲国产一区在线观看网站| 国产成人综合视频| 丝袜亚洲另类丝袜在线| 国产欧美一区二区精品性色超碰| 欧美一区二区视频在线观看2022| www.欧美日韩国产在线| 蜜臀av一区二区三区| 亚洲一区二区3| 国产精品久久久久久久久快鸭| 久久综合五月天婷婷伊人| 欧美日韩精品一区二区三区四区| 懂色av一区二区夜夜嗨| 日本特黄久久久高潮| 一区二区三区毛片| 日韩一区二区三区在线| 欧美日本在线看| 色综合天天做天天爱| 国产精品白丝jk黑袜喷水| 青草av.久久免费一区| 亚洲自拍另类综合| 综合在线观看色| 亚洲青青青在线视频| 国产精品你懂的在线| 26uuu色噜噜精品一区| 在线成人免费视频| 色国产综合视频| 国产精品夜夜嗨| 视频一区中文字幕国产| 亚洲在线视频免费观看| 日本一区二区成人在线| 日韩一区二区三区av| 欧美一区二区精品久久911| 欧美揉bbbbb揉bbbbb| 色婷婷久久久综合中文字幕| 欧美日韩国产高清一区二区三区 | 欧美美女黄视频| 欧美网站一区二区| 欧美日韩国产精品成人| 欧美精品日韩综合在线| 欧美一区二区三区色| 日韩欧美区一区二| 精品久久久久一区| 精品噜噜噜噜久久久久久久久试看 | 精品一区免费av| 国产91清纯白嫩初高中在线观看| 国产精品白丝av| 99久久99久久免费精品蜜臀| 成a人片国产精品| 色婷婷综合久久久久中文一区二区 | 91久久久免费一区二区| 色婷婷综合中文久久一本| 色八戒一区二区三区| 日韩欧美精品三级| 精品美女一区二区| 日本一二三不卡| 一区二区三区丝袜| 肉丝袜脚交视频一区二区| 国内欧美视频一区二区 | 麻豆精品在线视频| 国产一区二区三区久久悠悠色av| 91美女蜜桃在线| 欧美高清视频不卡网| 欧美大片日本大片免费观看| 国产欧美一区二区精品久导航| 中文字幕在线不卡| 亚洲一区二区三区四区在线观看 | 国产精品美女一区二区在线观看| 亚洲理论在线观看| 日本成人中文字幕在线视频| 国产精品亚洲一区二区三区妖精 | 91丨porny丨蝌蚪视频| 欧美精品日韩一区| 欧美极品美女视频| 五月婷婷综合激情| 成人妖精视频yjsp地址| av在线播放不卡| 国产日韩av一区二区| 亚洲成人av资源| 国产成人h网站| 精品视频色一区| 国产日产欧产精品推荐色| 亚洲国产中文字幕在线视频综合| 精品综合久久久久久8888| 91蜜桃免费观看视频| 欧美精品一区在线观看| 日本欧美一区二区| 色女孩综合影院| 亚洲国产成人午夜在线一区| 日本成人在线不卡视频| 在线观看国产91| 久久免费美女视频| 日本伊人色综合网| 在线免费观看日本欧美| 国产视频一区二区在线| 奇米四色…亚洲| 91九色最新地址| 欧美国产一区二区在线观看| 紧缚捆绑精品一区二区| 在线一区二区三区| 亚洲综合小说图片| 99久久综合狠狠综合久久| 日韩免费看的电影|