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

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

?? tmif.c

?? PNX系列設(shè)備驅(qū)動(dòng) PNX系列設(shè)備驅(qū)動(dòng)
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/*---------------------------------------------------------------------------- 
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 = 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费在线播放| 国产日产欧产精品推荐色| 麻豆高清免费国产一区| 中文字幕亚洲在| 日韩一级大片在线| 日本道色综合久久| 成人激情动漫在线观看| 日本不卡免费在线视频| 一区二区三区资源| 中文字幕av不卡| 精品日产卡一卡二卡麻豆| 欧美亚洲愉拍一区二区| 日韩女同互慰一区二区| 91丨九色porny丨蝌蚪| 经典三级一区二区| 婷婷丁香激情综合| 一区二区在线观看免费| 国产精品视频一二三区| 久久婷婷国产综合精品青草| 欧美日韩一区在线| 色婷婷综合久久久| 99精品偷自拍| 波多野结衣亚洲| 丰满少妇久久久久久久| 国模冰冰炮一区二区| 久久精品国产精品亚洲红杏 | 久久影院午夜论| 69成人精品免费视频| 欧美性视频一区二区三区| 色偷偷久久人人79超碰人人澡| av一二三不卡影片| 成人黄动漫网站免费app| 国产a久久麻豆| 国产大片一区二区| 成人网男人的天堂| 99在线热播精品免费| 床上的激情91.| 成人一区二区在线观看| 国产suv精品一区二区6| 国产成人欧美日韩在线电影| 国产成人av一区二区三区在线| 国产麻豆视频精品| 国产精品资源站在线| 成人综合在线视频| 97se亚洲国产综合在线| 欧美性受极品xxxx喷水| 欧美日韩精品一区二区三区| 欧美日韩一二区| 4438x亚洲最大成人网| 日韩欧美高清一区| 欧美精品一区二区在线播放| 久久精品免费在线观看| 国产精品久久久久久久久免费相片 | 色婷婷精品大视频在线蜜桃视频| 色婷婷av一区二区三区gif| 欧美艳星brazzers| 日韩精品中文字幕在线一区| 久久在线免费观看| 亚洲天天做日日做天天谢日日欢 | 久久久亚洲欧洲日产国码αv| 国产亚洲欧美在线| 亚洲蜜臀av乱码久久精品| 亚洲国产欧美在线| 国产综合久久久久久久久久久久| 国产大陆a不卡| 日本韩国欧美在线| 欧美成人video| 国产精品丝袜在线| 亚洲午夜精品17c| 国产在线播放一区二区三区| av电影在线观看不卡| 欧美久久婷婷综合色| 久久综合精品国产一区二区三区| 国产精品久久精品日日| 午夜精品福利在线| 国产精品夜夜嗨| 欧美性xxxxx极品少妇| 精品国产乱码久久久久久夜甘婷婷| 日本一区二区成人在线| 国产精品午夜免费| 国产精品乱人伦一区二区| 亚洲精品一二三区| 精品综合久久久久久8888| k8久久久一区二区三区 | 国产毛片精品一区| 91蜜桃免费观看视频| 91精品国产91久久综合桃花| 国产精品素人视频| 蜜臀av在线播放一区二区三区| 成人开心网精品视频| 欧美一区二区久久久| 亚洲图片激情小说| 国产乱子伦一区二区三区国色天香| 欧美在线free| 国产精品久久久久aaaa樱花 | 国产精品自拍三区| 欧美猛男超大videosgay| 欧美激情一区二区三区全黄| 男人操女人的视频在线观看欧美 | 欧美精品色一区二区三区| 中文成人综合网| 久久不见久久见免费视频1| 91久久人澡人人添人人爽欧美| 国产日韩精品视频一区| 男女性色大片免费观看一区二区 | 精品久久久久av影院| 亚洲国产成人高清精品| 99综合影院在线| 国产午夜精品久久久久久久| 日本女人一区二区三区| 精品视频1区2区| 亚洲老妇xxxxxx| 成人激情综合网站| 欧美激情一区二区三区在线| 精品亚洲免费视频| 欧美一级日韩免费不卡| 亚洲成人动漫一区| 欧美亚洲综合久久| 亚洲小说欧美激情另类| 色综合中文字幕国产 | 日本精品一级二级| 最新热久久免费视频| 成人av电影在线播放| 日本一区免费视频| 国产福利一区二区三区视频在线 | 成人午夜在线视频| 欧美国产一区二区| 成人在线视频一区| 中文字幕欧美激情一区| 成人免费视频caoporn| 亚洲国产成人在线| 成人性生交大片免费看中文| 日本一区二区免费在线| 国产suv精品一区二区6| 日本一区二区成人在线| 不卡免费追剧大全电视剧网站| 国产精品久久久久久久久快鸭| 国产91在线看| 国产精品久久午夜夜伦鲁鲁| 色综合中文字幕国产| 亚洲情趣在线观看| 色久综合一二码| 视频一区中文字幕国产| 欧美一卡二卡在线| 国产精品一区久久久久| 国产精品久久久久久久岛一牛影视 | 精品一区二区成人精品| 久久久久国产精品人| 国产91精品一区二区麻豆亚洲| 国产精品三级av| 欧美在线观看视频一区二区| 香蕉久久夜色精品国产使用方法| 日韩一区二区电影网| 久久丁香综合五月国产三级网站| 久久久久97国产精华液好用吗| 成人国产精品免费观看| 一区二区三区不卡视频在线观看| 欧美区视频在线观看| 激情欧美日韩一区二区| 国产精品久久久久影视| 日本大香伊一区二区三区| 日本不卡一区二区三区| 国产欧美日韩卡一| 欧美亚洲国产一区二区三区va| 日韩国产欧美视频| 日本一区二区电影| 欧美美女喷水视频| 国产成人亚洲综合色影视 | 国产伦精品一区二区三区在线观看 | 91福利视频在线| 免费成人av在线播放| 中文字幕高清不卡| 在线播放一区二区三区| 国产一区二区美女| 亚洲一区二区视频在线观看| 欧美变态凌虐bdsm| 91成人网在线| 国产一区免费电影| 一区二区高清在线| 久久亚洲精华国产精华液 | 精品乱码亚洲一区二区不卡| 成人精品视频一区二区三区尤物| 日韩影院免费视频| 日韩一区中文字幕| 26uuu久久综合| 欧美午夜寂寞影院| 国产成人亚洲精品青草天美| 五月天激情综合| 国产精品电影一区二区三区| 99久久精品免费看国产 | 欧美一区二区免费观在线| 成人在线一区二区三区| 天天影视网天天综合色在线播放| 国产欧美一区二区精品秋霞影院| 欧美日韩一二区| 97se亚洲国产综合自在线| 国产乱码精品一区二区三区五月婷| 亚洲国产精品欧美一二99| 亚洲国产激情av| 久久婷婷国产综合国色天香|