📄 pcihal.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 + -