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

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

?? flashpic.c

?? umon bootloader source code, support mips cpu.
?? C
字號(hào):
/* flashpic.c:
   This file contains the flash-support code that is relocated to
   RAM prior to execution.  This file currently only supports the
   device when configured in 16-bit mode.
*/
#include "config.h"
#if INCLUDE_FLASH
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned long ulong;
typedef volatile unsigned char vuchar;
typedef volatile unsigned short vushort;
typedef volatile unsigned long vulong;
typedef volatile unsigned int vuint;
typedef volatile int vint;

#include "cpu.h"
#include "flashdev.h"
#include "flash.h"

#define WSMS	0x0080
#define ESS		0x0040
#define ES		0x0020
#define PSS		0x0004
#define PS		0x0010

extern struct flashinfo	Fdev;
extern int FlashProtectWindow;

int
Flashlock16(struct flashinfo *fdev,int snum,int operation)
{
	ulong	add;
	int	sector;

	add = (ulong)(fdev->base);

	/* Lock the requested sector(s): */
	for (sector=0;sector<fdev->sectorcnt;sector++) {
		if ((snum == ALL_SECTORS) || (snum == sector)) {
			/* Issue the appropriate command sequence: */
			Write_60_to_base();	
			switch(operation) {
			case FLASH_UNLOCK:
				Write_d0_to_(add);
				break;
			case FLASH_LOCK:
				Write_01_to_(add);
				break;
			case FLASH_LOCKDWN:
				Write_2f_to_(add);
				break;
			}
		}
		add += fdev->sectors[sector].size;
	}
	Write_FF_to_base();		/* Go to read-array mode */
	return(0);
}

void
EndFlashlock16()
{}

/* Flasherase():
   Based on the 'snum' value, erase the appropriate sector(s).
   Write the "Erase Setup" and "Erase Confirm" commands...
   Return 0 if success, else -1.
*/
int
Flasherase16(struct flashinfo *fdev,int snum)
{
	ulong	add;
	int	ret, sector;

	ret = 0;
	add = (ulong)(fdev->base);

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

			/* See if the sector is already erased: */
			noterased = 0;
			lp = (ulong *)fdev->sectors[sector].begin; 
			lp1 = (ulong *)((char *)lp + fdev->sectors[sector].size - 1); 
			while(lp <= lp1) {
				if (*lp++ != 0xffffffff) {
					noterased = 1;
					break;
				}
			}
			if (noterased) {
				/* Issue the setup/confirm sequence: */
				Write_20_to_base();		/* setup */
				Write_d0_to_(add);		/* confirm */

				/* Wait for sector erase to complete by polling RSR... */
				Write_70_to_base();
				while(1) {
					ushort rsr;

					rsr = Read_0000();
					if (!(rsr & WSMS))	/* Wait till ready */
						continue;
					if (rsr & ESS) 		/* Should not be suspended */
						ret = -1;
					if (rsr & ES) 		/* Should not have error */
						ret = -1;
					break;
				}
				Write_50_to_base();		/* Clear status register */
				Write_FF_to_base();		/* Go to read-array mode */
			}
			if (ret == -1)
				break;
		}
		add += fdev->sectors[sector].size;
	}
	return(ret);
}

/* EndFlasherase():
   Function place holder to determine the "end" of the
   sectorerase() function.
*/
void
EndFlasherase16()
{
}


