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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? intel28f320_8x4.c

?? umon bootloader source code, support mips cpu.
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* intel28f320_8x4.c:
 * Support for INTEL 28f320 devices each configured in 8-bit mode
 * and 4 devices in parallel.
 */
#include "config.h"
#if INCLUDE_FLASH
#include "stddefs.h"
#include "genlib.h"
#include "cpu.h"
#include "flash.h"
#include "intel28f320_8x4.h"

#define SR_WAIT	50000

/* Strata flash buffer info:
 * Each device can buffer 32 bytes.
 * In this configuration we have 4 devices in parallel;
 * hence, 128 byte buffering...
 */
#define BUFFER_SIZE		128
#define BUFFER_ALIGN	0x7f

#define DEV_WIDTH		4

#define WSMS			0x80808080
#define ESS				0x40404040
#define ES				0x20202020
#define PSS				0x04040404
#define PS				0x10101010
#define WBS				0x80808080

#define	ftype		    volatile unsigned long

/* Manufacturer and device id... */
#define DEVICE_28F320J3		0x16161616		/* 32  Mbit (3 volt strata) */
#define DEVICE_28F640J3		0x17171717		/* 64  Mbit (3 volt strata) */
#define DEVICE_28F128J3		0x18181818		/* 128 Mbit (3 volt strata) */

/* INTEL_STRATA-Specific Macros...
 */
#define STRATACMD_READARRAY()			(*(ftype *)(fdev->base) = 0xffffffff)
#define STRATACMD_PROTPROGRAM()			(*(ftype *)(fdev->base) = 0xc0c0c0c0)
#define STRATACMD_READID()				(*(ftype *)(fdev->base) = 0x90909090)
#define STRATACMD_READSTATUS()			(*(ftype *)(fdev->base) = 0x70707070)
#define STRATACMD_LOCKBIT()				(*(ftype *)(fdev->base) = 0x60606060)
#define STRATACMD_CLEARSTATUS()			(*(ftype *)(fdev->base) = 0x50505050)
#define STRATACMD_PROGRAM(addr)			(*(ftype *)(addr) = 0x40404040)
#define STRATACMD_WRITETOBUFFER(addr)	(*(ftype *)(addr) = 0xe8e8e8e8)
#define STRATACMD_CONFIRM(addr)			(*(ftype *)(addr) = 0xd0d0d0d0)
#define STRATACMD_BLOCKERASE(addr)		(*(ftype *)(addr) = 0x20202020)
#define STRATACMD_SETLOCKCONFIRM(addr)	(*(ftype *)(addr) = 0x01010101)

/* General Macros...
 */
#define FLASH_READ(addr)				(*(ftype *)(addr))
#define FLASH_READBASE()				(*(ftype *)(fdev->base))
#define FLASH_READ_MANUFACTURER()		(*(ftype *)(fdev->base))
#define FLASH_READ_DEVICEID()			(*(ftype *)(fdev->base+8))
#define FLASH_READ_BLOCKSTATUS(sbase)	(*(ftype *)(sbase+16))
#define FLASH_WRITE(to,frm)				(*(ftype *)(to) = *(ftype *)(frm))

#define WAIT_FOR_DATA(add,data) \
	{ \
		volatile int timeout = FLASH_LOOP_TIMEOUT; \
		while(*(ftype *)add != *(ftype *)data) { \
			if (--timeout <= 0) { \
				STRATACMD_READARRAY(); \
				return(-2); \
			} \
			WATCHDOG_MACRO; \
		} \
	}

#define WAIT_FOR_FF(add) \
	{ \
		volatile int timeout = FLASH_LOOP_TIMEOUT; \
		while(*(ftype *)add != 0xffffffff) { \
			if (--timeout <= 0) { \
				STRATACMD_READARRAY(); \
				return(-3); \
			} \
			WATCHDOG_MACRO; \
		} \
	}


#define WAIT_FOR_WSMS_READY() \
	{ \
		volatile int timeout = FLASH_LOOP_TIMEOUT; \
		while((*(ftype *)(fdev->base) & WSMS) != WSMS) { \
			if (--timeout <= 0) { \
				STRATACMD_READARRAY(); \
				return(-4); \
			} \
			WATCHDOG_MACRO; \
		} \
	}

