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

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

?? flash.c

?? ARM的bootloader代碼.rar
?? C
字號:
/* * (C) Copyright 2000 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that 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 <armboot.h>extern flash_info_t	flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips	*//*----------------------------------------------------------------------- * Set protection status for monitor sectors * * The monitor always occupies the _first_ part of the _first_ Flash bank. */void flash_protect (int flag, ulong from, ulong to, flash_info_t *info){    ulong b_end = info->start[0] + info->size - 1;	/* bank end address */    short s_end = info->sector_count - 1;	/* index of last sector */    int i;        /* Do nothing if input data is bad. */    if (info->sector_count == 0 || info->size == 0 || to < from) {	return;    }        /* There is nothing to do if we have no data about the flash     * or the protect range and flash range don't overlap.     */    if (info->flash_id == FLASH_UNKNOWN ||	to < info->start[0] || from > b_end) {	return;    }        for (i=0; i<info->sector_count; ++i) {	ulong end;		/* last address in current sect	*/		end = (i == s_end) ? b_end : info->start[i + 1] - 1;		/* Update protection if any part of the sector	 * is in the specified range.	 */	if (from <= end && to >= info->start[i]) {	    if (flag & FLAG_PROTECT_CLEAR) {		info->protect[i] = 0;	    }	    else if (flag & FLAG_PROTECT_SET) {		info->protect[i] = 1;	    }	}    }}/*----------------------------------------------------------------------- */flash_info_t *  addr2info (ulong addr){    flash_info_t *info;    int i;    for (i=0, info=&flash_info[0]; i<CFG_MAX_FLASH_BANKS; ++i, ++info) {	if (info->flash_id != FLASH_UNKNOWN &&	    addr >= info->start[0] &&	    /* WARNING - The '- 1' is needed if the flash	     * is at the end of the address space, since	     * info->start[0] + info->size wraps back to 0.	     * Please don't change this unless you understand this.	     */	    addr <= info->start[0] + info->size - 1) {	    return (info);	}    }        return (NULL);}/*----------------------------------------------------------------------- * Copy memory to flash. * Make sure all target addresses are within Flash bounds, * and no protected sectors are hit. *  * If return code negative -> Flash Error ERR_xyz * Returns 0 (ERR_OK) if operation succeeded.  */int flash_write (uchar *src, ulong addr, ulong cnt){    int i;    ulong         end        = addr + cnt - 1;    flash_info_t *info_first = addr2info (addr);    flash_info_t *info_last  = addr2info (end );    flash_info_t *info;        if (cnt == 0) {	return (ERR_OK);    }        if (!info_first || !info_last) {	return (ERR_INVAL);    }        for (info = info_first; info <= info_last; ++info) {	ulong b_end = info->start[0] + info->size;	/* bank end addr */	short s_end = info->sector_count - 1;	for (i=0; i<info->sector_count; ++i) {	    ulong e_addr = (i == s_end) ? b_end : info->start[i + 1];	    	    if ((end >= info->start[i]) && (addr < e_addr) &&		(info->protect[i] != 0) ) {		return (ERR_PROTECTED);	    }	}    }        /* finally write data to flash */    for (info = info_first; info <= info_last && cnt>0; ++info) {	ulong len;		len = info->start[0] + info->size - addr;	if (len > cnt)	  len = cnt;	if ((i = write_buff(info, src, addr, len)) != 0) {	    return (i);	}	cnt  -= len;	addr += len;	src  += len;    }    return (ERR_OK);}/*----------------------------------------------------------------------- * Erase Flash sectors *  * If return code negative -> Flash Error ERR_xyz * If successful, returns number of erased sectors. */int flash_sect_erase (ulong addr_first, ulong addr_last){    flash_info_t *info;    ulong bank;    int s_first, s_last;    int erased;    int rc = ERR_OK;       erased = 0;        for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) {	ulong b_end;	int sect;		if (info->flash_id == FLASH_UNKNOWN) {	    continue;	}		b_end = info->start[0] + info->size - 1; /* bank end addr */		s_first = -1;		/* first sector to erase	*/	s_last  = -1;		/* last  sector to erase	*/		for (sect=0; sect < info->sector_count; ++sect) {	    ulong end;		/* last address in current sect	*/	    short s_end;	    	    s_end = info->sector_count - 1;	    	    end = (sect == s_end) ? b_end : info->start[sect + 1] - 1;	    	    if (addr_first > end)	      continue;	    if (addr_last < info->start[sect])	      continue;	    if (addr_first == info->start[sect]) {		s_first = sect;	    }	    if (addr_last  == end) {		s_last  = sect;	    }	}	if (s_first>=0 && s_first<=s_last) {	    erased += s_last - s_first + 1;	    rc = flash_erase (info, s_first, s_last);	}	if (rc)	  break;    }    return erased ? erased : rc;}/*----------------------------------------------------------------------- */void flash_perror(int err){    switch (err)    {    case ERR_OK:	break;    case ERR_TIMOUT:	printf ("Timeout writing to Flash\n");	break;    case ERR_NOT_ERASED:	printf ("Flash not Erased\n");	break;    case ERR_PROTECTED:	printf ("Can't write to protected Flash sectors\n");	break;    case ERR_INVAL:	printf ("Outside available Flash\n");	break;    case ERR_ALIGN:	printf ("Start and/or end address not on sector boundary\n");	break;    case ERR_UNKNOWN_FLASH_VENDOR:	printf ("Unknown Vendor of Flash\n");	break;    case ERR_UNKNOWN_FLASH_TYPE:	printf ("Unknown Type of Flash\n");	break;    case ERR_PROG_ERROR:	printf ("General Flash Programming Error\n");	break;    default:	printf ("%s[%d] FIXME: rc=%d\n",__FILE__,__LINE__,err);	break;    }}/*----------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久| 91在线观看地址| 99免费精品视频| 日韩午夜在线观看视频| 亚洲精品日产精品乱码不卡| 黄色资源网久久资源365| 欧美在线观看一区二区| 中文字幕永久在线不卡| 美女一区二区视频| 欧美日韩激情一区二区三区| 亚洲男人天堂一区| 国产精品 欧美精品| 日韩免费观看高清完整版在线观看| 亚洲精品国产第一综合99久久| 国产剧情一区二区| 精品久久久久久久一区二区蜜臀| 一区二区三区欧美| 97久久超碰国产精品电影| 久久久久国产成人精品亚洲午夜| 麻豆国产精品777777在线| 欧美电影影音先锋| 午夜视频一区二区| 欧美久久一二区| 亚洲曰韩产成在线| 日本精品视频一区二区| 亚洲精品视频一区二区| 色综合网站在线| 亚洲蜜臀av乱码久久精品| 91网站最新网址| 日韩理论片中文av| 91在线精品秘密一区二区| 国产精品蜜臀av| 91丨九色丨尤物| 一区二区三区欧美日韩| 欧美日韩一区二区三区视频| 亚洲成av人片| 91精品啪在线观看国产60岁| 老鸭窝一区二区久久精品| 精品国产免费一区二区三区四区| 精品一区二区av| 欧美韩国日本不卡| 99久久婷婷国产综合精品电影| 中文字幕日韩精品一区| 色先锋资源久久综合| 亚洲一二三四区| 7777精品伊人久久久大香线蕉完整版 | 91精品国产综合久久小美女| 天天综合网天天综合色| 精品免费一区二区三区| 国产一区二区三区美女| 自拍偷拍亚洲综合| 欧美日韩一区二区三区不卡 | 成人av免费在线播放| 一区二区三区欧美视频| 欧美一级视频精品观看| 国产美女精品人人做人人爽| 中文字幕一区三区| 欧美精品一二三| 国产精品系列在线观看| 亚洲欧美另类综合偷拍| 日韩一级完整毛片| av资源网一区| 日韩精品成人一区二区三区| 国产欧美一区在线| 欧美日韩一级大片网址| 黑人巨大精品欧美黑白配亚洲| 国产精品欧美经典| 91麻豆精品国产91久久久久久久久| 国产一区二区美女诱惑| 亚洲免费观看高清在线观看| 欧美大肚乱孕交hd孕妇| 99久久精品99国产精品| 日韩和欧美一区二区| 中文天堂在线一区| 91精品国模一区二区三区| 91一区二区三区在线播放| 久久国产精品色| 亚洲一区二区三区四区五区中文 | 在线不卡一区二区| 国产成人综合在线播放| 视频在线在亚洲| 中文字幕在线不卡视频| 欧美精品一区二区三区久久久 | 久久久美女毛片| 欧美人伦禁忌dvd放荡欲情| 成人性生交大片| 极品美女销魂一区二区三区 | 这里只有精品99re| 成人福利视频在线看| 美女网站在线免费欧美精品| 亚洲成人手机在线| 亚洲天天做日日做天天谢日日欢| 欧美精品一区二区蜜臀亚洲| 欧美日韩免费电影| 在线观看亚洲精品| 99久久99精品久久久久久| 国产乱码精品一品二品| 精品在线观看视频| 麻豆国产91在线播放| 日本午夜精品一区二区三区电影| 亚洲国产一区二区三区青草影视| 最新成人av在线| 国产精品久久久久久亚洲伦| 久久精品夜色噜噜亚洲a∨| 欧美成人免费网站| 欧美mv日韩mv亚洲| 精品国产麻豆免费人成网站| 日韩欧美国产麻豆| 精品国产乱码久久久久久免费| 欧美精品久久99| 欧美一区二区三区白人| 欧美一区二区在线免费播放| 91精品国产美女浴室洗澡无遮挡| 欧美日韩夫妻久久| 欧美日韩一级二级三级| 欧美欧美午夜aⅴ在线观看| 欧美日韩亚州综合| 日韩一区二区在线看| 精品人在线二区三区| 久久久久久久久久久久电影| 国产日韩欧美综合在线| 中文字幕一区二区视频| 一区二区视频免费在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲一二三区在线观看| 男男视频亚洲欧美| 国产盗摄一区二区| 一本一本大道香蕉久在线精品| 欧美亚洲一区二区在线| 日韩欧美成人一区| 久久精品亚洲一区二区三区浴池| 国产精品家庭影院| 亚洲电影你懂得| 国产麻豆欧美日韩一区| 99久久夜色精品国产网站| 欧美三日本三级三级在线播放| 91精品国产综合久久福利软件| 亚洲精品在线观看网站| 亚洲国产高清在线| 亚洲国产精品久久不卡毛片| 免费美女久久99| 99国产精品久久| 日韩午夜激情视频| 国产精品欧美一级免费| 午夜激情久久久| 国产91色综合久久免费分享| 91国产丝袜在线播放| 精品久久久久久久人人人人传媒 | 国产片一区二区| 一区二区三区高清不卡| 麻豆精品一区二区三区| 99精品热视频| 精品国产一区久久| 亚洲精品综合在线| 国产精品一区二区男女羞羞无遮挡 | 欧美变态tickling挠脚心| 亚洲色图色小说| 国产老肥熟一区二区三区| 欧美性生交片4| 中文字幕成人网| 免费成人结看片| 欧美中文字幕一二三区视频| 国产欧美一区二区三区在线看蜜臀 | 亚洲欧美福利一区二区| 国产一区二区成人久久免费影院 | 亚洲一区日韩精品中文字幕| 极品尤物av久久免费看| 欧美日韩成人一区二区| 中文字幕佐山爱一区二区免费| 麻豆精品一区二区av白丝在线| 日本精品一级二级| 国产精品久久国产精麻豆99网站| 秋霞国产午夜精品免费视频| 日本韩国欧美一区二区三区| 国产日韩欧美综合一区| 麻豆视频一区二区| 91精品国产手机| 亚洲一区二区三区激情| 色域天天综合网| 国产精品久久毛片| 国产精品1区2区3区在线观看| 欧美一区二区网站| 亚洲国产精品一区二区www| 色综合色综合色综合色综合色综合| 久久久综合九色合综国产精品| 美女网站视频久久| 日韩欧美一级在线播放| 丝袜亚洲另类欧美| 欧美日韩一区二区三区免费看| 亚洲精品欧美专区| 欧美在线看片a免费观看| 亚洲欧美日韩一区二区三区在线观看| 成人影视亚洲图片在线| 国产精品欧美综合在线| 成人免费视频一区二区| 国产精品色婷婷久久58| 91视频在线观看免费| 亚洲精品免费一二三区| 在线观看国产一区二区| 亚洲午夜久久久久久久久电影网 |