/* Flashwrite():
   Return 0 if successful, else -1.
*/
int
Flashwrite16(struct flashinfo *fdev,uchar *dest,uchar *src,long bytecnt)
{
	int		i, ret;
	long	cnt;
	uchar 	*src1;
	ftype	val;

	/* If destination address is not properly aligned, then build a fake   */
	/* source buffer based on the current value in dest[-1] and src[0].    */
	/* Then call this function to do that 2-byte operation.  Once that     */
	/* completes, simply increment dest and src by 1 and continue in this  */
	/* context. */
	if (NotAligned(dest)) {
		uchar buf[2];
		buf[0] = *(dest-1);
		buf[1] = *src;
		Flashwrite16(fdev,dest-1,buf,2);
		dest++; src++; bytecnt--;
	}

	/* Each pass through this loop writes 'fdev->width' bytes... */
	ret = 0;
	cnt = bytecnt & ~1;
	src1 = (uchar *)&val;

onemore:
	for (i=0;i<cnt;i+=fdev->width) {

	   /* Just in case src is not aligned... */
		src1[0] = src[0];
		src1[1] = src[1];

		/* Flash program setup command */
		Write_40_to_base();
		  
		/* Write the value */
		Fwrite(dest,src1);

		/* Wait for write to complete or timeout. */
		Write_70_to_base();
		while(1) {
			ushort rsr;

			rsr = Read_0000();
			if (!(rsr & WSMS))	/* Wait till ready */
				continue;
			if (rsr & PSS) 		/* Should not be suspended */
				ret = -1;
			if (rsr & PS) 		/* Should not have error */
				ret = -1;
			break;
		}
		Write_50_to_base();		/* Clear status register */
		Write_FF_to_base();		/* Go to read-array mode */
		dest += fdev->width; 
		src += fdev->width;
	}

	/* If bytecount was odd... */
	/* If cnt != bytecnt then bytecnt is odd, so one more byte must be */
	/* written to flash.  To do this, the one byte must be combined with */
	/* the next byte that is already stored in flash; then re-written... */
	if (cnt != bytecnt) {
		val = (ftype)*dest | ((ftype)(*src) << 8);
		src = (uchar *)&val;
		bytecnt = cnt = 1;
		goto onemore;
	}

	return(ret);
}

/* EndFlashwrite():
	Function place holder to determine the "end" of the
	Flashwrite() function.
*/
void
EndFlashwrite16()
{
}

/* 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 flasherase and flashwrite 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.
*/

int
Flashewrite16(struct flashinfo *fdev,ftype *dest,ftype *src,int bytecnt)
{
	int	i, err;
	ulong	add;
	void	(*reset)();
	ftype	*src1;

	err = 0;
	add = (ulong)(fdev->base);
	src1 = src;

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

		/* Issue the ERASE setup/confirm sequence: */
		Write_20_to_base();		/* setup */
		Write_d0_to_(add);		/* confirm */

		/* Wait for sector erase to complete by polling RSR... */
		Write_70_to_base();
		while(1) {
			ushort rsr;

			rsr = Read_0000();
			if (!(rsr & WSMS))	/* Wait till ready */
				continue;
			if (rsr & ESS) 		/* Should not be suspended */
				err = 1;
			if (rsr & ES) 		/* Should not have error */
				err = 1;
			break;
		}
		Write_50_to_base();		/* Clear status register */
		Write_FF_to_base();		/* Go to read-array mode */
		if (err)
			return(-1);
		add += fdev->sectors[i].size;
	}

	for(i=0;i<bytecnt;i+=fdev->width) {
		/* Flash program setup command */
		Write_40_to_base();
		
		/* Just in case src is not aligned... */
		src1[0] = src[0];
		src1[1] = src[1];

		/* Write the value */
		Fwrite(dest,src1);

		/* Wait for write to complete by polling RSR... */
		Write_70_to_base();
		while(1) {
			ushort rsr;

			rsr = Read_0000();
			if (!(rsr & WSMS))	/* Wait till ready */
				continue;
			if (rsr & PSS) 		/* Should not be suspended */
				err = 1;
			if (rsr & PS) 		/* Should not have error */
				err = 1;
			break;
		}
		Write_50_to_base();		/* Clear status register */
		Write_FF_to_base();		/* Go to read-array mode */
		if (err)
			return(-1);
		dest++; 
		src++;
	}
	
	/* Wait till flash is readable, then reset: */
	while(1) {
		if (Is_Equal((dest-1),src1))
			break;
	}

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

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