#define ERASE_FAILURE()			(*(ftype *)(fdev->base) & (ESS|ES|PS))

/* Intel28f320_8x4_erase():
 * Erase the sector specified by snum.
 * Return 0 if success, else negative to indicate some failure.
 */
int
Intel28f320_8x4_erase(struct flashinfo *fdev,int snum)
{
	STRATACMD_CLEARSTATUS();

	/* Issue the setup/confirm sequence: */
	STRATACMD_BLOCKERASE(fdev->base);
	STRATACMD_CONFIRM(fdev->sectors[snum].begin);

	/* Wait for sector erase to complete by polling RSR... */
	WAIT_FOR_WSMS_READY();
				
	if (ERASE_FAILURE()) {
		STRATACMD_READARRAY();
		return(-1);
	}

	STRATACMD_READARRAY();

	WAIT_FOR_FF(fdev->sectors[snum].begin);
	return(0);
}

/* EndIntel28f320_8x4_erase():
 * Function place holder to determine the end of the above function.
 */
void
EndIntel28f320_8x4_erase(void)
{}

int
Intel28f320_8x4_write(struct flashinfo *fdev,uchar *dest,uchar *src,
	long bytecnt)
{
	volatile int	tot;
	ulong			bcount;
	int				i, j, giveup, aligntot, size;
	volatile uchar	buf[BUFFER_SIZE], *aligndest, *block, *destend;

	/* The write buffer can only be used on (32*4)-byte blocks; hence, the
	 * low 7 bits of the destination must be zero at the start of a 
	 * buffer write.  This means that we must align the destination
	 * address on this boundary.  To do this, we decrement the destination
	 * address until the alignment is reached, then load that space with
	 * the same data that is already there.
	 */ 
	destend = dest + bytecnt;
	aligntot = 0;
	aligndest = dest;
	while(((ulong)aligndest & BUFFER_ALIGN) != 0) {
		aligndest--;
		aligntot++;
		bytecnt++;
	}

	tot = 0;
	while(tot < bytecnt) {
		size = bytecnt - tot;
		if (size > BUFFER_SIZE)
			size = BUFFER_SIZE;

		block = aligndest;

		/* Copy buffer's worth of data into local buffer just in
		 * case the source is this flash device.
		 */
		for(i=0;i<size;i++) {
			if (aligndest < dest)
				buf[i] = *aligndest++;
			else
				buf[i] = *src++;
		}
		j = 0;
		while (size < BUFFER_SIZE) {
			size++;
			buf[i++] = destend[j++];
		}
		aligndest = block;

		/* Issue request to write to the buffer, then poll extended
		 * status register to wait for availability.
		 */
		giveup = SR_WAIT;
		do {
			STRATACMD_WRITETOBUFFER(aligndest);	
			giveup--;
		} while (((FLASH_READ(aligndest) & WBS) != WBS) && (giveup > 0));

		if (giveup == 0) {
			STRATACMD_READARRAY();	
			return(-1);
		}
                
		/* Write the byte count.  Notice that the bytecount fed to the
		 * device is one less than the actual count.  Plus, in this case,
		 * the count is written into each byte because we are interfacing
		 * to 4 devices in parallel... 
		 */
		bcount = (size-4)/4;
		*(ftype *)block = bcount | (bcount << 8) |
			(bcount << 16) | (bcount << 24);

		/* Write the buffer data...
		 */
		for(i=0;i<size;i+=DEV_WIDTH) {
			FLASH_WRITE(aligndest,(&buf[i]));
			aligndest+=DEV_WIDTH;
		}
		
		STRATACMD_CONFIRM(block);
		tot += size;

		giveup = SR_WAIT;
		do {
			STRATACMD_READSTATUS();
			giveup--;
		} while(((FLASH_READBASE() & WSMS) != WSMS) && (giveup > 0));

		if (giveup == 0) {
			STRATACMD_READARRAY();	
			return(-2);
		}
		STRATACMD_READARRAY();	

	}
	return(0);
}

/* EndIntel28f320_8x4_write():
 * Function place holder to determine the end of the above function.
 */
void
EndIntel28f320_8x4_write(void)
{}

/* Intel28f320_8x4_ewrite():
 * Erase all sectors that are part of the address space to be written,
 * then write the data to that address space.  This is basically a
 * concatenation of the above erase & write done in one step.  This is
 * necessary primarily for re-writing the bootcode; because after the boot
 * code is erased, there is nowhere to return so the re-write must be done
 * while executing out of ram also.  It is only needed in systems that are
 * executing the monitor out of the same device that is being updated.
 */
int
Intel28f320_8x4_ewrite(struct flashinfo *fdev,uchar *destA,uchar *srcA,
	long bytecnt)
{
	ulong   		addr;
	volatile int	sector, i;
	void			(*reset)();
	volatile uchar 	*src, *dest;

	src = srcA;
	dest = destA;
	
	STRATACMD_CLEARSTATUS();

	/* For each sector, if it overlaps any of the destination space */
	/* then erase that sector. */
	for (sector = 0; sector < fdev->sectorcnt; sector++) {
		if ((((uchar *)dest) > (fdev->sectors[sector].end)) ||
		    (((uchar *)dest+bytecnt-1) < (fdev->sectors[sector].begin))) {
			continue;
		}

		addr = (ulong)(fdev->sectors[sector].begin);

		/* Issue the ERASE setup/confirm sequence: */
		STRATACMD_BLOCKERASE(addr);
		STRATACMD_CONFIRM(addr);

		/* Wait for sector erase to complete by polling RSR... */
		WAIT_FOR_WSMS_READY();

		STRATACMD_READARRAY();

		WAIT_FOR_FF(addr);
	}

	for(i = 0; i < bytecnt; i += DEV_WIDTH) {

		/* Flash program setup command */
		STRATACMD_PROGRAM(dest);
		

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线视频一区| 欧美高清hd18日本| 经典三级一区二区| 欧美日韩亚洲综合| 一区二区三区精品视频在线| 97久久超碰国产精品电影| 亚洲欧美在线aaa| 99国产精品99久久久久久| 香蕉久久一区二区不卡无毒影院| 久久精品水蜜桃av综合天堂| 日韩电影一区二区三区四区| 日韩一区国产二区欧美三区| 亚洲va天堂va国产va久| 国产女主播视频一区二区| 色综合色狠狠天天综合色| 亚洲一区二三区| 91精品在线一区二区| 国产日韩精品视频一区| 免费久久99精品国产| 亚洲人成网站在线| 欧美日韩一区三区四区| 不卡的电视剧免费网站有什么| 欧美激情艳妇裸体舞| 粉嫩高潮美女一区二区三区| 国产精品久久毛片a| 欧美色图12p| 色综合久久综合| 国产91对白在线观看九色| 蜜桃av一区二区在线观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 色婷婷国产精品| 欧美日韩电影一区| 久久在线观看免费| 欧美亚洲日本一区| 久久99精品国产.久久久久| 亚洲国产综合色| 久久精品一区蜜桃臀影院| 欧美一级免费大片| caoporen国产精品视频| 日韩av一区二区三区| 亚洲午夜视频在线| 亚洲国产日韩av| 午夜视频在线观看一区| 国产精品三级电影| 欧美一区二区成人6969| 欧美精品1区2区| 欧美一区二区三区小说| 欧美一区二区三区色| 欧美一区二区播放| 精品蜜桃在线看| 欧美日韩一区二区电影| 精品sm在线观看| 91福利社在线观看| 国产成人自拍网| 免费看日韩精品| 久久99精品久久久| 国产精品一区二区男女羞羞无遮挡 | 欧美性videosxxxxx| 成人国产亚洲欧美成人综合网| 播五月开心婷婷综合| 在线视频亚洲一区| 国产99精品国产| 91在线高清观看| www.日本不卡| 欧洲精品一区二区| 日韩欧美一区在线| 波多野结衣在线一区| 国产亚洲欧美一级| 欧美日韩久久一区二区| 91麻豆精品国产91久久久更新时间| 日韩午夜精品电影| 亚洲国产高清在线观看视频| 亚洲精品国产第一综合99久久| 久久久综合激的五月天| 精品乱人伦小说| 中文字幕在线观看一区二区| 亚洲国产成人porn| 国产一区二区三区免费在线观看 | 中文字幕一区二区三区不卡在线| 亚洲视频在线观看一区| 亚洲女性喷水在线观看一区| 午夜精品福利一区二区三区av| 加勒比av一区二区| 色综合久久久久网| 精品欧美一区二区在线观看| 丝袜美腿亚洲综合| 欧美日韩精品一区二区| 欧美一区二区三区在线看| 国产三级欧美三级日产三级99| 亚洲精品老司机| 麻豆视频一区二区| 色综合久久中文综合久久97| 久久日韩精品一区二区五区| 亚洲精品乱码久久久久久日本蜜臀| 人妖欧美一区二区| 97aⅴ精品视频一二三区| 这里只有精品免费| 一区二区三区视频在线观看| 韩国av一区二区| 岛国av在线一区| 91免费在线看| 久久久夜色精品亚洲| 五月综合激情婷婷六月色窝| 成人福利在线看| 精品免费日韩av| 爽好久久久欧美精品| 日韩专区一卡二卡| 丝袜诱惑制服诱惑色一区在线观看 | 欧美伊人久久久久久久久影院| 久久亚洲综合色一区二区三区| 一区二区三区av电影| 成人动漫av在线| 久久久午夜电影| 免费不卡在线观看| 欧美卡1卡2卡| 亚洲五月六月丁香激情| 91丝袜高跟美女视频| 欧美国产日韩a欧美在线观看| 久久精品噜噜噜成人88aⅴ| 国产精品亚洲成人| 日韩免费电影网站| 亚洲电影激情视频网站| 91久久一区二区| 亚洲免费观看高清完整版在线| 国产一区免费电影| 精品一区二区免费在线观看| 欧美日韩高清在线| 亚洲综合一二三区| 色综合久久66| 亚洲欧美国产高清| av电影一区二区| 国产精品黄色在线观看| 国产成人精品免费一区二区| 久久久久久久久岛国免费| 久草在线在线精品观看| 欧美videos中文字幕| 久久成人免费电影| 26uuu国产在线精品一区二区| 青娱乐精品在线视频| 91精品国产福利| 日本欧美一区二区在线观看| 欧美久久久久久久久中文字幕| 亚洲午夜精品17c| 欧美久久久久免费| 老司机午夜精品99久久| 精品国产一区二区三区久久久蜜月 | 久久久美女艺术照精彩视频福利播放 | 亚洲亚洲精品在线观看| 欧美日韩国产精品成人| 欧美aⅴ一区二区三区视频| 日韩精品中文字幕一区| 国产一区二区女| 中文字幕五月欧美| 欧洲生活片亚洲生活在线观看| 三级亚洲高清视频| 日韩天堂在线观看| 国产成a人亚洲精品| 中文字幕亚洲成人| 91麻豆精品国产91久久久使用方法| 免费看欧美女人艹b| 国产欧美精品国产国产专区 | 秋霞国产午夜精品免费视频| 久久女同性恋中文字幕| 99精品视频在线观看免费| 亚洲精品国产成人久久av盗摄| 欧美日韩和欧美的一区二区| 老汉av免费一区二区三区| 中文字幕久久午夜不卡| 在线观看av一区| 精品一区二区三区免费播放| 亚洲欧洲韩国日本视频| 91精品免费在线观看| 高潮精品一区videoshd| 一区二区三区毛片| 日韩欧美中文一区| 色综合久久天天| 老鸭窝一区二区久久精品| 国产精品福利一区| 日韩一二在线观看| 97se亚洲国产综合自在线| 成人教育av在线| 处破女av一区二区| 亚洲五月六月丁香激情| 2020日本不卡一区二区视频| 色综合中文字幕国产| 日韩美女视频一区二区在线观看| 国产精品77777| 亚洲h精品动漫在线观看| 久久亚洲影视婷婷| 538在线一区二区精品国产| 成人黄色777网| 韩国精品主播一区二区在线观看 | 日韩欧美一区二区视频| 91美女片黄在线| 国产精品99久久不卡二区| 亚洲一级二级在线| 国产精品久久久久久福利一牛影视| 51精品国自产在线| 色噜噜狠狠成人中文综合| 国产精品12区|