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

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

?? intel28f128_8x1.c

?? umon bootloader source code, support mips cpu.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* intel28f128_8x1.c:
 * Support for INTEL 28f128 configured as an 8-bit wide device.
 */
#include "config.h"
#if INCLUDE_FLASH
#include "stddefs.h"
#include "genlib.h"
#include "cpu.h"
#include "flash.h"
#include "intel28f128_8x1.h"

extern struct flashinfo	Fdev;
extern int FlashProtectWindow;

#define	ftype		    volatile unsigned char

/* Strata flash buffer info:
 */
#define BUFFER_SIZE		32
#define BUFFER_ALIGN	0x1f

/* Status register definitions:
 */
#define WSMS	0x80	/* Wait state machine status 1=ready */
#define ESS		0x40	/* Erase suspend status 1=suspended */
#define ECLBS	0x20	/* Erase/clear lock bit status 1=error */
#define PSLBS	0x10	/* Program/set lock bit status 1=error */
#define VPENS	0x08	/* Programming voltage status 1=error */
#define PSS		0x04	/* Program suspend status 1=suspended */
#define DPS		0x02	/* Device protect status 1=lock detected */
#define WBS		0x80	/* Write buffer status 1=available */

/* INTEL_STRATA-Specific Macros...
 */
#define STRATACMD_READARRAY()				(*(ftype *)(fdev->base) = 0xff)
#define STRATACMD_PROTPROGRAM()				(*(ftype *)(fdev->base) = 0xc0)
#define STRATACMD_READQUERY()				(*(ftype *)(fdev->base) = 0x98)
#define STRATACMD_READID()					(*(ftype *)(fdev->base) = 0x90)
#define STRATACMD_READSTATUS()				(*(ftype *)(fdev->base) = 0x70)
#define STRATACMD_LOCKBIT()					(*(ftype *)(fdev->base) = 0x60)
#define STRATACMD_CLEARSTATUS()				(*(ftype *)(fdev->base) = 0x50)
#define STRATACMD_PROGRAM()					(*(ftype *)(fdev->base) = 0x40)
#define STRATACMD_WRITETOBUFFER(addr)		(*(ftype *)(addr) = 0xe8)
#define STRATACMD_CONFIRM(addr)				(*(ftype *)(addr) = 0xd0)
#define STRATACMD_BLOCKERASE(addr)			(*(ftype *)(addr) = 0x20)
#define STRATACMD_SETLOCKCONFIRM(addr)		(*(ftype *)(addr) = 0x01)
#define STRATA_BUFFERBYTECOUNT(addr,val)	(*(ftype *)(addr) = val)

/* General Macros...
 */
#define FLASH_WRITE(to,frm)				(*(ftype *)(to) = *(ftype *)(frm))
#define FLASH_READ(addr)				(*(ftype *)(addr))
#define FLASH_READBASE()				(*(ftype *)(fdev->base))
#define NOT_EQUAL(p1,p2)				(*(ftype *)(p1) != *(ftype *)(p2))
#define WAIT_FOR_WRITE(add,data)		while(*(ftype *)add != *(ftype *)data)
#define NOTERASED_32(a)					(a != 0xffffffff)

/* Intel28f128_8x1_erase():
 * Based on the 'snum' value, erase the appropriate sector(s).
 * Return 0 if success, else -1.
 */
int
Intel28f128_8x1_erase(struct flashinfo *fdev,int snum)
{
	struct	sectorinfo *sip;
	int		ret, sector;

	ret = 0;

	/* Erase the request sector(s):
	 */
	for (sector=0; sector < fdev->sectorcnt; sector++) {
		sip = &fdev->sectors[sector];
		if ((!FlashProtectWindow) && (sip->protected)) {
			continue;
		}
		if ((snum == ALL_SECTORS) || (snum == sector)) {
			register ulong *lp, *lp1;
			int	noterased;

			/* Avoid issuing the erase command if the sector is already
			 * erased...
			 */
			noterased = 0;
			lp = (ulong *)fdev->sectors[sector].begin; 
			lp1 = (ulong *)((char *)lp + sip->size - 1); 
			while(lp <= lp1) {
				if (NOTERASED_32(*lp++)) {
					noterased = 1;
					break;
				}
			}
			if (noterased) {
				/* Issue the ERASE setup/confirm sequence...
				 */
				STRATACMD_BLOCKERASE(sip->begin);
				STRATACMD_CONFIRM(sip->begin);

				/* Device automatically outputs status after the
				 * above sequence, so now poll status waiting for
				 * completion of the erase...
				 */
				do {
					STRATACMD_READSTATUS();
				} while((FLASH_READBASE() & WSMS) == 0);

				/* Clear status register and go to read-array mode.
				 */
				STRATACMD_CLEARSTATUS();
				STRATACMD_READARRAY();	
				while(NOTERASED_32(*(ulong *)(sip->begin)));
			}
			if (ret == -1)
				break;
		}
	}
	return(ret);
}

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

