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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? flash.c

?? bootloader
?? C
字號:
#include "types.h"#include "bios.h"#include "flash.h"#include "console.h"#include "utils.h"const struct flash_info table[] = {	{		mfr_id: MANUFACTURER_AMD,		dev_id: AM29F040B,		name: "AM29F040B",		size: 0x00080000,		numeraseregions: 1,		regions: {			{ offset: 0x000000, erasesize: 0x10000, numblocks: 8}		}	},	{		mfr_id: MANUFACTURER_AMD,		dev_id: AM29LV040B,		name: "AM29LV040B",		size: 0x00080000,		numeraseregions: 1,		regions: {			{ offset: 0x000000, erasesize: 0x10000, numblocks: 8}		}	},	{		mfr_id: MANUFACTURER_AMD,		dev_id: AM29LV160BT_DT,		name: "AM29LV160BT/DT",		size: 0x00200000,		numeraseregions: 4,		regions: {			{ offset: 0x000000, erasesize: 0x10000, numblocks: 31 },			{ offset: 0x1F0000, erasesize: 0x08000, numblocks:  1 },			{ offset: 0x1F8000, erasesize: 0x02000, numblocks:  2 },			{ offset: 0x1FC000, erasesize: 0x04000, numblocks:  1 }		}	},	{		mfr_id: MANUFACTURER_AMD,		dev_id: AM29LV160BB_DB,		name: "AM29LV160BB/DB",		size: 0x00200000,		numeraseregions: 4,		regions: {			{ offset: 0x000000, erasesize: 0x04000, numblocks:  1 },			{ offset: 0x004000, erasesize: 0x02000, numblocks:  2 },			{ offset: 0x008000, erasesize: 0x08000, numblocks:  1 },			{ offset: 0x010000, erasesize: 0x10000, numblocks: 31 }		}	},	{		mfr_id: MANUFACTURER_HYNIX,		dev_id: HY29F040A,		name: "HY29F040A",		size: 0x00200000,		numeraseregions: 1,		regions: {			{ offset: 0x000000, erasesize: 0x10000, numblocks: 8}		}	},	{		mfr_id: MANUFACTURER_HYNIX,		dev_id: HY29LV160T,		name: "HY29LV160T",		size: 0x00200000,		numeraseregions: 4,		regions: {			{ offset: 0x000000, erasesize: 0x10000, numblocks: 31 },			{ offset: 0x1F0000, erasesize: 0x08000, numblocks:  1 },			{ offset: 0x1F8000, erasesize: 0x02000, numblocks:  2 },			{ offset: 0x1FC000, erasesize: 0x04000, numblocks:  1 }		}	},	{		mfr_id: MANUFACTURER_HYNIX,		dev_id: HY29LV160B,		name: "HY29LV160B",		size: 0x00200000,		numeraseregions: 4,		regions: {			{ offset: 0x000000, erasesize: 0x04000, numblocks:  1 },			{ offset: 0x004000, erasesize: 0x02000, numblocks:  2 },			{ offset: 0x008000, erasesize: 0x08000, numblocks:  1 },			{ offset: 0x010000, erasesize: 0x10000, numblocks: 31 }		}	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF040,		name: "SST39VF040",		size: 0x00080000,		numeraseregions: 1,		regions: {			{ offset: 0x000000, erasesize: 0x01000, numblocks: 128 }		}	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF080,		name: "SST39VF080",		size: 0x00100000,		numeraseregions: 1,		regions: {			{ offset: 0x000000, erasesize: 0x01000, numblocks: 256 }		}	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF016,		name: "SST39VF016",		size: 0x00200000,		numeraseregions: 1,		regions: {			{ offset: 0x000000, erasesize: 0x01000, numblocks: 512 }		}	}};struct mtd_info mtd;static unsigned long wide_read(struct flchip *chip, unsigned long addr){	unsigned long mem_addr;	mem_addr = chip->mtd->offset + chip->start + addr;	mem_addr |= NOCACHE_BIT;	switch (chip->buswidth) {	case 1:		return *((unsigned char *)mem_addr);	case 2:		return *((unsigned short *)mem_addr);	case 4:		return *((unsigned long *)mem_addr);	default:		printf("wide_read(): unsupported buswidth\r\n");	}	return 0;}static void wide_write(struct flchip *chip, unsigned long val, unsigned long addr){	unsigned long mem_addr;	mem_addr = chip->mtd->offset + chip->start + addr;	mem_addr |= NOCACHE_BIT;	switch (chip->buswidth) {	case 1:		*((unsigned char *)mem_addr) = val;		break;	case 2:		*((unsigned short *)mem_addr) = val;		break;	case 4:		*((unsigned long *)mem_addr) = val;		break;	default:		printf("wide_write(): unsupported buswidth\r\n");		break;	}}static unsigned long make_cmd(struct flchip *chip, unsigned long cmd){	return cmd;}static void send_unlock(struct flchip *chip){	wide_write(chip, make_cmd(chip, CMD_UNLOCK_DATA_1), chip->buswidth * ADDR_UNLOCK_1);	wide_write(chip, make_cmd(chip, CMD_UNLOCK_DATA_2), chip->buswidth * ADDR_UNLOCK_2);}static void send_cmd(struct flchip *chip, unsigned long cmd){	send_unlock(chip);	wide_write(chip, make_cmd(chip, cmd), chip->buswidth * ADDR_UNLOCK_1);}static void send_cmd_to_addr(struct flchip *chip, unsigned long cmd, unsigned long addr){	send_unlock(chip);	wide_write(chip, make_cmd(chip, cmd), addr);}static int probe_chip(struct mtd_info *mtd, unsigned long base, struct flchip *chip){	unsigned long mfr_id;	unsigned long dev_id;	int buswidth;	int table_size = sizeof(table) / sizeof(table[0]);	int i;	chip->mtd = mtd;	chip->start = base;		for (buswidth = 1; buswidth <= 4; buswidth <<= 1) {		chip->buswidth = buswidth;		/* Enter autoselect mode. */		send_cmd(chip, CMD_RESET_DATA);		send_cmd(chip, CMD_MANUFACTURER_UNLOCK_DATA);		mfr_id = wide_read(chip, chip->buswidth * ADDR_MANUFACTURER);		dev_id = wide_read(chip, chip->buswidth * ADDR_DEVICE_ID);		/* Exit autoselect mode. */		send_cmd(chip, CMD_RESET_DATA);				for (i = 0; i < table_size; i++) {			if ((mfr_id == table[i].mfr_id) &&			    (dev_id == table[i].dev_id)) {				chip->size = table[i].size;				chip->numeraseregions = table[i].numeraseregions;				memcpy(chip->regions, table[i].regions, sizeof(chip->regions));				printf("Found ");				printf(table[i].name);				printf(" at 0x%08lx\r\n", base);				return 0;			}		}	}	return -1;}static int chip_is_busy(struct flchip *chip, unsigned long addr){	return ((wide_read(chip, addr) & D6_MASK) != (wide_read(chip, addr) & D6_MASK));}static int erase_one_block(struct flchip *chip, unsigned long addr, unsigned long size){	int times_left;	send_cmd(chip, CMD_SECTOR_ERASE_UNLOCK_DATA);	send_cmd_to_addr(chip, CMD_SECTOR_ERASE_UNLOCK_DATA_2, addr);	times_left = 500000;	while (times_left-- && chip_is_busy(chip, addr));	if (!times_left)		return -1;	return 0;}static int flash_erase_internal(struct mtd_info *mtd, unsigned long addr, unsigned long size){	struct flchip *chip;	struct erase_region *region;	int chip_start, chip_end;	int region_start, region_end;	int i, j, n;	for (i = 0; i < mtd->numchips; i++) {		chip = &mtd->chips[i];		chip_start = chip->start;		chip_end = chip->start + chip->size;		if ((addr >= chip_end) || (addr + size <= chip_start))			continue;		if (chip_start < addr)			chip_start = addr;		if (chip_end > addr + size)			chip_end = addr + size;		for (j = 0; j < chip->numeraseregions; j++) {			region = &chip->regions[j];			region_start = chip->start + region->offset;			region_end = region_start + (region->erasesize * region->numblocks);			if ((chip_start >= region_end) || (chip_end <= region_start))				continue;			if (region_start < chip_start)				region_start = chip_start;			if (region_end > chip_end)				region_end = chip_end;			for (n = region_start; n < region_end; n += region->erasesize)				erase_one_block(chip, n - chip->start, region->erasesize);		}	}	return 0;}static int flash_read_internal(struct mtd_info *mtd, unsigned long from,	unsigned long len, unsigned long *retlen, unsigned char *buf){	if ((from + len) > mtd->size)		return -1;	memcpy(buf, (char *)((mtd->offset + from) | NOCACHE_BIT), len);	*retlen = len;	return 0;}static int write_one_word(struct mtd_info *mtd, struct flchip *chip,			  unsigned long addr, unsigned long datum){	int times_left;	send_cmd(chip, CMD_PROGRAM_UNLOCK_DATA);	wide_write(chip, datum, addr);	times_left = 500000;	while (times_left-- && chip_is_busy(chip, addr));	if (!times_left)		return -1;	return 0;}static int flash_write_internal(struct mtd_info *mtd, unsigned long to,	unsigned long len, unsigned long *retlen, const unsigned char *buf){	struct flchip *chip;	int chip_start, chip_end;	int i, n;	*retlen = 0;	for (i = 0; i < mtd->numchips; i++) {		chip = &mtd->chips[i];		chip_start = chip->start;		chip_end = chip->start + chip->size;		if ((to >= chip_end) || (to + len <= chip_start))			continue;		if (chip_start < to)			chip_start = to;		if (chip_end > to + len)			chip_end = to + len;				if (chip->buswidth == 1)			for (n = chip_start; n < chip_end; n++)				write_one_word(mtd, chip, n - chip->start, buf[n - to]);		else if (chip->buswidth == 2)			for (n = chip_start; n < chip_end; n += 2)				write_one_word(mtd, chip, n - chip->start, 						*((unsigned short *)(&buf[n - to])));		else if (chip->buswidth == 4)			for (n = chip_start; n < chip_end; n += 4)				write_one_word(mtd, chip, n - chip->start,						*((unsigned long *)(&buf[n - to])));		else {			printf("flash_write_internal(): unsupported buswidth\r\n");			return -1;		}		*retlen += chip_end - chip_start;	}	return 0;}int flash_init(unsigned long rom_base){	unsigned long flash_base;	struct flchip *chip;	int i;	mtd.offset = rom_base;	mtd.size = 0;	mtd.numchips = 0;	flash_base = 0;	for (i = 0; i < MAX_CHIPS; i++) {		chip = &mtd.chips[i];		if (probe_chip(&mtd, flash_base, chip) == 0) {			mtd.size += chip->size;			mtd.numchips++;			flash_base+= chip->size;		} else			break;	}	return 0;}int flash_erase(unsigned long addr, unsigned long size){	return flash_erase_internal(&mtd, addr, size);}int flash_read(unsigned long from,	unsigned long len, unsigned long *retlen, unsigned char *buf){	return flash_read_internal(&mtd, from, len, retlen, buf);}int flash_write(unsigned long to,	unsigned long len, unsigned long *retlen, const unsigned char *buf){	return flash_write_internal(&mtd, to, len, retlen, buf);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re这里都是精品| 国产精品18久久久久久久久| 亚洲同性gay激情无套| 一区二区三区日韩精品| 午夜a成v人精品| 国产麻豆9l精品三级站| 欧美三级日韩在线| 久久老女人爱爱| 亚洲综合色噜噜狠狠| 国产一区二区在线看| 国产日产精品1区| 天天色天天操综合| 欧美变态口味重另类| 一区二区三区四区在线播放| 欧美影院午夜播放| 中文字幕在线观看不卡视频| 免费在线看成人av| 在线观看亚洲专区| 亚洲欧美日本在线| 成人精品在线视频观看| 欧美性生交片4| 免费成人结看片| 国产精品污www在线观看| 久久狠狠亚洲综合| 欧美三级电影网| 日韩电影网1区2区| 在线不卡欧美精品一区二区三区| 国产精品乱码一区二区三区软件| 在线观看日韩国产| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩专区在线| 国产精品亚洲第一| 国产成人免费视频网站| 日韩欧美一区在线| 日本女优在线视频一区二区 | 久久精品免费看| 国产精品免费av| 5月丁香婷婷综合| 亚洲一区欧美一区| 久久综合成人精品亚洲另类欧美| 国内精品免费**视频| 久久久久久久一区| 欧美丝袜丝交足nylons| 国产aⅴ综合色| 国产精品久久久久影院色老大| 丁香婷婷综合网| 日韩成人一区二区三区在线观看| 国产精品二区一区二区aⅴ污介绍| 欧美精品777| 91在线精品一区二区三区| 久久成人麻豆午夜电影| 亚洲精品一二三四区| 欧美美女一区二区| a美女胸又www黄视频久久| 一卡二卡欧美日韩| 国产女主播视频一区二区| 91精品国产综合久久久久久 | 91色porny蝌蚪| 亚洲欧美日韩一区| 国产日韩欧美在线一区| 日韩欧美在线不卡| 欧美日韩精品免费观看视频 | 久草这里只有精品视频| 欧美国产一区二区| 一本一道久久a久久精品| 成人av免费在线播放| 欧美激情一区二区三区不卡| 日韩欧美国产精品一区| 国产福利一区二区三区视频在线| 视频在线观看一区| 久久久99久久| 在线视频欧美精品| av一区二区三区| 丁香天五香天堂综合| 国产精品性做久久久久久| 韩国精品免费视频| 精品一区二区三区在线视频| 奇米亚洲午夜久久精品| 亚洲成av人综合在线观看| 精品国产百合女同互慰| 色婷婷精品久久二区二区蜜臀av| av中文字幕亚洲| 欧美日韩一区国产| 国产做a爰片久久毛片| 91久久精品国产91性色tv | 成人aaaa免费全部观看| 国产不卡视频在线播放| 国产成人在线色| 大桥未久av一区二区三区中文| 成人国产精品免费网站| 国产欧美一区二区三区在线老狼| 精品成人在线观看| 国产欧美一区二区精品婷婷| 国产精品人人做人人爽人人添| 国产三级久久久| 中文字幕一区免费在线观看| 亚洲精品欧美激情| 天天综合网 天天综合色| 免费三级欧美电影| 国产精品资源站在线| 成人免费观看男女羞羞视频| 色婷婷av一区二区三区大白胸| 欧洲色大大久久| 制服丝袜日韩国产| 亚洲精品一区二区三区99| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品久久午夜| 亚洲国产成人av网| 国产精品拍天天在线| 亚洲欧美日韩国产综合| 免费成人在线观看视频| 国v精品久久久网| 色婷婷av一区二区三区软件| 91精品国产欧美日韩| 欧美亚洲动漫精品| 欧美大片拔萝卜| 中文字幕在线不卡一区二区三区| 亚洲国产wwwccc36天堂| 国产在线不卡一卡二卡三卡四卡| 色综合久久久久综合99| 欧美一区二区三区视频在线观看| 久久精品视频网| 亚洲国产精品麻豆| 国产在线一区二区| 欧美色精品天天在线观看视频| 久久久夜色精品亚洲| 亚洲成人激情社区| 豆国产96在线|亚洲| 欧美精品久久久久久久久老牛影院| 久久亚洲影视婷婷| 婷婷综合另类小说色区| www.欧美色图| 精品盗摄一区二区三区| 午夜精品视频一区| 99久久免费精品高清特色大片| 日韩亚洲欧美在线| 亚洲女人小视频在线观看| 国产一区二区三区四区五区入口| 在线视频欧美区| 国产精品无码永久免费888| 美美哒免费高清在线观看视频一区二区 | 日韩av一级片| 94色蜜桃网一区二区三区| 久久精品一区二区| 蜜桃视频在线观看一区二区| 色88888久久久久久影院野外 | 国产精品天美传媒| 久久精品国产亚洲一区二区三区| 91国在线观看| 综合在线观看色| 国产盗摄精品一区二区三区在线 | 精品国产sm最大网站免费看| 亚洲一区二区三区在线播放| 懂色av中文字幕一区二区三区 | 粉嫩av亚洲一区二区图片| 欧美一级片在线| 亚洲国产日韩在线一区模特| 一本色道a无线码一区v| 中文文精品字幕一区二区| 国产综合色产在线精品| 欧美一区二区三区的| 性欧美疯狂xxxxbbbb| 欧美天天综合网| 一区二区欧美在线观看| 99re这里只有精品首页| 日韩毛片视频在线看| jlzzjlzz亚洲日本少妇| 国产精品久久久久久久久免费桃花| 国产伦精品一区二区三区视频青涩 | 欧美日韩综合在线| 亚洲一区二区三区四区的| 日本高清免费不卡视频| 亚洲精品国产视频| 在线观看视频一区二区欧美日韩| 亚洲综合自拍偷拍| 欧美日韩一级大片网址| 午夜精品123| 91精品欧美久久久久久动漫| 青青草97国产精品免费观看无弹窗版 | 狠狠狠色丁香婷婷综合激情| 精品久久久影院| 国产一区二区三区久久久| 国产偷v国产偷v亚洲高清| 粉嫩一区二区三区在线看| 国产精品久久久久久久久免费樱桃 | 中文字幕乱码久久午夜不卡| 成人av在线观| 一区二区三区精品视频在线| 欧美猛男男办公室激情| 免费欧美高清视频| 久久精品在线免费观看| 97超碰欧美中文字幕| 亚洲一区二区三区视频在线播放| 欧美在线观看视频一区二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品在线免费播放| 成人深夜视频在线观看| 亚洲在线视频网站| 欧美一级片在线观看| 波多野结衣中文字幕一区|