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

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

?? bus.c

?? skyeye_1_2_2_Rel.rar 最新skyeye源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * ---------------------------------------------------------------- * * Memory and IO-Memory Access for 32 Bit bus with * IO-Handler registration and Translation Tables from Targets Physical * address (TPA) to hosts virtual Address (HVA) * * (C) 2004  Lightmaze Solutions AG *   Author: Jochen Karrer * *  Status: *	working  * *  This program is free software; you can distribute it and/or modify it *  under the terms of the GNU General Public License (Version 2) as *  published by the Free Software Foundation. * *  This program is distributed in the hope it will be useful, but WITHOUT *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *  for more details. * *  You should have received a copy of the GNU General Public License along *  with this program; if not, write to the Free Software Foundation, Inc., *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * * ---------------------------------------------------------------- */#include <stdint.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <bus.h>extern char * ppc_memory;Bus *MainBus;/* * ------------------------------------ * Hash for single IO-Ports * ------------------------------------ */IOHandler **iohandlerHash;/* * ------------------------------------ * Map for large IO-Windows  * ------------------------------------ */IOHandler **iohandlerMap;/* * ------------------------------------ * Two level Map for small IO-Windows  * ------------------------------------ */IOHandler ***iohandlerFlvlMap;static unsigned int ioh_flvl_use_count[IOH_FLVL_SZ]={0,};/* * ------------------------------------------- * One level memory translation table vars  * ------------------------------------------- */uint8_t **mem_map_read;uint8_t **mem_map_write;/*  * ----------------------------------------- * Two level memory translation table vars  * ----------------------------------------- */TwoLevelMMap twoLevelMMap;InvalidateCallback *InvalidateProc;static inline uint8_t *twolevel_translate_r(uint32_t addr) {	int index;	uint8_t *base;	uint8_t **slvl_map;	index = addr >> twoLevelMMap.frst_lvl_shift; 	if(unlikely(!(slvl_map = twoLevelMMap.flvlmap_read[index]))) {		return NULL;	}	index = (addr & twoLevelMMap.scnd_lvl_mask) >> twoLevelMMap.scnd_lvl_shift;	base = slvl_map[index];	if(likely(base)) {		return base+(addr&(twoLevelMMap.scnd_lvl_blockmask));	} else {		return NULL;	}}static inline uint8_t *twolevel_translate_w(uint32_t addr) {	int index;	uint8_t *base;	uint8_t **slvl_map;	index = addr >> twoLevelMMap.frst_lvl_shift; 	if(unlikely(!(slvl_map = twoLevelMMap.flvlmap_write[index]))) {		return NULL;	}	index = (addr & twoLevelMMap.scnd_lvl_mask) >> twoLevelMMap.scnd_lvl_shift;	base = slvl_map[index];	if(likely(base)) {		if(unlikely(((unsigned long)base) & PG_TRACED)) {			base -= PG_TRACED;			slvl_map[index] = base;			IO_Write8(0,addr); 		}		return base +(addr & (twoLevelMMap.scnd_lvl_blockmask));	} else {		return NULL;	}}/* * ----------------------------------------------- * Bus Read *	Read from Memory or call an MMIO handler * ----------------------------------------------- */uint64_tBus_Read64(uint32_t addr) {        uint32_t index=(addr>>MEM_MAP_SHIFT);        uint8_t *base=mem_map_read[index];        if(likely(base)) {		return HMemRead64(base+(addr&(MEM_MAP_BLOCKMASK)));        } else {		uint8_t *taddr = twolevel_translate_r(addr);		if(taddr) {			return HMemRead64(taddr);		}		return IO_Read64(addr);        }}uint32_tBus_Read32(uint32_t addr) {	/*        uint32_t index = (addr >> MEM_MAP_SHIFT);        uint8_t *base = mem_map_read[index];        if(likely(base)) {		return HMemRead32(base+(addr&(MEM_MAP_BLOCKMASK)));        } else {		uint8_t *taddr = twolevel_translate_r(addr);		if(taddr) {			return HMemRead32(taddr);		}		return IO_Read32(addr);        }*/	//return host32_to_target(*(uint32_t *)(&ppc_memory[addr]));	int base = 0xc0000000; /* Fixme */	printf("KSDBG:addr=0x%x\n", addr);	return 0;	//return __bswap_32(*(uint32_t *)(&ppc_memory[addr - base]));}uint16_tBus_Read16(uint32_t addr) {        uint32_t index = (addr >> MEM_MAP_SHIFT);        uint8_t *base = mem_map_read[index];        if(likely(base)) {		return HMemRead16(base+(addr&(MEM_MAP_BLOCKMASK)));        } else {		uint8_t *taddr = twolevel_translate_r(addr);		if(taddr) {			return HMemRead16(taddr);		}		return IO_Read16(addr);        }}uint8_tBus_Read8(uint32_t addr) {	/*        uint32_t index=(addr>>MEM_MAP_SHIFT);        uint8_t *base=mem_map_read[index];        if(likely(base)) {		return HMemRead8(base+(addr&(MEM_MAP_BLOCKMASK)));        } else {		uint8_t *taddr = twolevel_translate_r(addr);		if(taddr) {			return HMemRead8(taddr);		}		return IO_Read8(addr);        }*/	//fprintf(stderr, "KSDBG:read addr=0x%x\n",addr);	return ppc_memory[addr];}/* * -------------------------------------------- * Bus Read *	Write to Memory or call an MMIO handler * -------------------------------------------- */voidBus_Write64(uint64_t value,uint32_t addr) {        uint32_t index=(addr>>MEM_MAP_SHIFT);        uint8_t *base=mem_map_write[index];        if(likely(base)) {		HMemWrite64(value,(base+(addr&(MEM_MAP_BLOCKMASK))));        } else {		uint8_t *taddr = twolevel_translate_w(addr);		if(taddr) {			return HMemWrite64(value,taddr);		}		//return IO_Write64(value,addr);		return;        }}voidBus_Write32(uint32_t value,uint32_t addr) {        uint32_t index=(addr>>MEM_MAP_SHIFT);        uint8_t *base=mem_map_write[index];        if(likely(base)) {		HMemWrite32(value,(base+(addr&(MEM_MAP_BLOCKMASK))));        } else {		uint8_t *taddr = twolevel_translate_w(addr);		if(taddr) {			return HMemWrite32(value,taddr);		}		return IO_Write32(value,addr);        }}voidBus_Write16(uint16_t value,uint32_t addr) {        uint32_t index=(addr>>MEM_MAP_SHIFT);        uint8_t *base=mem_map_write[index];        if(likely(base)) {		HMemWrite16(value,(base+(addr&(MEM_MAP_BLOCKMASK))));        } else {		uint8_t *taddr = twolevel_translate_w(addr);		if(taddr) {			return HMemWrite16(value,taddr);		}		return IO_Write16(value,addr);        }}voidBus_Write8(uint8_t value,uint32_t addr) {	/*        uint32_t index = (addr>>MEM_MAP_SHIFT);        uint8_t * base = mem_map_write[index];        if(likely(base)) {		HMemWrite8(value,(base+(addr&(MEM_MAP_BLOCKMASK))));        } else {		uint8_t *taddr = twolevel_translate_w(addr);		if(taddr) {			return HMemWrite8(value,taddr);		}		return IO_Write8(value,addr);        }*/	//fprintf(stderr, "KSDBG:write addr=0x%x\n",addr);	ppc_memory[addr] = value;	return ;	}/* * -------------------------------------------- * Generic Bus Access Functions for Transfer * of any block size. Mainly used for * non CPU bus masters. * -------------------------------------------- */voidBus_Write(uint32_t addr,uint8_t *buf,uint32_t count) {	while(count)  {		Bus_Write8(*buf++,addr++);		count--;	}}voidBus_WriteSwap32(uint32_t addr,uint8_t *buf,int count) {	while(count)  {		Bus_Write8(*buf++,(addr^3));		addr++;		count--;	}}voidBus_Read(uint8_t *buf,uint32_t addr,uint32_t count) {	while(count)  {		*buf=Bus_Read8(addr++);		buf++;count--;	}}voidBus_ReadSwap32(uint8_t *buf,uint32_t addr,int count) {	while(count)  {		*buf=Bus_Read8(addr^3);		addr++;		buf++;count--;	}}/* * ------------------------------------------------------------ * Map/Unmap single 1MB Blocks  * ------------------------------------------------------------ */static voidMem_MapBlock(uint32_t addr,uint8_t *host_mem,uint32_t flags) {       	uint32_t index=(addr>>MEM_MAP_SHIFT);	if(flags & MEM_FLAG_READABLE) {               	mem_map_read[index]=host_mem;	}	if(flags & MEM_FLAG_WRITABLE) {        	mem_map_write[index]=host_mem;	}}/* * -------------------------------------------- * Unmap a (large) block * If nothing is mapped return 0 else 1 * -------------------------------------------- */static inline int Mem_UnMapBlock(uint32_t addr) {       	uint32_t index=(addr>>MEM_MAP_SHIFT);	if(mem_map_read[index] || mem_map_write[index]) {        	mem_map_read[index]= mem_map_write[index]=NULL;		return 1;	} else {		return 0;	}}/* * ------------------------------------------------------------ * Map/Unmap variable sized blocks in 2-Level Translation table  * ------------------------------------------------------------ */static voidMem_Map2LvlBlock(uint32_t addr,uint8_t *host_mem,uint32_t flags) {	uint8_t **slvl_map_w;	uint8_t **slvl_map_r;	int index = addr >> twoLevelMMap.frst_lvl_shift;	int sl_index = (addr & twoLevelMMap.scnd_lvl_mask) >> twoLevelMMap.scnd_lvl_shift;	if(flags & MEM_FLAG_READABLE) {		slvl_map_r = twoLevelMMap.flvlmap_read[index];		if(unlikely(!slvl_map_r)) {			slvl_map_r = twoLevelMMap.flvlmap_read[index]=malloc(sizeof(uint8_t*)*twoLevelMMap.scnd_lvl_sz);			if(unlikely(!slvl_map_r)) {				fprintf(stderr,"Out of memory in Map2LvlBlock\n");				exit(4324);			} else {				memset(slvl_map_r,0,sizeof(uint8_t*)*twoLevelMMap.scnd_lvl_sz);				/* assert  use count of 0 */			}		}  		twoLevelMMap.flvl_map_read_use_count[index]++;               	slvl_map_r[sl_index]=host_mem;	}	if(flags & MEM_FLAG_WRITABLE) {		slvl_map_w = twoLevelMMap.flvlmap_write[index];		if(unlikely(!slvl_map_w)) {			slvl_map_w = twoLevelMMap.flvlmap_write[index]=malloc(sizeof(uint8_t*)*twoLevelMMap.scnd_lvl_sz);			if(unlikely(!slvl_map_w)) {				fprintf(stderr,"Out of memory in Map2LvlBlock\n");				exit(4329);			} else {				memset(slvl_map_w,0,sizeof(uint8_t*)*twoLevelMMap.scnd_lvl_sz);			}		}  		twoLevelMMap.flvl_map_write_use_count[index]++;        	slvl_map_w[sl_index]=host_mem;	}		}static voidMem_UnMap2LvlBlock(uint32_t addr) {	uint8_t **slvl_map_w;	uint8_t **slvl_map_r;	int index = addr >> twoLevelMMap.frst_lvl_shift;	int sl_index = (addr & twoLevelMMap.scnd_lvl_mask) >> twoLevelMMap.scnd_lvl_shift;	slvl_map_r = twoLevelMMap.flvlmap_read[index];	slvl_map_w = twoLevelMMap.flvlmap_write[index];	if(slvl_map_r) {        	if(slvl_map_r[sl_index]) {        		slvl_map_r[sl_index]=NULL;			twoLevelMMap.flvl_map_read_use_count[index]--;			if(twoLevelMMap.flvl_map_read_use_count[index]==0) {				free(slvl_map_r);				slvl_map_r = twoLevelMMap.flvlmap_read[index]=NULL;			}		}	}	if(slvl_map_w) {        	if(slvl_map_w[sl_index]) {        		slvl_map_w[sl_index]=NULL;			twoLevelMMap.flvl_map_write_use_count[index]--;			if(twoLevelMMap.flvl_map_write_use_count[index]==0) {				free(slvl_map_w);				slvl_map_w = twoLevelMMap.flvlmap_write[index]=NULL;			}		}	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99久久久久| 国产成人综合亚洲91猫咪| 久久综合狠狠综合久久综合88| 欧美日韩视频在线观看一区二区三区 | 不卡的av中国片| 国产在线国偷精品免费看| 韩国女主播一区二区三区| 蜜臀久久久99精品久久久久久| 亚洲高清不卡在线观看| 日韩av不卡一区二区| 欧美aaa在线| 国产高清亚洲一区| jlzzjlzz亚洲日本少妇| 91黄色免费观看| 欧美剧情电影在线观看完整版免费励志电影 | √…a在线天堂一区| 亚洲美女少妇撒尿| 肉色丝袜一区二区| 老司机精品视频导航| 国产精品亚洲人在线观看| 成人免费视频国产在线观看| 色综合久久六月婷婷中文字幕| 欧美三级午夜理伦三级中视频| 欧美日本国产视频| 国产婷婷色一区二区三区四区 | 欧美三级在线播放| 精品久久久网站| 亚洲国产精品黑人久久久| 亚洲色图.com| 麻豆国产欧美一区二区三区| 成人午夜视频免费看| 欧美一a一片一级一片| 欧美成人综合网站| 亚洲欧美精品午睡沙发| 美国三级日本三级久久99| 成人app在线| 欧美xxxxx牲另类人与| 日韩美女视频19| 久久精品国产精品亚洲综合| 一本一道综合狠狠老| 精品日韩在线观看| 一区二区在线观看免费视频播放| 国产一区二区中文字幕| 欧美在线不卡视频| 国产亚洲综合在线| 香蕉成人啪国产精品视频综合网| 国产精品一区二区三区网站| 欧美日韩一区二区在线观看视频 | 波多野结衣一区二区三区| 欧美精品1区2区| 亚洲精品成人精品456| 国产在线视频不卡二| 欧美日本在线播放| 国产精品视频在线看| 蜜臀久久久99精品久久久久久| 99精品久久久久久| 久久久久久毛片| 日韩黄色免费网站| 欧美综合一区二区三区| 国产精品另类一区| 国产乱码精品1区2区3区| 日韩一区二区不卡| 亚洲成人免费电影| 日本精品一区二区三区四区的功能| 欧美激情中文不卡| 国产一区二区三区综合| 精品国产网站在线观看| 偷拍亚洲欧洲综合| 欧美日韩亚洲高清一区二区| 亚洲国产精品一区二区久久恐怖片| 高清视频一区二区| 中文一区一区三区高中清不卡| 国产乱码精品一区二区三区忘忧草| 精品国产乱子伦一区| 老汉av免费一区二区三区| 日韩一级完整毛片| 精品在线你懂的| 26uuu亚洲| 国产成人精品免费视频网站| 国产精品女上位| 99久久婷婷国产综合精品电影 | 成人精品免费网站| 亚洲国产精品精华液ab| www.欧美日韩国产在线| 亚洲精品写真福利| 91国产福利在线| 日韩电影网1区2区| 欧美一二三四区在线| 久久国产精品无码网站| 国产色综合一区| 色妹子一区二区| 图片区日韩欧美亚洲| 亚洲精品一区二区三区精华液| 国产精品一二三四五| 欧美国产日本韩| 在线免费观看成人短视频| 日韩精品五月天| 欧美国产日韩亚洲一区| 欧洲精品视频在线观看| 久久精品999| 综合久久久久久| 在线91免费看| 成人av在线一区二区| 亚洲大尺度视频在线观看| 欧美成人a∨高清免费观看| 成人免费电影视频| 亚洲第一福利视频在线| 2020国产精品久久精品美国| 91在线观看地址| 蜜乳av一区二区| 亚洲黄色av一区| 欧美电视剧免费观看| 97久久久精品综合88久久| 日韩黄色片在线观看| 欧美激情一区二区三区在线| 欧美一区二区三区小说| 99久久99久久久精品齐齐| 久久成人免费日本黄色| 亚洲人123区| 久久久久久久久蜜桃| 在线观看免费成人| 成人亚洲一区二区一| 日本中文字幕不卡| 亚洲日穴在线视频| 337p日本欧洲亚洲大胆色噜噜| 91国偷自产一区二区三区观看| 国产东北露脸精品视频| 免费人成网站在线观看欧美高清| 国产精品高潮呻吟久久| 日韩女优视频免费观看| 欧美日韩精品一区二区三区四区| 99久久伊人久久99| 国产精品18久久久久久久久久久久 | 中文字幕在线不卡| 26uuu色噜噜精品一区二区| 欧美日韩一级视频| 日本道精品一区二区三区| 成人福利电影精品一区二区在线观看| 日韩一区欧美二区| 亚洲大型综合色站| 一区二区成人在线观看| 国产精品久久久久久妇女6080| 精品国产三级a在线观看| 69精品人人人人| 欧美三级在线视频| 欧美午夜精品久久久久久超碰| 色综合中文字幕| 91国产成人在线| 在线观看不卡视频| 色欧美日韩亚洲| 在线亚洲免费视频| 在线视频一区二区三| 在线一区二区观看| 精品视频123区在线观看| 欧美日韩亚洲丝袜制服| 欧美午夜不卡视频| 欧美精品高清视频| 欧美一卡二卡在线| 精品少妇一区二区三区在线播放| 精品久久久久香蕉网| 26uuu国产日韩综合| 久久久久国产精品麻豆ai换脸| 久久男人中文字幕资源站| 国产亚洲制服色| 亚洲欧洲精品成人久久奇米网| 综合欧美一区二区三区| 一区二区三区久久| 午夜婷婷国产麻豆精品| 久久成人18免费观看| 国产91综合一区在线观看| 91亚洲精品一区二区乱码| 色美美综合视频| 日韩丝袜美女视频| 久久精品人人做| 亚洲男人天堂一区| 午夜激情久久久| 国产精品影视在线观看| 国产成a人无v码亚洲福利| 色综合咪咪久久| 日韩精品最新网址| 国产精品乱人伦| 丝袜美腿高跟呻吟高潮一区| 久久99久久久欧美国产| www.欧美日韩国产在线| 777a∨成人精品桃花网| 国产亚洲欧美日韩日本| 亚洲午夜一区二区三区| 国产一区二区三区在线看麻豆| 91麻豆精品在线观看| 777奇米成人网| 国产精品热久久久久夜色精品三区 | 国产精品99久久久久久久vr| 欧美性受xxxx| 欧美激情一区二区在线| 日韩av电影天堂| 91视频国产观看| 国产目拍亚洲精品99久久精品| 亚洲成a人v欧美综合天堂 | 亚洲成人免费电影| 国产999精品久久久久久绿帽|