int
Intel28f128_8x1_write(struct flashinfo *fdev,uchar *dest,uchar *src,
	long bytecnt)
{
	volatile int	tot, ret;
	int				i, giveup, aligntot, size;
	volatile uchar	buf[BUFFER_SIZE], *aligndest, *block;

	/* The write buffer can only be used on 32-byte blocks; hence, the
	 * low 5 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.
	 */ 
	aligntot = 0;
	aligndest = dest;
	while(((ulong)aligndest & BUFFER_ALIGN) != 0) {
		aligndest--;
		aligntot++;
		bytecnt++;
	}

	ret = tot = 0;
	while((tot < bytecnt) && (ret == 0)) {
		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++;
		}
		aligndest = block;
    
		/* Issue request to write to the buffer, then poll extended
		 * status register to wait for availability.
		 */
		giveup = 10000000;
		do {
			STRATACMD_WRITETOBUFFER(aligndest);	
			giveup--;
		} while (((FLASH_READ(aligndest) & WBS) == 0) && (giveup > 0));
		if (giveup == 0) {
			ret = -2;
			break;
		}
                
		/* Write the byte count...  Notice that the bytecount fed to the
		 * device is one less than the actual count. 
		 */
		STRATA_BUFFERBYTECOUNT(block,size-1);

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

		do {
			STRATACMD_READSTATUS();
		} while((FLASH_READBASE() & WSMS) == 0);

		STRATACMD_READARRAY();	
	}
	return(ret);
}

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

