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

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

?? tmmprun.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  copyright (c) 1997-2000 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.        |
 *   +-----------------------------------------------------------------+
 *
 *  Revision history:
 *	961026 CJP		Tested and basically working.
 *				More error checking and reporting added.
 *	970106 Tilakraj Roy	Added support for the TMCons in tmDSPRunExecutable.
 *				Commenetd the use of tmDSPRunExecutable.
 *	970114 Tilakraj Roy	Added command line processing of windows size.
 *	970128 Tilakraj Roy	Added tmDSPExecutableStop in exit function.
 *	970327 Tilakraj Roy	Revamped the entire code for proper error handling.
 *				Added the ExitEvent for proper cleanup.
 *	970630 Tilakraj Roy	Added multiprocessor support.
 *	970631 Tilakraj Roy	Added new cruntime support.
 *	970728 Tilakraj Roy	Fixed exit code error bug.
 *	991124 Rudy Wang	Up the max node to 256, added error checking for
 *				exceeding the max node.  Also cleaned up all the
 *				compiler warnings and reformatted the source.
 *
 *  Description:
 *
 *	This module is driver for the host part of the PC version of the
 *	Level 2 Remote Procedure Call Server.  An implementation of this
 *	is needed for each particular host of a TM-1 board which uses TCS's
 *	generic ANSI C library.
 *
 *	In its current form this module is intended to run as an independent
 *	executable that must be started from a PC command line.  Its first
 *	argument must be the name of a TM-1 executable which is to be downloaded,
 *	started, and which is passed all additional command line arguments.
 *	Between starting the executable and receiving its termination message,
 *	this module behaves as a server for the HostCall interface.
 */

#include <windows.h>
#include <stdio.h>
#include <winioctl.h>
#include "tmmanapi.h"
#include "tmcrt.h"
#include "tmif.h"
#include "TMDownLoader.h"

#define MAXIMUM_NODES			256
#define MAXIMUM_COMMAND_LINE_ARGS	100
#define DEFAULT_CLOCK_SPEED		100000000
#define tmmanDownloaderStatusToTMManStatus(x) \
		(((x) != TMDwnLdr_OK) ? ((x)+0x70) : statusSuccess)

DWORD		DSPCount		= 0;
DWORD		GlobalExitCode		= (~0x0);
BOOL		Interactive		= TRUE;
PCHAR		TargetExecutableName	= NULL;
DWORD		TargetArgumentOffset;
HANDLE		EventArray[MAXIMUM_NODES];
TCHAR		szTemp[2048];

extern HANDLE	tmmanGetDriverHandle(void);

/*
 * For details on TMDwnLdr functions, refer to the chapter
 * "TriMedia Downloader API" in the book "Software Library APIs"
 *
 * For details on tmman and cruntime functions, refer to the chapter
 * "TriMedia Manager API" in the book "Software Library APIs"
 */

void
WarningBox(TCHAR* ErrorString)
{
  MessageBox(NULL,
	     ErrorString,
	     TEXT("TriMedia Manager : tmmprun.exe : WARNING"),
	     MB_OK | MB_ICONWARNING | MB_DEFBUTTON1 | MB_APPLMODAL);
}

/*
 * control C handler
 */
BOOL WINAPI
tmrunControlHandler(DWORD dwCtrlType)
{
  DWORD i;

  fprintf(stderr, "\nTMMPRun:Control C Detected : Performing Cleanup\n");
  for (i = 0; i < DSPCount; i++) {
    SetEvent(EventArray[i]);
  }
  return TRUE;
}

/*
 * download the memory image to DSP
 */
TMStatus
tmDSPExecutableLoadEx(
  DWORD		DSPHandle,
  PCHAR		pszImagePath,
  DWORD		NumberOfDSPs,
  TMDwnLdr_SharedSectionTab_Handle SharedSections,
  PDWORD	MMIOPhysicalAddressArray)
{
  TMDwnLdr_Object_Handle ObjectHandle;
  tmmanDSPInternalInfo DSPInternalInfo;
  tmmanDSPInfo	DSPInfo;
  TMStatus	Status;
  tmifDSPLoad	TMIF;
  UInt32	ImageSize;
  UInt32	Alignment;
  DWORD		AlignedDownloadAddress;
  UInt32	dlStatus;
  Endian	endian;
  UInt32	BytesReturned;
  UInt32	TargetVersion;
  UInt32	HostType	= tmWinNTHost;
  UInt32	ClockSpeed	= DEFAULT_CLOCK_SPEED;
  UInt32	CacheOption	= TMDwnLdr_LeaveCachingToDownloader;  /* default cache option */
  UInt32	INIEndianess	= True;  /* little endian */
  HKEY		RegistryHandle;
  HKEY		RegistryHandleDevice;
  TCHAR		szDeviceName[0x10];

  /*
   * map SDRAM into the Operating System and Process virtual address space
   */
  Status = tmmanDSPMapSDRAM(DSPHandle);
  if (Status != statusSuccess) {
    OutputDebugString(TEXT("TMMPRun:tmmanDSPMapSDRAM:FAIL\n"));
    return Status;
  }

  tmmanDSPGetInfo(DSPHandle, &DSPInfo);
  tmmanDSPGetInternalInfo(DSPHandle, &DSPInternalInfo);

  if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,
				    constTMManRegistryPath,
				    0,
				    KEY_READ,
				    &RegistryHandle)) {
    ULONG BytesXfered = sizeof(ULONG);
    if (ERROR_SUCCESS != RegQueryValueEx(RegistryHandle,
					 TEXT("DefaultEndianness"),
					 NULL,
					 NULL,
					 (BYTE*)&INIEndianess,
					 &BytesXfered)) {
      INIEndianess = True;
    }
    wsprintf(szDeviceName, TEXT("Device%x"), DSPInfo.DSPNumber);
    if (ERROR_SUCCESS == RegOpenKeyEx(RegistryHandle,
				      szDeviceName,
				      0,
				      KEY_READ,
				      &RegistryHandleDevice)) {
      BytesXfered = sizeof(ULONG);
      if (ERROR_SUCCESS != RegQueryValueEx(RegistryHandleDevice,
					   TEXT("ClockSpeed"),
					   NULL,
					   NULL,
					   (BYTE*)&ClockSpeed,
					   &BytesXfered)) {
	ClockSpeed = DEFAULT_CLOCK_SPEED;
      }
      BytesXfered = sizeof(ULONG);
      if (ERROR_SUCCESS != RegQueryValueEx(RegistryHandleDevice,
					   TEXT("CacheOption"),
					   NULL,
					   NULL,
					   (BYTE*)&CacheOption,
					   &BytesXfered)) {
	CacheOption = TMDwnLdr_LeaveCachingToDownloader;
      }
      RegCloseKey(RegistryHandleDevice);
    }
    RegCloseKey(RegistryHandle);
  }

  /*
   * read the executable from file into memory, and use
   * the handle returned for subsequent operations
   */
  dlStatus = TMDwnLdr_load_object_from_file(pszImagePath,
					    SharedSections,
					    &ObjectHandle);
  if (dlStatus != TMDwnLdr_OK) {
    Status = tmmanDownloaderStatusToTMManStatus(dlStatus);
    goto tmDSPExecutableLoadExit2;
  }

  /*
   * BEGIN symbol patching
   */
  dlStatus = TMDwnLdr_resolve_symbol(ObjectHandle,
				     "_TMManShared",
				     DSPInternalInfo.TMManSharedPhysicalAddress);
  if (dlStatus != TMDwnLdr_OK) {
    OutputDebugString(TMDwnLdr_get_last_error(dlStatus));
    HostType = tmNoHost;
    WarningBox(TEXT("Target Executable has not been linked with "
		    "[-host WinNT] or [-host Windows]\n"));
  }

  /*
   * get the extracted image size, and its required alignment in SDRAM
   */
  dlStatus = TMDwnLdr_get_image_size(ObjectHandle, &ImageSize, &Alignment);

  if (dlStatus != TMDwnLdr_OK) {
    Status = tmmanDownloaderStatusToTMManStatus(dlStatus);
    OutputDebugString(TMDwnLdr_get_last_error(dlStatus));
  }
  else {
    AlignedDownloadAddress = ((DSPInfo.SDRAM.PhysicalAddress + Alignment - 1) &
			      (~(Alignment - 1)));
    /*
     * relocate the loaded executable into a specified TM1 address range,
     * with specified values for MMIO_base and TM1_frequency.
     */
    dlStatus = TMDwnLdr_multiproc_relocate(ObjectHandle,
					   HostType,
					   (Address*)MMIOPhysicalAddressArray,
					   DSPInfo.DSPNumber,
					   NumberOfDSPs,
					   ClockSpeed,
					   (Address)AlignedDownloadAddress,
					   DSPInfo.SDRAM.Size,
					   CacheOption);
    if (dlStatus != TMDwnLdr_OK) {
      OutputDebugString(TMDwnLdr_get_last_error(dlStatus));
      Status = tmmanDownloaderStatusToTMManStatus(dlStatus);
      goto tmDSPExecutableLoadExit3;
    }
    /*
     * Get the endianness of the specified loaded object
     */
    dlStatus = TMDwnLdr_get_endian(ObjectHandle, &endian);
    if (dlStatus != TMDwnLdr_OK) {
      OutputDebugString(TMDwnLdr_get_last_error(dlStatus));
      Status = tmmanDownloaderStatusToTMManStatus(dlStatus);
      goto tmDSPExecutableLoadExit3;
    }
    if ((Endian)INIEndianess != endian) {
      Status = statusExecutableFileWrongEndianness;
      goto tmDSPExecutableLoadExit3;
    }

    TMIF.DSPHandle = DSPHandle;
    TMIF.Endianess = ((endian == LittleEndian) ?
		      constTMManEndianessLittle :
		      constTMManEndianessBig);

    dlStatus = TMDwnLdr_get_contents(ObjectHandle,
				     "__TMMan_Version",
				     &TargetVersion);
    if (dlStatus != TMDwnLdr_OK) {
      TMIF.PeerMajorVersion = constTMManDefaultVersionMajor;
      TMIF.PeerMinorVersion = constTMManDefaultVersionMinor;
    }
    else {
      /*
       * major version = __TMMan_Version[31:16]
       * minor version = __TMMan_Version[15:0]
       */
      TMIF.PeerMajorVersion = ((TargetVersion  & 0xffff0000) >> 16);
      TMIF.PeerMinorVersion = TargetVersion & (0x0000ffff);

      if ((TMIF.PeerMajorVersion != constTMManDefaultVersionMajor) ||
	  (TMIF.PeerMinorVersion != constTMManDefaultVersionMinor)) {
	wsprintf(szTemp,
		 TEXT("Target Executable Version [%d.%d] is INCOMPATIBLE "
		      "with TriMedia Driver Version [%d.%d]\n"),
		 TMIF.PeerMajorVersion,
		 TMIF.PeerMinorVersion,
		 constTMManDefaultVersionMajor,
		 constTMManDefaultVersionMinor);

	switch ((MessageBox(NULL,
			    szTemp,
			    TEXT("TriMedia Manager : TMMPRun.exe : Continue ? "),
			    MB_OKCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1 | MB_APPLMODAL))) {
	case IDOK:
	  break;
	case IDCANCEL:
	default:
	  Status = ((TMIF.PeerMajorVersion != constTMManDefaultVersionMajor) ?
		    statusMajorVersionError :
		    statusMinorVersionError);
	  goto tmDSPExecutableLoadExit3;
	}
      }
    }

    /*
     * call to kernel mode driver
     */
    if (DeviceIoControl(tmmanGetDriverHandle(),
			constIOCTLtmmanDSPLoad,
			(PVOID)&TMIF, sizeof(tmifDSPLoad),
			(PVOID)&TMIF, sizeof(tmifDSPLoad),
			&BytesReturned, NULL) != TRUE) {
      Status = TMIF.Status;
    }
    else {
      dlStatus = TMDwnLdr_get_memory_image(ObjectHandle,
					   (UInt8*)tmmanPhysicalToMapped(&DSPInfo.SDRAM,
									 AlignedDownloadAddress));
      if (dlStatus != TMDwnLdr_OK) {
	OutputDebugString(TMDwnLdr_get_last_error(dlStatus));
	Status = tmmanDownloaderStatusToTMManStatus(dlStatus);
      }
    }
  }

tmDSPExecutableLoadExit3:
  TMDwnLdr_unload_object(ObjectHandle);

tmDSPExecutableLoadExit2:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久国产精品韩国三级视频| eeuss国产一区二区三区| 国产成人午夜高潮毛片| 欧美视频在线一区二区三区| 国产片一区二区| 国产在线精品一区二区夜色| 色综合久久综合网欧美综合网| 日韩精品一区二区三区四区| 亚洲精品视频免费观看| 国产成人免费高清| 欧美变态口味重另类| 亚洲一区二区欧美日韩| 99精品国产热久久91蜜凸| 欧美大片在线观看一区二区| 日韩精品视频网| 欧美亚洲一区三区| 亚洲欧美色一区| 高清不卡一二三区| 久久久不卡网国产精品二区| 日韩中文字幕不卡| 欧美日韩第一区日日骚| 亚洲综合一二三区| 色偷偷久久一区二区三区| 国产精品电影院| 成人一区二区三区中文字幕| 久久久久国产精品麻豆ai换脸| 免费高清在线视频一区·| 欧美日韩激情在线| 亚洲1区2区3区4区| 91精品国产综合久久婷婷香蕉 | 午夜私人影院久久久久| 91在线观看地址| 亚洲日本免费电影| 99久久综合国产精品| 亚洲人精品一区| 91久久久免费一区二区| 一区二区三区国产豹纹内裤在线| 欧美人与z0zoxxxx视频| 日韩成人免费在线| 日韩美一区二区三区| 老色鬼精品视频在线观看播放| 精品日韩在线观看| 国产精品自产自拍| 综合色天天鬼久久鬼色| 欧美在线一二三| 美女视频网站久久| 久久久久久久久久久久久久久99 | 国产一区 二区| 国产精品区一区二区三| 一本一本久久a久久精品综合麻豆| 亚洲激情图片小说视频| 欧美精品久久一区| 国产伦精品一区二区三区免费迷 | 91一区在线观看| 亚洲午夜视频在线观看| 91精品国产91热久久久做人人 | 久久久噜噜噜久久中文字幕色伊伊| 国产麻豆9l精品三级站| 亚洲日穴在线视频| 7799精品视频| 国产成人av资源| 亚洲成av人片一区二区三区| 精品国产人成亚洲区| 99精品国产91久久久久久| 亚洲第一电影网| 久久久影视传媒| 色呦呦网站一区| 日本美女一区二区| 综合中文字幕亚洲| 精品噜噜噜噜久久久久久久久试看| 成人综合日日夜夜| 轻轻草成人在线| 成人欧美一区二区三区黑人麻豆| 最好看的中文字幕久久| 日韩一卡二卡三卡| 成人精品高清在线| 美洲天堂一区二卡三卡四卡视频| 国产精品沙发午睡系列990531| 欧美日韩成人综合天天影院| 粉嫩久久99精品久久久久久夜| 天天综合日日夜夜精品| 国产精品―色哟哟| 久久午夜羞羞影院免费观看| 欧美视频中文字幕| 99国产精品久久久久久久久久久 | 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久机这里只有精品| 亚洲黄网站在线观看| 国产丝袜欧美中文另类| 日韩欧美亚洲国产另类| 在线观看www91| av在线播放不卡| 国产福利一区二区| 日韩高清不卡一区二区三区| 亚洲精品乱码久久久久久| 国产精品入口麻豆原神| 久久精品无码一区二区三区| 91精品国产综合久久久久久久久久 | 国产xxx精品视频大全| 日本在线播放一区二区三区| 亚洲精品视频观看| 国产精品国产成人国产三级| 久久久精品免费免费| 日韩免费电影一区| 欧美成人猛片aaaaaaa| 欧美日韩精品电影| 91麻豆精品国产91久久久久久| 在线视频亚洲一区| 日本高清不卡在线观看| 一本大道久久a久久精二百 | 制服丝袜日韩国产| 欧美日韩高清不卡| 在线电影一区二区三区| 欧美日韩一级大片网址| 欧美丝袜丝交足nylons| 欧美三级中文字| 欧美绝品在线观看成人午夜影视| 欧美日韩日日骚| 欧美丰满嫩嫩电影| 日韩午夜三级在线| 亚洲精品一线二线三线无人区| 精品欧美黑人一区二区三区| 久久久久亚洲综合| 国产精品国产精品国产专区不片| 亚洲欧洲日韩av| 亚洲激情av在线| 日韩精品每日更新| 精品亚洲免费视频| 国产成人av影院| 在线免费不卡电影| 51久久夜色精品国产麻豆| 91精品国产一区二区三区香蕉| 日韩欧美一级特黄在线播放| 久久久久久久久久久99999| 国产女人18毛片水真多成人如厕| 中文字幕日本不卡| 亚洲五码中文字幕| 久久精品国产99久久6| 国产高清不卡一区二区| 91在线播放网址| 日韩欧美一区在线| 中文字幕av免费专区久久| 亚洲精品写真福利| 麻豆91精品视频| 99re这里只有精品视频首页| 欧美亚洲动漫制服丝袜| 91麻豆精品国产91久久久久久久久| 久久久久久久综合狠狠综合| 亚洲欧洲制服丝袜| 精品在线亚洲视频| 一本色道a无线码一区v| 日韩一二三区视频| 亚洲少妇30p| 另类的小说在线视频另类成人小视频在线 | 色综合久久综合网97色综合| 日韩一级免费一区| 国产精品麻豆网站| 天天亚洲美女在线视频| 懂色av一区二区在线播放| 欧美日韩一区三区| 国产精品久久久久久久久久免费看 | 欧美一区二区性放荡片| 亚洲视频狠狠干| 黑人巨大精品欧美黑白配亚洲| 欧美专区在线观看一区| 国产片一区二区三区| 久久狠狠亚洲综合| 欧美精品久久久久久久久老牛影院| 国产精品久久久久毛片软件| 麻豆91精品视频| 91精品国产综合久久久久久久| 一区二区三区中文字幕电影| 成人蜜臀av电影| 久久精品男人天堂av| 日韩成人免费在线| 欧美裸体一区二区三区| 亚洲色图另类专区| 国产成人av一区二区三区在线| 精品久久国产老人久久综合| 污片在线观看一区二区| 欧美伊人久久久久久午夜久久久久| 中文字幕一区三区| 成人av免费在线观看| 国产香蕉久久精品综合网| 激情综合网av| 精品卡一卡二卡三卡四在线| 日韩在线观看一区二区| 欧美日韩精品一区二区| 亚洲午夜免费电影| 欧美在线观看视频在线| 夜夜夜精品看看| 精品视频一区二区三区免费| 一区二区三区电影在线播| 99国产精品久久久久| ㊣最新国产の精品bt伙计久久| av电影在线观看不卡| 中文字幕一区二区三区视频| www.亚洲色图| 亚洲精品精品亚洲| 日本韩国欧美在线|