/* EndFlashewrite():
	Function place holder to determine the "end" of the
	FlashEraseAndWrite() function.
*/
void
EndFlashewrite16()
{
}

/* Flashtype():
   Use the ReadCOnfiguration command (90H) to read manufacturer code (0000)
   and device id code (0001).
*/

int
Flashtype16(struct flashinfo *fdev)
{
	ftype	val;
	ushort	man, dev;
	ulong	id;

	val = Read_0000();

	/* Issue the read configuration command: */
	Write_90_to_base();

	man = (ushort)Read_0000();	/* manufacturer ID */
	dev = (ushort)Read_0001();	/* device ID */
	id = man;
	id <<= 16;
	id |= dev;

	fdev->id = id;

	/* Issue the read array command: */
	Write_FF_to_base();
	return((int)(fdev->id));
}

/* EndFlashtype():
	Function place holder to determine the "end" of the
	Flashtype() function.
*/
void
EndFlashtype16()
{
}
#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产激情一区二区三区蜜月 | 99re成人在线| 久久在线观看免费| 日日骚欧美日韩| 欧美美女一区二区| 亚洲综合色噜噜狠狠| 精品国产一区久久| 中文字幕电影一区| 国产一区二区网址| 日韩欧美一级特黄在线播放| 亚洲精品免费看| 不卡电影一区二区三区| 国产香蕉久久精品综合网| 精品亚洲成a人| 日韩一二三四区| 日本一区中文字幕| 91精品欧美一区二区三区综合在 | 欧美日韩国产一级| 亚洲一区二区三区自拍| 日本精品免费观看高清观看| 亚洲天天做日日做天天谢日日欢| 成人a区在线观看| 中文字幕在线一区二区三区| 成人久久18免费网站麻豆 | 精品捆绑美女sm三区| 国产综合色精品一区二区三区| 欧美xxxxx裸体时装秀| 国产美女精品人人做人人爽| 国产欧美一区二区精品婷婷| 波多野结衣在线一区| 伊人一区二区三区| 91麻豆精品国产91久久久使用方法 | 欧美成人官网二区| 成人av午夜影院| 亚洲v中文字幕| 欧美精品一区二区久久久| 国产不卡视频在线播放| 亚洲一二三专区| 久久亚洲春色中文字幕久久久| 成人免费看的视频| 无码av免费一区二区三区试看| 日韩久久久精品| 91在线观看成人| 国模一区二区三区白浆| 成人免费视频在线观看| 日韩精品一区二区三区老鸭窝| 国产 欧美在线| 日本不卡1234视频| **欧美大码日韩| 日韩欧美精品三级| 欧美亚洲综合久久| 国产精品一区二区你懂的| 天堂在线亚洲视频| 自拍偷拍欧美精品| 国产日产欧美精品一区二区三区| 欧美日韩一区二区三区在线| 成人性生交大合| 国产成人aaa| 久久激情五月激情| 日av在线不卡| 亚洲最大的成人av| 最新不卡av在线| 国产欧美一二三区| 亚洲精品在线观看网站| 欧美撒尿777hd撒尿| 色狠狠一区二区三区香蕉| 国产精品99久久久久久久女警| 美女看a上一区| 天天射综合影视| 亚洲一区二区三区自拍| 亚洲制服丝袜一区| 一区二区三区在线观看国产 | 日韩一区二区免费视频| 欧美日韩精品一区二区三区四区 | 国产精品视频线看| 国产农村妇女精品| 国产精品福利在线播放| 国产精品久久网站| 日韩美女视频一区二区| 亚洲午夜激情网站| 日韩视频中午一区| 日韩亚洲欧美在线观看| 色偷偷久久人人79超碰人人澡| 国产成人免费在线视频| 91在线国产福利| 日韩欧美国产成人一区二区| 亚洲精品写真福利| 国产精品一二三四五| 欧美伊人久久大香线蕉综合69 | 成人免费视频一区二区| 狠狠色丁香久久婷婷综合_中| 高清不卡在线观看| 99久久99久久免费精品蜜臀| 成人美女视频在线观看| 91麻豆高清视频| 欧美日本在线播放| 欧美乱妇15p| 91精品在线免费| 久久久国产午夜精品| 精品国产一区二区三区不卡| 亚洲国产另类av| 狠狠久久亚洲欧美| 欧美日韩国产精品成人| 国产精品国产馆在线真实露脸| 韩日av一区二区| 欧美一级免费观看| 国产毛片精品一区| 国产精品国产自产拍在线| 国产在线一区二区| 九九视频精品免费| 中文字幕中文乱码欧美一区二区 | 国产精品成人在线观看| 欧美一级一区二区| 972aa.com艺术欧美| 紧缚奴在线一区二区三区| 亚洲综合一区二区| 日本一区免费视频| 欧美刺激午夜性久久久久久久| 色偷偷久久一区二区三区| 高清beeg欧美| 美女脱光内衣内裤视频久久影院| 亚洲视频免费看| 久久久精品国产免大香伊 | 成人aaaa免费全部观看| 免费人成黄页网站在线一区二区| 亚洲卡通欧美制服中文| 国产亚洲一区二区三区在线观看 | 久久久久久久久久电影| 亚洲成av人影院| 欧美日韩中文字幕一区二区| 亚洲精品中文在线| 国产a视频精品免费观看| 制服丝袜一区二区三区| 五月天一区二区| 99久久精品99国产精品| 国产视频一区二区在线| 激情久久久久久久久久久久久久久久| 日本中文字幕一区| 欧美久久久一区| 亚洲欧美日韩国产成人精品影院| 蜜桃一区二区三区四区| 大美女一区二区三区| 国产欧美日韩三区| 欧美精品色一区二区三区| 久久99国产精品久久99果冻传媒| 成人免费小视频| 久久天堂av综合合色蜜桃网| 欧美又粗又大又爽| 丁香五精品蜜臀久久久久99网站| 日日骚欧美日韩| 亚洲精品国久久99热| 日本一区二区三级电影在线观看| 欧美人动与zoxxxx乱| 国产传媒欧美日韩成人| 日韩一区二区三区av| 成人免费视频网站在线观看| 香蕉久久一区二区不卡无毒影院| 久久中文字幕电影| 欧美三区免费完整视频在线观看| 国产一区二区不卡在线| 亚洲图片欧美色图| 国产日韩欧美精品综合| 6080yy午夜一二三区久久| 成人国产在线观看| 毛片av中文字幕一区二区| 亚洲男人电影天堂| 久久嫩草精品久久久精品| 在线视频欧美精品| caoporm超碰国产精品| 国产一区亚洲一区| 日韩极品在线观看| 亚洲香蕉伊在人在线观| 国产精品久久久久久久午夜片| 欧美一区二区三级| 欧美日韩一级片网站| 日本乱人伦一区| 91网站在线播放| 91首页免费视频| av一区二区三区在线| 国产成人免费视频网站| 精品一区二区精品| 久久se精品一区精品二区| 石原莉奈一区二区三区在线观看| 国产精品萝li| 精品毛片乱码1区2区3区| 91麻豆精品一区二区三区| 三级影片在线观看欧美日韩一区二区 | 国产在线视频一区二区| 日韩中文字幕亚洲一区二区va在线| 中文字幕中文乱码欧美一区二区| 国产欧美视频一区二区三区| 久久无码av三级| 中文字幕成人av| 国产精品福利一区| 一区二区三区欧美| 亚洲国产综合人成综合网站| 五月综合激情婷婷六月色窝| 美脚の诱脚舐め脚责91| 韩国三级电影一区二区| 99久久精品免费精品国产|