亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久久亚洲精品一区二区三区| 精品电影一区二区三区| 91国模大尺度私拍在线视频| 色婷婷激情一区二区三区| 色偷偷成人一区二区三区91| 91丨国产丨九色丨pron| 欧美性受极品xxxx喷水| 91精品国产综合久久精品麻豆 | 成人午夜在线视频| 99久久国产综合精品麻豆| 欧美一a一片一级一片| 在线电影院国产精品| 精品久久一区二区| 国产精品人妖ts系列视频| 亚洲天堂福利av| 亚洲成人综合在线| 国内成人精品2018免费看| 成人小视频在线观看| 91久久免费观看| 91精品国产欧美日韩| 久久久国产一区二区三区四区小说| 国产精品国产三级国产aⅴ入口| 亚洲综合视频在线| 卡一卡二国产精品 | 日本精品裸体写真集在线观看 | 国产精品理伦片| 亚洲va欧美va人人爽| 国内精品伊人久久久久av一坑| 成人av在线一区二区三区| 欧美人妖巨大在线| 久久久高清一区二区三区| 一区二区三区日韩精品| 九色porny丨国产精品| 99re这里只有精品视频首页| 欧美精品乱人伦久久久久久| 国产亚洲一本大道中文在线| 一区av在线播放| 精品一二三四区| 色综合视频一区二区三区高清| 欧美一区二区三区视频免费 | 精品电影一区二区| 一区二区三区四区亚洲| 久久国产精品第一页| 一本到不卡免费一区二区| 日韩精品一区二区三区在线| 亚洲三级在线免费观看| 麻豆久久久久久| 在线观看国产日韩| 欧美国产精品久久| 奇米色777欧美一区二区| 91在线免费播放| 欧美精品一区二区三区蜜桃视频 | 韩国成人精品a∨在线观看| 91精品福利在线| 久久久久久久久久久99999| 综合久久给合久久狠狠狠97色| 久久国内精品视频| 91性感美女视频| 欧美激情一区二区在线| 美国一区二区三区在线播放| 91麻豆精东视频| 中文字幕二三区不卡| 蜜臀久久99精品久久久画质超高清 | 成人在线一区二区三区| 欧美一区二区三区在线观看视频| 一区二区三区日韩欧美| 成人av资源站| 国产亚洲精品aa午夜观看| 蜜臀av一区二区| 欧美日韩小视频| 国产三区在线成人av| 久久99热狠狠色一区二区| 99久久精品国产一区二区三区| 精品盗摄一区二区三区| 同产精品九九九| 欧美亚洲国产一区二区三区 | 一片黄亚洲嫩模| 一本色道久久综合狠狠躁的推荐| 中文字幕国产一区二区| 国产精品2024| 欧美精品一区二区三区一线天视频 | 国产麻豆欧美日韩一区| 青草国产精品久久久久久| 丁香婷婷综合激情五月色| 亚洲成人免费影院| 色综合天天综合网天天狠天天 | 中文字幕在线一区| thepron国产精品| 国产精品亲子乱子伦xxxx裸| 成人激情电影免费在线观看| 国产网站一区二区| 成人不卡免费av| 国产精品国产精品国产专区不片| 成人av午夜电影| 国产精品国产精品国产专区不片 | 国产农村妇女毛片精品久久麻豆| 韩国精品主播一区二区在线观看| 久久影院午夜论| 蜜桃一区二区三区在线观看| 日韩一区二区三区视频| 国产综合色产在线精品| 精品毛片乱码1区2区3区| 韩国精品主播一区二区在线观看| 久久久亚洲综合| 高清国产午夜精品久久久久久| 国产精品麻豆视频| 99久精品国产| 亚洲高清免费在线| 日韩欧美一区二区不卡| 精品一区二区三区在线观看国产| 久久精品一区八戒影视| 成人黄页在线观看| 91精品国产综合久久精品麻豆| 国产精品18久久久久久vr| 一级做a爱片久久| 国产欧美日韩不卡免费| 日韩精品五月天| 欧美—级在线免费片| 亚洲激情欧美激情| 不卡欧美aaaaa| 中文字幕精品综合| 图片区小说区国产精品视频| 亚洲精品乱码久久久久久久久| 欧美精品一区二区精品网| 欧美不卡激情三级在线观看| 精品国产一区二区三区久久久蜜月 | 亚洲欧洲日韩在线| 欧美精品久久99久久在免费线| 精品一区二区精品| 另类专区欧美蜜桃臀第一页| 黄色小说综合网站| 美女在线视频一区| 亚洲国产日韩精品| 日韩电影在线一区二区| 粗大黑人巨茎大战欧美成人| 欧美精品一卡二卡| 国产精品麻豆久久久| 免费黄网站欧美| 成人福利视频在线看| 欧美在线一二三四区| 亚洲综合精品自拍| 99久久久国产精品| 日韩二区在线观看| 国产精品久久夜| 69成人精品免费视频| 成人午夜私人影院| 日韩精品一卡二卡三卡四卡无卡| 久久免费午夜影院| 欧美在线观看一二区| 韩国精品主播一区二区在线观看| 亚洲欧洲精品一区二区精品久久久| 色嗨嗨av一区二区三区| 久久97超碰色| 亚洲视频一区在线| 成人黄页毛片网站| 国产精品五月天| 日韩高清在线电影| 亚洲欧洲av色图| 欧美电视剧在线看免费| 欧美自拍丝袜亚洲| 黄色资源网久久资源365| 136国产福利精品导航| 日韩写真欧美这视频| 91麻豆精品视频| 国产成人精品一区二区三区网站观看| 午夜a成v人精品| 亚洲欧美日韩在线| 久久久久久影视| 日韩视频在线一区二区| 欧美在线|欧美| 91免费观看视频在线| 国产成人精品免费一区二区| 首页国产欧美日韩丝袜| 亚洲日本韩国一区| 国产亚洲欧洲一区高清在线观看| 欧美高清精品3d| 在线视频欧美精品| 成人av资源网站| 国产成人av影院| 国产毛片精品国产一区二区三区| 国产一区二区三区日韩| 国产乱码精品一区二区三区忘忧草 | 亚洲影院免费观看| 一区二区三区蜜桃| 亚洲一区二区三区中文字幕在线| 一区二区三区成人在线视频| 亚洲精品成人悠悠色影视| 有码一区二区三区| 夜夜精品视频一区二区| 亚洲一区影音先锋| 日韩精品视频网站| 精品伊人久久久久7777人| 在线综合视频播放| 欧美精品自拍偷拍动漫精品| 337p亚洲精品色噜噜噜| 欧美sm极限捆绑bd| 中文字幕第一区| 亚洲欧美日韩国产另类专区| 亚洲男人都懂的| 无吗不卡中文字幕|