/* Intel28f128_8x1_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
Intel28f128_8x1_ewrite(struct flashinfo *fdev,uchar *destA,uchar *srcA,
	int bytecnt)
{
	int	    sector, i;
	void	(*reset)();
	uchar   *src, *dest;
	struct	sectorinfo *sip;

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

	/* For each sector, if it overlaps any of the destination space
	 * then erase that sector.
	 */
	for (sector = 0; sector < fdev->sectorcnt; sector++) {
		sip = &fdev->sectors[sector];

		if ((((uchar *)dest) > (sip->end)) ||
		    (((uchar *)dest+bytecnt-1) < (sip->begin))) {
			continue;
		}

		/* Issue the ERASE setup/confirm sequence...
		 */
		STRATACMD_BLOCKERASE(sip->begin);
		STRATACMD_CONFIRM(sip->begin);

		/* Device automatically outputs status after the
		 * above sequence, so now poll status waiting for
		 * completion of the erase...
		 */
		do {
			STRATACMD_READSTATUS();
		} while((FLASH_READBASE() & WSMS) == 0);

		/* Clear status register and go to read-array mode.
		 */
		STRATACMD_CLEARSTATUS();
		STRATACMD_READARRAY();	
		while(NOTERASED_32(*(ulong *)(sip->begin)));
	}

	for(i = 0; i < bytecnt; i++) {
		
		/* Program sequence...
		 */
		STRATACMD_PROGRAM();
		FLASH_WRITE(dest,src);

		/* Wait for write to complete by polling RSR...
		 */
		do {
			STRATACMD_READSTATUS();	
		} while((FLASH_READBASE() & WSMS) == 0);

		STRATACMD_CLEARSTATUS();	

		do {
			STRATACMD_READARRAY();	
		} WAIT_FOR_WRITE(dest,src);		

		dest++;
		src++;
	}
	
	/* Now that the re-programming of flash is complete, reset: */
	reset = RESETFUNC();
	reset();

	return(0);	/* won't get here */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩一区二区三区性色av| 欧美激情一区在线观看| 欧美午夜宅男影院| 色美美综合视频| 色婷婷精品大在线视频| 一本一本大道香蕉久在线精品| 91在线一区二区三区| 99视频精品免费视频| 波多野结衣一区二区三区| 91社区在线播放| 91麻豆国产福利精品| 色婷婷香蕉在线一区二区| 欧美亚洲丝袜传媒另类| 777欧美精品| 日韩欧美电影一区| 久久免费看少妇高潮| 国产精品素人一区二区| 中文字幕av一区二区三区高| 成人免费在线观看入口| 亚洲与欧洲av电影| 日韩精品一级二级| 久久国产精品无码网站| 国产精品羞羞答答xxdd| 99久久免费国产| 欧美三级韩国三级日本一级| 日韩欧美一级精品久久| 国产三级一区二区| 日韩码欧中文字| 亚洲午夜一区二区三区| 麻豆一区二区三| 国产精品1区二区.| 色94色欧美sute亚洲13| 欧美一区二区三区电影| 久久久美女毛片| 一区二区在线免费观看| 蜜臀精品一区二区三区在线观看 | 视频一区欧美精品| 国产一区二区三区蝌蚪| 成人av先锋影音| 欧美日韩五月天| 久久综合久久综合亚洲| 亚洲精品国产第一综合99久久| 爽好久久久欧美精品| 国产69精品久久久久毛片| 欧美亚洲国产一区二区三区| 久久―日本道色综合久久| 亚洲欧洲在线观看av| 免费观看成人av| 91天堂素人约啪| 欧美成人一区二区三区在线观看| 亚洲四区在线观看| 精品一区二区在线看| 99riav久久精品riav| 欧美sm极限捆绑bd| 亚洲综合成人在线| 国产成人免费9x9x人网站视频| 欧美色中文字幕| 国产精品久线在线观看| 美女脱光内衣内裤视频久久影院| 91免费版在线| 国产日韩欧美综合在线| 免费成人av在线| 91久久免费观看| 中文字幕乱码久久午夜不卡 | 日韩av一级电影| 色综合久久天天| 国产欧美日韩不卡免费| 老鸭窝一区二区久久精品| 日本高清成人免费播放| 日本一二三不卡| 国内久久精品视频| 欧美精品日日鲁夜夜添| 亚洲免费观看高清完整版在线观看 | **网站欧美大片在线观看| 久草热8精品视频在线观看| 91精品办公室少妇高潮对白| 国产精品亲子乱子伦xxxx裸| 久久精品国产久精国产爱| 欧美日韩色综合| 一级中文字幕一区二区| 99久久夜色精品国产网站| 久久奇米777| 国内不卡的二区三区中文字幕| 欧美人成免费网站| 亚洲午夜久久久久久久久久久| www.在线成人| 国产精品久久久久久久久图文区| 国产一级精品在线| 日韩欧美一二三区| 日本不卡免费在线视频| 欧美丰满一区二区免费视频| 五月婷婷久久综合| 欧美三级视频在线| 亚洲成av人片在线| 欧美亚一区二区| 亚洲午夜激情网页| 欧美视频日韩视频在线观看| 亚洲一区二区三区四区在线观看 | 久久国产免费看| 精品久久久久久久久久久久久久久| 日韩二区在线观看| 3d动漫精品啪啪| 奇米综合一区二区三区精品视频| 欧美二区三区91| 青青草伊人久久| 精品乱人伦小说| 国产美女av一区二区三区| 欧美精品一区二区三区视频| 国产一区二区日韩精品| 国产欧美精品在线观看| 国产精品亚洲午夜一区二区三区 | 色综合网色综合| 一区二区三区在线高清| 在线亚洲人成电影网站色www| 亚洲精品国产一区二区三区四区在线| 色综合久久综合网欧美综合网| 亚洲黄色在线视频| 欧美日韩三级一区| 久久国产福利国产秒拍| 久久久精品国产免大香伊| 成人福利视频在线看| 一区二区三区四区在线| 911精品国产一区二区在线| 热久久免费视频| 日本一区二区在线不卡| 99国产精品久久久| 婷婷六月综合网| 精品国精品国产尤物美女| 国产精品一级片在线观看| 一区在线观看视频| 欧美日韩另类国产亚洲欧美一级| 看片的网站亚洲| 国产精品美女久久久久久久久| 91麻豆成人久久精品二区三区| 亚洲国产精品一区二区www在线| 日韩一区二区三区在线视频| 国产不卡视频一区二区三区| 亚洲免费在线视频一区 二区| 911精品国产一区二区在线| 国产麻豆精品在线观看| 国产精品激情偷乱一区二区∴| 欧美午夜精品一区二区三区| 精品一区二区在线免费观看| 中文字幕一区二区三区在线不卡 | 亚洲国产成人自拍| 欧美日本一区二区| 国产精品资源站在线| 一区二区在线看| 精品精品国产高清一毛片一天堂| 91丨国产丨九色丨pron| 免费看欧美美女黄的网站| 中文字幕乱码一区二区免费| 欧美日韩国产另类一区| 国产成人免费视频一区| 亚洲高清久久久| 国产精品视频一二三区| 欧美肥大bbwbbw高潮| 成人午夜电影小说| 蜜臀av一级做a爰片久久| 国产精品国产三级国产aⅴ入口| 在线播放中文字幕一区| 99视频精品免费视频| 理论电影国产精品| 亚洲最快最全在线视频| 国产丝袜欧美中文另类| 欧美一区二区视频在线观看| 色综合天天综合在线视频| 狠狠色伊人亚洲综合成人| 午夜精品久久久久久久久久| 综合久久国产九一剧情麻豆| 精品久久一区二区三区| 欧美剧在线免费观看网站| 成人性生交大片免费看视频在线| 免费看黄色91| 亚洲va在线va天堂| 亚洲免费资源在线播放| 久久久久久久久久久久久久久99 | 成人18视频日本| 国产乱码精品一品二品| 蜜臀av性久久久久蜜臀av麻豆| 亚洲综合色婷婷| 成人免费在线播放视频| 国产亚洲成年网址在线观看| 欧美成人aa大片| 欧美一级日韩一级| 欧美色网一区二区| 一本到高清视频免费精品| 成人黄色免费短视频| 国产乱码一区二区三区| 狠狠色丁香久久婷婷综| 美日韩一级片在线观看| 日韩精品亚洲一区二区三区免费| 伊人夜夜躁av伊人久久| 日韩久久一区二区| ...中文天堂在线一区| 1024国产精品| 亚洲视频一区在线| 国产精品久久免费看| 国产精品乱人伦中文| 国产精品久线在线观看|