⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcihal.c

📁 wince host 和 target PCI驱动程序
💻 C
字号:
/*COPYRIGHT (c) 1996 by Philips SemiconductorsTHIS 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 OTHERPERSON. THE OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ANY PRIOR NOTICEAND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY Philips Semiconductor. PHILIPS ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWAREON PLATFORMS OTHER THAN THE ONE ON WHICH THIS SOFTWARE IS FURNISHED.*//*	Copyright (c) 1996 Philips Semiconductors - TriMedia. All rights reserved.FILE pcihal.cHISTORY	#define TR	Tilakraj Roy	9502118	TR	Created	(Tilakraj Roy )COMMENTS	All addresses passed to the hal functions are Physical TriMedia SDRAM	addresses. i.e Addresses where they are mapped into PCI address space.	*/#include "windows.h"#include "tmwincom.h"#include "tmman32.h"#include "tmif.h"#include "pcihal.h"BOOL	halValidateAddress ( PTM_HW pTMHW, DWORD dwAddress, BOOL *pfSDRAM ){	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	PTMSTD_MEMORY_BLOCK	pMMIO = &pTMHW->DSPCaps.MMIO;	#else	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	PTMSTD_MEMORY_BLOCK	pMMIO = &pTMHW->Config.MMIO;	#endif	if( ( dwAddress >= pSDRAM->dwPhysical ) &&		( dwAddress <= ( pSDRAM->dwPhysical + pSDRAM->dwSize - 1) ) )	{		*pfSDRAM = TRUE;		return TRUE;	}	if( ( dwAddress >= pMMIO->dwPhysical ) &&		( dwAddress <= (pMMIO->dwPhysical + pMMIO->dwSize - 1)  ) )	{		*pfSDRAM = FALSE;		return TRUE;	}	return FALSE;}BOOL	halValidateLength ( PTM_HW pTMHW, DWORD dwAddress, DWORD dwLength ){	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	PTMSTD_MEMORY_BLOCK	pMMIO = &pTMHW->DSPCaps.MMIO;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	PTMMAN_MEMORY_BLOCK	pMMIO = &pTMHW->Config.MMIO;	#endif	// assumes that MMIO and SDRAM are not contigious.	if ( ( dwAddress >= pSDRAM->dwPhysical ) &&		( dwAddress < (pSDRAM->dwPhysical + pSDRAM->dwSize - 1)  ) )	{		if ( ( dwAddress + dwLength ) <= (pSDRAM->dwPhysical + pSDRAM->dwSize - 1)  )			return TRUE;		else			return FALSE;	}	if ( ( dwAddress >= pMMIO->dwPhysical ) &&		( dwAddress <= (pMMIO->dwPhysical + pMMIO->dwSize -1) ) )	{		if ( ( dwAddress + dwLength ) <= 			(pMMIO->dwPhysical + pMMIO->dwSize -1) )			return TRUE;		else			return FALSE;	}	return FALSE;}BOOL	halInit ( PTM_HW pTMHW ) // TR960406 DWORD dwSDRAMLength, BOOL fTriMedia ){	#ifdef USE_TMMAN	STATUS	Status;	if ( ( Status = tmDSPOpen (0, &pTMHW->DSPHandle ) ) != TMOK )	{		goto halInit_exit1;	}	if ( ( Status = tmDSPGetCaps ( pTMHW->DSPHandle,		&pTMHW->DSPCaps ) ) != TMOK )	{		goto halInit_exit1;	}	#else	DWORD	dwBytesReturned;	pTMHW->hDevice = CreateFile ( "\\\\.\\vtmman.vxd",0,0,0,		CREATE_NEW ,  FILE_FLAG_DELETE_ON_CLOSE, 0 );	if ( pTMHW->hDevice == INVALID_HANDLE_VALUE )	{		return FALSE;	}	if ( DeviceIoControl ( pTMHW->hDevice, DIOC_GETCONFIG,		NULL, 0,		(PVOID)&pTMHW->Config, sizeof( TMMAN_CONFIG_INFO),		&dwBytesReturned, NULL ) != TRUE )	{		return FALSE;	}	#endif	return TRUE;halInit_exit1 :	return FALSE;	}VOID	halExit ( PTM_HW pTMHW ){	#ifdef USE_TMMAN	tmDSPClose ( pTMHW->DSPHandle );	#else	CloseHandle ( pTMHW->hDevice );	#endif}BYTE	halMemoryReadB ( PTM_HW pTMHW, DWORD dwAddress ){	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	#endif	return *((PBYTE)((dwAddress - pSDRAM->dwPhysical ) +		pSDRAM->dwLinear ));}WORD	halMemoryReadW ( PTM_HW pTMHW, DWORD dwAddress ){	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	#endif	return *(PWORD)((PBYTE)((dwAddress - pSDRAM->dwPhysical ) +		pSDRAM->dwLinear ));}DWORD	halMemoryReadD ( PTM_HW pTMHW, DWORD dwAddress ){	BOOL	fSDRAM;	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	PTMSTD_MEMORY_BLOCK	pMMIO = &pTMHW->DSPCaps.MMIO;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	PTMMAN_MEMORY_BLOCK	pMMIO = &pTMHW->Config.MMIO;	#endif	halValidateAddress ( pTMHW, dwAddress, &fSDRAM );	if ( fSDRAM )	{		return *(PDWORD)((PBYTE)((dwAddress - pSDRAM->dwPhysical ) +			pSDRAM->dwLinear));			}	else	{		return *(PDWORD)((PBYTE)((dwAddress - pMMIO->dwPhysical ) +			pMMIO->dwLinear ));	}}VOID	halMemoryWriteB ( PTM_HW pTMHW, DWORD dwAddress, BYTE bValue ){	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	#endif	*((PBYTE)((dwAddress - pSDRAM->dwPhysical ) +		pSDRAM->dwLinear )) = bValue;}VOID	halMemoryWriteW ( PTM_HW pTMHW, DWORD dwAddress, WORD wValue ){	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	#endif	*(PWORD)((PBYTE)((dwAddress - pSDRAM->dwPhysical ) +		pSDRAM->dwLinear )) = wValue;}VOID	halMemoryWriteD ( PTM_HW pTMHW, DWORD dwAddress, DWORD dwValue ){	BOOL	fSDRAM;	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	PTMSTD_MEMORY_BLOCK	pMMIO = &pTMHW->DSPCaps.MMIO;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	PTMMAN_MEMORY_BLOCK	pMMIO = &pTMHW->Config.MMIO;	#endif	if ( halValidateAddress ( pTMHW, dwAddress, &fSDRAM ) != TRUE )		 return;	if ( fSDRAM )	{		*(PDWORD)((PBYTE)((dwAddress - pSDRAM->dwPhysical ) +			pSDRAM->dwLinear)) = dwValue;			}	else	{		*(PDWORD)((PBYTE)((dwAddress - pMMIO->dwPhysical ) +			pMMIO->dwLinear)) = dwValue;	}}BOOL	halSDRAMMemCopy ( PTM_HW pTMHW, PVOID pvSource, DWORD dwDestAddress,	DWORD dwLength ){	PDWORD	pdwDestination;	BOOL	fSDRAM;	#ifdef USE_TMMAN	PTMSTD_MEMORY_BLOCK	pSDRAM = &pTMHW->DSPCaps.SDRAM;	#else	PTMMAN_MEMORY_BLOCK	pSDRAM = &pTMHW->Config.SDRAM;	#endif		if ( halValidateAddress ( pTMHW, dwDestAddress, &fSDRAM ) != TRUE )		 return FALSE;	if ( !fSDRAM ) 		return FALSE;	pdwDestination =		(PDWORD)((PBYTE)((dwDestAddress - pSDRAM->dwPhysical ) +			pSDRAM->dwLinear));		memcpy ( pdwDestination, pvSource, dwLength );	}#ifndef USE_TMMANBOOL	halGetVersion ( PTM_HW pTMHW, PVOID pVersion ){	DWORD	dwBytesReturned;	if ( DeviceIoControl ( pTMHW->hDevice, DIOC_VXDVERSION,		(PVOID)NULL, 0 ,		(PVOID)pVersion, sizeof ( TMSTD_VERSION_INFO ),		&dwBytesReturned, NULL ) != TRUE )	{		return FALSE;	}	if ( dwBytesReturned  != sizeof ( TMSTD_VERSION_INFO ) )		return FALSE;			return TRUE;}BOOL	halExecutableStart ( PTM_HW pTMHW ){	DWORD	dwBytesReturned;	DWORD	dwStartAddress = pTMHW->Config.SDRAM.dwPhysical;	if ( DeviceIoControl ( pTMHW->hDevice, TMIF_DIOC_DSPEXECUTABLERUN,		(PVOID)&dwStartAddress, sizeof ( DWORD ),		(PVOID)NULL, 0 ,		&dwBytesReturned, NULL ) != TRUE )	{		return FALSE;	}	return TRUE;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -