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

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

?? tm1stuff.c

?? PNX系列設備驅(qū)動 PNX系列設備驅(qū)動
?? C
?? 第 1 頁 / 共 3 頁
字號:
	IOTable.granularity = 0;
	IOTable.firstPrepared = 0;
	IOTable.lengthPrepared = 0;
	IOTable.mappingEntryCount = 2;
	IOTable.logicalMapping = logical_mapping;
	IOTable.physicalMapping = physical_mapping;
	IOTable.rangeInfo.range.base = (LogicalAddress)*pp_lin_mem;
	IOTable.rangeInfo.range.length = nbytes;

	err  = PrepareMemoryForIO(&IOTable);
	if (err)
	{
      printf("AllocateSharedHostMemory: PrepareMemoryForIO failed\n");
	  return false;
	}
	
    for (i = 0; i < SH_MEM_SLOTS; i++)  
    {
      if (ShMemList[i].ptr == NULL) 
      {
	    ShMemList[i].id = IOTable.preparationID;
	    ShMemList[i].ptr = *pp_lin_mem;
        break;
      }
    }
    if (i == SH_MEM_SLOTS) 
    {
      printf("AllocateSharedHostMemory: shared memory pointer list is full\n");
      return false;
    }

	*pl_ph_mem = (unsigned long)*physical_mapping;	
    
    return true;
}

/* COPIED FULLY FROM APPLE :-) */

void
InitEmber(RegEntryID theEntryID)
{
	OSErr		theErr;
	UInt16		data16;
	UInt32		addr;
	UInt32		*ember_base;
	UInt32		*foo;
	
	// first thing to do is to make sure that memory access is enabled
	// this is the PCI command register
	addr = 0x4;
	theErr = ExpMgrConfigReadWord(&theEntryID, (LogicalAddress)addr, &data16);
	// set the memory space access enable
	data16 |= 1<<1;		
	theErr = ExpMgrConfigWriteWord(&theEntryID, (LogicalAddress)addr, (UInt16)data16);
	
	theErr = GetBaseAddress( &theEntryID, (UInt32*)&ember_base, CONFIG_BASE0_ADDRESS, nil );
	foo = ember_base;
	foo += 0x20000 >> 2;
	*foo = 0x00004006;				// Send data out D1 and onto DAV

	theErr = ExpMgrConfigWriteWord(&theEntryID, (LogicalAddress)addr, 0x14);
}

void FindTMs()
{
  	const unsigned char philips[] = {0,0,17,49};
  	const unsigned char trimedia[] = {0,0,84,0};
  	
	RegEntryID rid;
	RegEntryIter cookie;
  	Boolean done, is_tm1;
  	OSStatus err = noErr;
   	int j;
 	void* ptr;
  	unsigned long sz;
  	
   	char buf [16]; 
 	char *vendor, *device, *slot, *name;
  	unsigned long frequency, mmio_base, sdram_base, sdram_size;

	if(GetTMPreference("frequency", buf)) 
	{
	  frequency =  (unsigned long) strtoul(buf, NULL, 10);
	} 
	else 
	{
	  printf("** Warning: Could not read TM1 frequency from preference file, assuming 80Mhz\n");
	  frequency = 80*1000*1000;
	}
   

	NumberOfTMs = 0;

	RegistryEntryIDInit(& rid);

	RegistryEntryIterateCreate(& cookie);

	while (1) 
	{
	  is_tm1 = true;
	  
	  /* take next entry from the name registry, quit loop if there is none*/
	  err = RegistryEntryIterate(&cookie, kRegIterContinue, &rid, &done);
	  if (done) 
	  {
	    break;
	  }  
	  
	  GetDeviceProperty(&rid, "name", &ptr, & sz);
	  name = (char*)ptr;
	  
	  /* check whether this is an 'Ember' (?) and initialise it */
	  if(strcmp(name, "pci10ee,4031")==0 || strcmp(name, "pci106b,16")==0) 
	  {
#ifdef DEBUG
	    printf("\t[Found an \"Ember\" (%s) ... initializing it.]\n", name);
#endif
	    InitEmber(rid);
	  }	
	  
	  /* check the vendor-id, and quit loop if it is not philips */
	  GetDeviceProperty(&rid, "vendor-id", &ptr, & sz); 
	  vendor = (char*) ptr;
	  for (j =0; j< sz && j < 32; j++) 
	  {
	    if (vendor[j] != philips[j]) 
	    {
	      is_tm1 = false;
	    }
	  }
	  if (!is_tm1) 
	  {
	    continue;
	  }

	  /* check the device-id, and quit loop if it is not TriMedia */
	  GetDeviceProperty(&rid, "device-id", &ptr, & sz); 
	  device = (char*) ptr;
	  for (j =0; j< sz; j++) 
	  {
	    if (device[j] != trimedia[j]) 
	    { 
	      is_tm1 = false;
	    }
	  }
	  if (!is_tm1) 
	  {
	    continue;
	  }

	  /* if the array is full give a warning, and continue search */
	  if (NumberOfTMs >= MAX_TM) 
	  {
	    printf("Warning: Cannot store info on %s\n", name);
	    continue;
	  }
	  
	  /* get mmio and sdram locations */
	  GetBaseAddress( &rid, &mmio_base, CONFIG_BASE1_ADDRESS, nil );
	  GetBaseAddress( &rid, &sdram_base, CONFIG_BASE0_ADDRESS, &sdram_size );
	  GetRevisionID( &rid, &TMInfo[NumberOfTMs].revision_id);

	  /* get slot name */
	  err = GetDeviceProperty(&rid, "AAPL,slot-name", &ptr, & sz);
	  if (err == noErr) 
	  {
	    slot = (char*)ptr;	
	  } 
	  else 
	  {
	    continue;
	  }
	    
      /* save the gathered info in the array */
      TMInfo[NumberOfTMs].NodeID     = rid;
      strncpy(TMInfo[NumberOfTMs].node_name, name, 16) ;
      strncpy(TMInfo[NumberOfTMs].slot, slot, 4) ;
      TMInfo[NumberOfTMs].sdram_base  = sdram_base;
      TMInfo[NumberOfTMs].sdram_size  = sdram_size;
      TMInfo[NumberOfTMs].mmio_base   = mmio_base;      
      TMInfo[NumberOfTMs].frequency   = frequency;      
     // TMInfo[NumberOfTMs].initialized = false;      
	  _MMIO_bases[NumberOfTMs] = (volatile unsigned long *) mmio_base;
      
      NumberOfTMs++;
  	}
    
  	RegistryEntryIterateDispose(& cookie);
  	RegistryEntryIDDispose(&rid); 
  
  	if (NumberOfTMs == 0) 
  	{
  	  return ;
  	}
  	if ( AllocateSharedHostMemory(32, &_HostCall_commvar, &HostCall_commvar_target) )
    {
#ifdef DEBUG
    printf("_HostCall_commvar: 0x%x\n", _HostCall_commvar);
    printf("HostCall_commvar_target: 0x%x\n", HostCall_commvar_target);
#endif    
  	} 
  	else 
  	{
      NumberOfTMs = -1;
    }
}

Boolean FreeSharedHostMemory(void* shm_ptr) 
{
    int i;
    
	if (shm_ptr) 
	{
      for (i = 0; i < SH_MEM_SLOTS; i++)  
      {
    	if (ShMemList[i].ptr == shm_ptr) 
    	{
		  CheckpointIO(ShMemList[i].id, kNilOptions);
		  MemDeallocatePhysicallyContiguous(ShMemList[i].ptr);
	      ShMemList[i].ptr = NULL;
		  return true;
        }
      }
	}
	
	printf("TM1Quit: invalid pointer");
    return false;
}


//===================================================================

Boolean 
LoadTM(UInt number_of_nodes, Int32 node, char *filename,
   TMDwnLdr_SharedSectionTab_Handle shared_sections, int argc, char *argv[])
{
	TMDwnLdr_Object_Handle handle;
	TMDwnLdr_Status status;
	UInt32      sdram_base;
	UInt32      mmio_base;
	UInt32      sdram_len;
	UInt32      TM_freq;
	int         exit;

	TMInfo[node].TM_running = false;
	TM_freq = TMInfo[node].frequency;
	sdram_base = MMIO_M(node, DRAM_BASE);
	mmio_base = MMIO_M(node, MMIO_BASE);

	sdram_len = MMIO_M(node, DRAM_LIMIT) - MMIO_M(node, DRAM_BASE);

#ifdef DEBUG
	printf("\n****\nnumber of nodes: %d\n", number_of_nodes);
	printf("node: %d\n", node);
	printf("filename: %s\n", filename);
	printf("argc: %d\nargv: ", argc);
	for (i = 0; i < argc; i++)
		printf("%s ", argv[i]);
	printf("\n");
	printf("_HostCall_commvar: 0x%x\n", _HostCall_commvar);
	printf("HostCall_commvar_target: 0x%x\n", HostCall_commvar_target);
	printf("_MMIO_bases[%d]: 0x%x\n", node, _MMIO_bases[node]);
	printf("sdram_base: 0x%x\n", sdram_base);
	printf("mmio_base: 0x%x\n", mmio_base);
	printf("sdram_len: 0x%x\n", sdram_len);
	printf("TM_freq: %d\n", TM_freq);
#endif

	MMIO_M(node, BIU_CTL) |= SET_RST_MASK;
	MMIO_M(node, BIU_CTL) &= ~SET_RST_MASK;

	status = TMDwnLdr_load_object_from_file(filename, shared_sections, &handle);
	if (status != TMDwnLdr_OK) {
		printf("** File '%s' could not be read as an executable\n", filename);
		printf("   [%s]\n", TMDwnLdr_get_last_error(status));
		return (false);
	}

	status = TMDwnLdr_resolve_symbol(handle, "__HostCall_commvar_init", (UInt) HostCall_commvar_target);
	if (status != TMDwnLdr_OK) 
	{
		printf("** Warning: Could not resolve '_HostCall_commvar_init' symbol in file %s\n", filename);
		printf("**          No host communication will be available.\n");		
		printf("**          To stop program execution after 'g[o]' command enter Command-Period.\n");		
#if 0
		printf("** Could not resolve symbol in file %s\n", filename);
		printf("   [%s]\n", TMDwnLdr_get_last_error(status));
		TMDwnLdr_unload_object(handle);
		return (false);
#endif
	}

	status = TMDwnLdr_multiproc_relocate(handle, tmMacOSHost, (Address *) _MMIO_bases,
					     (UInt) node,
					     number_of_nodes,	/* Number of
								 * executables. */
					     (UInt) TM_freq,
					     (Address) sdram_base,
					     (UInt) sdram_len,
					 TMDwnLdr_LeaveCachingToDownloader);

	if (status != TMDwnLdr_OK) {
		printf("** Could not multiproc relocate in file %s\n", filename);
		printf("   [%s]\n", TMDwnLdr_get_last_error(status));
		TMDwnLdr_unload_object(handle);
		return (false);
	}

	status = TMDwnLdr_get_memory_image(handle, (Address) MMIO_M(node, DRAM_BASE));
	if (status != TMDwnLdr_OK) {
		printf("** Could not get memory image in file %s\n", filename);
		printf("   [%s]\n", TMDwnLdr_get_last_error(status));
		TMDwnLdr_unload_object(handle);
		return (false);
	}
        TMDwnLdr_get_endian(handle,&object_endian);
	TMDwnLdr_unload_object(handle);

	if (node == 0) {
		TM1IF_init(
			   (RPCServ_OpenFunc) open,
			   (RPCServ_OpenDllFunc) my_open_dll,
			   (RPCServ_CloseFunc) close,
			   (RPCServ_ReadFunc) my_read,
			   (RPCServ_WriteFunc) my_write,
			   (RPCServ_SeekFunc) lseek,
			   (RPCServ_IsattyFunc) isatty,
			   (RPCServ_FstatFunc) my_fstat,
			   (RPCServ_FcntlFunc) fcntl,
			   (RPCServ_StatFunc) my_stat,
			   (RPCServ_ExitFunc) exitf,
			   object_endian);
	}

	/* 
		Open any files to be redirected. Delete any existing stdout or stderr files
		of the same name.
	*/

	if (stdin_fd != STDIN_HANDLE) 
		close (stdin_fd);
	stdin_fd = STDIN_HANDLE;
	if (stdin_file[0])
	{
		stdin_fd = open(stdin_file, O_RDONLY);
		if (stdin_fd < 0)
		{
			printf("** Cannot not open redirected stdin file '%s'\n", stdin_file);
			stdin_fd = STDIN_HANDLE;
		}	
	}

	if (stdout_fd != STDOUT_HANDLE) 
		close (stdout_fd);
	stdout_fd = STDOUT_HANDLE;
	if (stdout_file[0])
	{
		remove(stdout_file);
		stdout_fd = open(stdout_file, O_CREAT);
		if (stdout_fd < 0)
		{
			printf("** Cannot not open redirected stdout file '%s'\n", stdout_file);
			stdout_fd = STDOUT_HANDLE;
		}	
	}

	if (stderr_fd != STDERR_HANDLE) 
		close (stderr_fd);
	stderr_fd = STDERR_HANDLE;	
	if (stderr_file[0])
	{
		remove(stderr_file);
		stderr_fd = open(stderr_file, O_CREAT);
		if (stderr_fd < 0)
		{
			printf("** Cannot not open redirected stderr file '%s'\n", stderr_file);
			stderr_fd = STDERR_HANDLE;
		}	
	}
	
	TM1IF_add_node_info(node, argc, argv, 
                       stdin_fd, stdout_fd, stderr_fd, 0,
                       MMIO_M(node, DRAM_BASE), MMIO_M(node, DRAM_LIMIT),
                       Null
                      );

	return (true);
}


//===================================================================

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九一九一国产精品| 久久成人精品无人区| 精品国产乱码久久久久久免费 | 一区二区视频在线| 欧洲精品视频在线观看| 高清不卡一区二区| 国产在线精品免费| 卡一卡二国产精品| 欧美性猛片aaaaaaa做受| 欧美日韩黄视频| 91精品国产综合久久久蜜臀图片| 欧美在线观看禁18| 国产农村妇女精品| 最新国产成人在线观看| 国产精品久久看| 一区二区三区中文字幕电影 | 色婷婷狠狠综合| 91网站在线播放| 97久久精品人人做人人爽50路 | 国产精品一区二区免费不卡| 狠狠狠色丁香婷婷综合久久五月| 国内精品久久久久影院薰衣草| 欧美性猛交xxxxxx富婆| 国产精品久久国产精麻豆99网站| 精品一区二区三区久久久| 91精品国产欧美一区二区18| 日韩免费高清视频| 国产人成亚洲第一网站在线播放| 欧美aaaaa成人免费观看视频| 免费成人av在线| 欧美精品一卡二卡| 国产精品卡一卡二| www.视频一区| 9191久久久久久久久久久| 亚洲成人久久影院| 国产二区国产一区在线观看| 欧亚洲嫩模精品一区三区| ●精品国产综合乱码久久久久| 亚洲va国产va欧美va观看| 欧美色大人视频| 国产精品乱码一区二区三区软件 | 日本在线不卡视频| 91在线视频播放地址| 自拍视频在线观看一区二区| 99精品视频免费在线观看| 国产精品免费网站在线观看| 成人激情电影免费在线观看| 欧美一区二区三区在线| 裸体一区二区三区| 在线精品视频小说1| 亚洲国产精品视频| 99久久99久久精品国产片果冻| 国产精品久久777777| 91视频com| 五月天亚洲婷婷| 一本一道久久a久久精品| 亚洲国产日韩综合久久精品| 91精品国产色综合久久不卡蜜臀| 久久不见久久见中文字幕免费| 国产日韩v精品一区二区| 99久久精品国产精品久久| 亚洲一区二区在线观看视频 | 色婷婷综合中文久久一本| 亚洲婷婷国产精品电影人久久| 欧美性色综合网| 久久99精品国产.久久久久| 中文字幕不卡在线观看| 久久国产精品99久久人人澡| 欧美精彩视频一区二区三区| 欧美性生交片4| 国产做a爰片久久毛片| 一区二区三区中文字幕精品精品| 欧美一区三区二区| 97精品国产97久久久久久久久久久久| 亚洲国产视频一区| 国产亚洲精品福利| 国产成人综合视频| 亚洲一区在线观看网站| 久久久亚洲高清| 国产精品1区二区.| 午夜国产精品一区| 久久精品视频在线看| 欧美日韩一区二区在线观看 | 久久av老司机精品网站导航| 国产精品久久免费看| 日韩三级视频中文字幕| 日本欧美大码aⅴ在线播放| 国产精品免费人成网站| 日韩精品中文字幕一区| 欧美影视一区在线| 成人黄色在线网站| 裸体一区二区三区| 亚洲一区二区五区| 中文字幕在线不卡视频| 欧美xxxxx裸体时装秀| 东方aⅴ免费观看久久av| 美女视频网站久久| 亚洲国产精品视频| 一区二区三区在线观看欧美| 国产欧美一区二区精品秋霞影院| 欧美一区二区三区在线看| 欧美无砖专区一中文字| 99久久精品99国产精品| 高清在线成人网| 国产一区二区三区最好精华液| 天堂在线亚洲视频| 久久久91精品国产一区二区精品 | 男女性色大片免费观看一区二区 | 亚洲欧洲精品一区二区精品久久久| 欧美一区二视频| 91精品婷婷国产综合久久性色| 91黄色免费看| 蜜臀av一级做a爰片久久| 亚洲成人资源在线| 亚洲资源在线观看| 亚洲高清视频在线| 午夜欧美电影在线观看| 亚洲国产cao| 日韩和欧美的一区| 老色鬼精品视频在线观看播放| 日本午夜精品一区二区三区电影| 日韩国产欧美在线播放| 日韩二区在线观看| 麻豆成人在线观看| 国产美女在线精品| 成人激情黄色小说| 在线看不卡av| 欧美一区二区播放| 久久久一区二区| 国产精品区一区二区三区| 国产精品麻豆一区二区| 一区二区三区视频在线看| 亚洲精品视频自拍| 午夜精品aaa| 久草中文综合在线| 成人动漫av在线| 欧美日韩中字一区| 欧美成人r级一区二区三区| 久久久亚洲综合| 亚洲美腿欧美偷拍| 久久综合给合久久狠狠狠97色69| 日本黄色一区二区| 欧美精品丝袜久久久中文字幕| 欧美一区永久视频免费观看| 久久精品一区蜜桃臀影院| 1000精品久久久久久久久| 午夜国产不卡在线观看视频| 国产在线观看一区二区| 99re热这里只有精品免费视频| 欧美性大战久久久久久久| 日韩欧美一区二区不卡| 欧美国产精品中文字幕| 亚洲第四色夜色| 国产精品一区久久久久| 91福利资源站| 亚洲精品在线观看视频| 亚洲男人的天堂网| 黄色日韩三级电影| 色综合久久久久综合99| 欧美sm美女调教| 亚洲黄网站在线观看| 黑人巨大精品欧美黑白配亚洲| 99久久久久免费精品国产| 精品欧美一区二区久久| 亚洲一线二线三线视频| 国产很黄免费观看久久| 欧美一区二区视频在线观看2020| 国产精品―色哟哟| 久久精品国产一区二区三区免费看| av在线综合网| 精品国产伦一区二区三区观看体验 | 一区二区免费在线| 国产一区免费电影| 制服.丝袜.亚洲.另类.中文| 国产精品国产三级国产普通话三级| 日本不卡的三区四区五区| 在线影视一区二区三区| 国产日韩欧美一区二区三区综合| 日韩高清在线电影| 欧美日韩综合一区| 亚洲蜜臀av乱码久久精品| 成人在线一区二区三区| 91啪九色porn原创视频在线观看| 欧美大片国产精品| 日韩av在线免费观看不卡| 91麻豆精品秘密| 国产精品久久久久久久久晋中| 狠狠色综合播放一区二区| 欧美一区二区三区免费观看视频| 亚洲乱码中文字幕| 色综合久久久久久久| 国产精品情趣视频| 国产大片一区二区| 精品少妇一区二区三区免费观看| 视频精品一区二区| 91精品欧美一区二区三区综合在 | 日本高清无吗v一区| 中文字幕在线一区| 丁香婷婷综合激情五月色| 国产欧美日韩精品一区|