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

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

?? flash.c

?? 完整的Bell實驗室的嵌入式文件系統TFS
?? C
?? 第 1 頁 / 共 2 頁
字號:
sectortoaddr(int sector,int *size,uchar **base){    struct flashinfo *fbnk;    struct  sectorinfo *sinfo;    int     dev, sec, i;    sec = 0;    for(dev=0;dev<FLASHBANKS;dev++) {        fbnk = &FlashBank[dev];        for(i=0;i<fbnk->sectorcnt;i++,sec++) {            if (sec == sector) {                sinfo = &fbnk->sectors[i];                if (base) *base = sinfo->begin;                if (size) *size = sinfo->size;                return(0);            }        }    }    printf("sectortoaddr(%d) failed\n",sector);    return(-1);}/* flashbankinfo(): *  Based on the incoming bank number, return the beginning, end and *  number of sectors within that bank. */intflashbankinfo(int bank,uchar **begin,uchar **end,int *sectorcnt){    struct flashinfo *fbnk;    if (bank >= FLASHBANKS)        return(-1);    fbnk = &FlashBank[bank];    if (begin)        *begin = fbnk->base;    if (end)        *end = fbnk->end;    if (sectorcnt)        *sectorcnt = fbnk->sectorcnt;    return(0);}/* lastlargesector(): *  Incoming bank number is used to populate the sector information *  (sector number, sector size and address) of the last large sector *  in the specified bank. *  Return 0 if successful; else -1. */intlastlargesector(int bank,int *sector,int *size,uchar **base){    struct flashinfo    *fbnk;    struct sectorinfo   *sinfo;    uchar               *largest_sbase;    int                 i, largest_ssize, largest_snum;    if (bank >= FLASHBANKS) {        printf("lastlargesector(%d) failed\n",bank);        return(-1);    }    fbnk = &FlashBank[bank];    sinfo = fbnk->sectors;    largest_ssize = 0;    largest_snum = 0;    largest_sbase = (uchar *)0;    for(i=0;i<fbnk->sectorcnt;i++,sinfo++) {        if (sinfo->size >= largest_ssize) {            largest_ssize = sinfo->size;            largest_snum = sinfo->snum;            largest_sbase = sinfo->begin;        }    }    if (sector)        *sector = largest_snum;    if (size)        *size = largest_ssize;    if (base)        *base = largest_sbase;    return(0);}voidLowerFlashProtectWindow(){    if (FlashProtectWindow)        FlashProtectWindow--;}/* AppFlashWrite(): *  Takes in a source, destination and byte count and converts that to *  the appropriate flashwrite() call.  This function supports the possibility *  of having one write request span across multiple devices in contiguous *  memory space. */intAppFlashWrite(dest,src,bytecnt)ulong   *src, *dest;long bytecnt;{    struct flashinfo *fbnk;    ulong   oints;    int     ret, tmpint;    long    tmpcnt;    ret = 0;    while(bytecnt > 0) {        fbnk = addrtobank((uchar *)dest);        if (!fbnk)            return(-1);            if (((int)dest + bytecnt) <= (int)(fbnk->end))            tmpcnt = bytecnt;        else            tmpcnt = ((int)(fbnk->end) - (int)dest) + 1;            oints = FLASH_INTSOFF();        ret = flashwrite(fbnk,(uchar *)dest,(uchar *)src,tmpcnt);        FLASH_INTSRESTORE(oints);        if (ret < 0) {            printf("AppFlashWrite(0x%lx,0x%lx,%ld) failed\n",                (ulong)dest,(ulong)src,bytecnt);            break;        }        tmpint = (int)dest;        tmpint += tmpcnt;        dest = (ulong *)tmpint;        tmpint = (int)src;        tmpint += tmpcnt;        src = (ulong *)tmpint;        bytecnt -= tmpcnt;    }    return(ret);}intAppFlashEraseAll(){    int     ret, i;    ulong   oints;    struct  flashinfo *fbnk;    ret = 0;    oints = FLASH_INTSOFF();    fbnk = FlashBank;    for(i=0;i<FLASHBANKS;i++,fbnk++) {        ret = flasherase(fbnk,ALL_SECTORS);        if (ret == -1)            break;    }    FLASH_INTSRESTORE(oints);    return(ret);}/* Erase the flash sector specified. */intAppFlashErase(snum) /* erase specified sector */int snum;{    ulong   oints;    uchar   *base;    int     ret, size;    struct  flashinfo *fbnk;    sectortoaddr(snum,&size,&base);    fbnk = addrtobank(base);    if (!fbnk)        return(-1);    oints = FLASH_INTSOFF();    ret = flasherase(fbnk,snum);    FLASH_INTSRESTORE(oints);    return(ret);}/* sectorProtect(): *  Set or clear (based on value of protect) the protected flag for the *  specified range of sectors... *  This supports incoming ranges that can be dash and/or comma delimited. *  For example a range can be "0", "0-3", or "0,2-4", etc... */intsectorProtect(char *range, int protect){    struct  flashinfo *fbnk;    int i, dev, snum;    snum = 0;    for(dev = 0;dev < FLASHBANKS;dev++) {        fbnk = &FlashBank[dev];        for(i = 0;i < fbnk->sectorcnt;i++,snum++) {            if (inRange(range,snum))                fbnk->sectors[i].protected = protect;        }    }    return(0);}#ifdef FLASHRAM_BASE/* FlashRamInit(): * This monitor supports TFS space allocated across multiple flash devices * that may not be in contiguous memory space.  To allow BBRAM to be seen * as a "flash-like" device to TFS, we set it up in sectors similar to * those in a real flash device. * Input... *  snum:   All the "flash" space is broken up into individual sectors. *          This is the starting sector number that is to be used for *          the block of sectors within this BBRAM space. *  fbnk:   Pointer to the structure that must be populated with the *          flash bank information.  Usually this contains pointers to the *          functions that operate on the flash; but for RAM they aren't *          necessary. *  sinfo:  Table populated with the characteristics (size, start, etc...) *          of each sector. *  ssizes: A table containing the size of each of the sectors.  This is *          copied to the sinfo space. */intFlashRamInit(int snum, int scnt, struct flashinfo *fbnk,            struct sectorinfo *sinfo, int *ssizes){    int i;    uchar   *begin;    /* FLASHRAM_SECTORCOUNT (in config.h) must match the number of sectors     * allocated to the flash ram device in flashdev.c...     */    if (scnt != FLASHRAM_SECTORCOUNT)        printf("Warning: flashram sector count inconsistency\n");    fbnk->id = FLASHRAM;                        /* Device id. */    fbnk->base = (uchar *)FLASHRAM_BASE;        /* Base address of bank. */    fbnk->end = (uchar *)FLASHRAM_END;          /* End address of bank. */    fbnk->sectorcnt = scnt;                     /* Number of sectors. */    fbnk->width = 1;                            /* Width (in bytes). */    fbnk->fltype = NotUsed;                     /* Flashtype() function. */    fbnk->flerase = NotUsed;                    /* Flasherase() function. */    fbnk->flwrite = NotUsed;                    /* Flashwrite() function. */    fbnk->flewrite = NotUsed;                   /* Flashewrite() function. */    fbnk->sectors = sinfo;                  /* Ptr to sector size table. */    begin = fbnk->base;    for(i=0;i<fbnk->sectorcnt;i++,snum++) {        sinfo[i].snum = snum;        sinfo[i].size = ssizes[i];        sinfo[i].begin = begin;        sinfo[i].end = sinfo[i].begin + sinfo[i].size - 1;        sinfo[i].protected = 0;        begin += sinfo[i].size;    }    return(snum);}#endifchar *FlashHelp[] = {    "Flash memory operations",    "{op} [args]",    "Ops...",    "  opw",    "  info [rnge]",    "  init",    "  bank [#]",    "  prot {rnge}",    "  unprot {rnge}",#if FLASH_LOCK_SUPPORTED    "  lock {rnge}",    "  unlock {rnge}",    "  lockdwn {rnge}",#endif    "  erase {rnge}",    "  write {dest} {src} {byte_cnt}",    "  ewrite {dest} {src} {byte_cnt}",    "",    "  rnge = range of affected sectors",    0,};/* FlashCmd(): *  Code that handles the user interface.  See FlashHelp[] below for usage. */intFlashCmd(int argc,char *argv[]){    int     snum, ret;    ulong   dest, src, oints;    long    bytecnt, rslt;    struct  flashinfo *fbnk;    oints = FLASH_INTSOFF();    fbnk = &FlashBank[FlashCurrentBank];    ret = CMD_SUCCESS;    if (strcmp(argv[1],"init") == 0)        FlashInit();    else if (strcmp(argv[1],"info") == 0) {        showflashinfo(fbnk,argv[2]);    }    else if (strcmp(argv[1],"bank") == 0)  {        int tmpbank;        if (argc == 3) {            tmpbank = atoi(argv[2]);            if (tmpbank < FLASHBANKS)                FlashCurrentBank = tmpbank;            printf("Subsequent flash ops apply to bank %d\n",FlashCurrentBank);        }        else             printf("Current flash bank: %d\n",FlashCurrentBank);    }    else if (strcmp(argv[1],"ewrite") == 0) {        if (argc == 5) {            dest = strtoul(argv[2],(char **)0,0);            src = strtoul(argv[3],(char **)0,0);            bytecnt = (long)strtoul(argv[4],(char **)0,0);            if (flashewrite(fbnk,(uchar *)dest,(uchar *)src,bytecnt) == -1) {                printf("ewrite failed\n");                ret = CMD_FAILURE;            }        }        else            ret = CMD_PARAM_ERROR;    }    else if (!strcmp(argv[1],"write")) {        if (argc == 5) {            dest = strtoul(argv[2],(char **)0,0);            src = strtoul(argv[3],(char **)0,0);            bytecnt = (long)strtoul(argv[4],(char **)0,0);#if 0            rslt = flashwrite(fbnk,(uchar *)dest,(uchar *)src,bytecnt);#else            rslt = AppFlashWrite((ulong *)dest,(ulong *)src,bytecnt);#endif            if (rslt == -1) {                printf("Write failed\n");                ret = CMD_FAILURE;            }        }        else            ret = CMD_PARAM_ERROR;    }    else if (!strcmp(argv[1],"opw")) {        if (getUsrLvl() != MAXUSRLEVEL)            printf("Must be user level %d\n",MAXUSRLEVEL);        else                FlashProtectWindow = 2;    }    else if (!strcmp(argv[1],"unprot")) {        if (argc != 3)            ret = CMD_PARAM_ERROR;        else            sectorProtect(argv[2],0);    }    else if (!strcmp(argv[1],"prot")) {        if (argc != 3)             ret = CMD_PARAM_ERROR;        else            sectorProtect(argv[2],1);    }    else if (!strcmp(argv[1],"erase")) {        if (argc != 3) {            ret = CMD_PARAM_ERROR;        }        else {            for(snum=fbnk->sectors[0].snum;snum<fbnk->sectorcnt;snum++) {                if (inRange(argv[2],snum)) {                    if (flasherase(fbnk,snum) == -1) {                        printf("Erase failed\n");                        ret = CMD_FAILURE;                        break;                    }                }            }        }    }#if FLASH_LOCK_SUPPORTED    else if ((!strcmp(argv[1],"lock")) || (!strcmp(argv[1],"unlock")) ||        (!strcmp(argv[1],"lockdwn"))) {        extern int flashlock(struct flashinfo *fbnk,int snum,int operation);        int operation, snum;        if (!strcmp(argv[1],"lock"))             operation = FLASH_LOCK;        else if (!strcmp(argv[1],"unlock"))             operation = FLASH_UNLOCK;        else            operation = FLASH_LOCKDWN;        if (argc != 3)            ret = CMD_PARAM_ERROR;        else {            for(snum=fbnk->sectors[0].snum;snum<fbnk->sectorcnt;snum++) {                if (inRange(argv[2],snum)) {                    if (flashlock(fbnk,snum,operation) == -1) {                        printf("Erase failed\n");                        ret = CMD_FAILURE;                        break;                    }                }            }        }    }#endif    else {        ret = CMD_PARAM_ERROR;    }    FLASH_INTSRESTORE(oints);    return(ret);}intNotUsed(){    printf("ERROR: flash operation not supported\n");    return(0);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久色欧美综合狠狠| 日韩一级完整毛片| 国产乱码精品一区二区三| 日本sm残虐另类| 日韩经典一区二区| 日本亚洲三级在线| 蜜桃一区二区三区四区| 免费在线观看成人| 国产自产2019最新不卡| 国产盗摄一区二区| 99久久伊人精品| 色视频成人在线观看免| 在线观看亚洲精品视频| 在线成人午夜影院| 精品国产精品网麻豆系列| 国产夜色精品一区二区av| 精品卡一卡二卡三卡四在线| 久久久国产精品麻豆| |精品福利一区二区三区| 亚洲v中文字幕| 久久草av在线| av一区二区三区四区| 日本精品视频一区二区三区| 91精品午夜视频| 国产日韩亚洲欧美综合| 香港成人在线视频| 日韩影院免费视频| 高清不卡在线观看| 在线一区二区视频| 欧美一区二区精美| 国产清纯白嫩初高生在线观看91 | 91免费在线看| 欧美日韩1区2区| 国产亚洲一区二区三区| 亚洲综合一区在线| 精品一区免费av| 波波电影院一区二区三区| 欧美高清视频不卡网| 国产婷婷一区二区| 亚洲成av人片在线观看无码| 国产激情一区二区三区四区| 91久久精品一区二区二区| 日韩精品一区在线| 亚洲欧美韩国综合色| 精品一区二区三区免费视频| 99热精品一区二区| 日韩免费性生活视频播放| 亚洲品质自拍视频| 国产激情91久久精品导航| 欧美日韩精品系列| 自拍偷拍国产亚洲| 国产成a人亚洲精品| 日韩一区二区三区免费看 | 色婷婷av久久久久久久| 欧美xingq一区二区| 亚洲一区在线播放| av在线不卡网| 中文字幕高清一区| 韩国一区二区视频| 日韩一区二区电影| 五月天网站亚洲| 色美美综合视频| 国产精品久久看| 国产成人免费视| 精品国产乱码久久久久久免费| 亚洲亚洲精品在线观看| 97精品超碰一区二区三区| 国产亚洲综合在线| 国产在线精品一区二区三区不卡 | 欧美日韩国产首页在线观看| 成人免费在线视频观看| 不卡视频免费播放| 国产精品久久99| 丁香婷婷综合五月| 中文字幕成人av| 丁香婷婷综合激情五月色| 久久精品一区二区三区不卡牛牛| 精品写真视频在线观看| 精品久久久久久无| 韩国三级电影一区二区| 国产色爱av资源综合区| 成人综合婷婷国产精品久久蜜臀| 久久精品一级爱片| 国产一区999| 久久久久久久综合| 成人网男人的天堂| 亚洲精品视频在线观看免费| 欧美性受xxxx| 日韩成人一级大片| 欧美精品一区视频| 国产成人三级在线观看| 国产精品全国免费观看高清 | 日韩国产在线观看一区| 欧美一区国产二区| 国产九色sp调教91| 国产精品久久午夜夜伦鲁鲁| 色久综合一二码| 日韩精品久久久久久| 欧美精品一区二区在线播放| 成人免费高清视频| 一区二区三区加勒比av| 欧美一级视频精品观看| 国产美女一区二区三区| 国产精品伦一区二区三级视频| 91久久线看在观草草青青 | 美女免费视频一区二区| 26uuu欧美| 色综合久久综合| 免费成人结看片| 中文字幕欧美一区| 91精品国产综合久久久久久| 国产激情91久久精品导航| 亚洲精品国产一区二区三区四区在线 | 亚洲日穴在线视频| 欧美一区二区三区免费观看视频 | 亚洲一区二区三区视频在线播放| 欧美一区二区啪啪| av中文字幕在线不卡| 免费看日韩a级影片| 国产精品区一区二区三区| 欧美日韩一级黄| 国产99久久久国产精品免费看| 亚洲影视在线观看| 国产精品免费视频一区| 精品国产髙清在线看国产毛片| 色婷婷亚洲综合| 成人综合激情网| 狠狠狠色丁香婷婷综合激情| 天堂影院一区二区| 亚洲男人天堂av| 国产精品高潮呻吟| 国产午夜精品久久久久久免费视| 欧美日韩不卡在线| 在线一区二区三区四区五区| 成人高清视频在线观看| 国产美女精品在线| 激情五月播播久久久精品| 日本亚洲欧美天堂免费| 午夜精品一区二区三区免费视频| 亚洲青青青在线视频| 中文字幕亚洲不卡| 欧美国产一区视频在线观看| 久久午夜国产精品| 欧美α欧美αv大片| 欧美肥大bbwbbw高潮| 在线观看日韩电影| 成人激情视频网站| 丁香天五香天堂综合| 国内精品国产成人国产三级粉色| 亚洲综合免费观看高清在线观看| 国产视频一区在线播放| 亚洲国产精品传媒在线观看| 精品美女一区二区三区| 欧美美女网站色| 欧美亚洲日本一区| 6080国产精品一区二区| 欧美亚洲愉拍一区二区| www.亚洲色图.com| 国产99久久久国产精品免费看| 亚洲国产一区二区在线播放| 中文字幕一区二区三区四区不卡| 欧美激情一区二区三区在线| 久久亚洲欧美国产精品乐播| 精品噜噜噜噜久久久久久久久试看| 91麻豆精品国产无毒不卡在线观看| 欧美性大战久久久| 日韩午夜精品电影| xnxx国产精品| 久久综合一区二区| 精品国产乱码久久久久久1区2区| 国产欧美日韩麻豆91| 国产欧美综合在线| 国产精品久久久99| 久久女同互慰一区二区三区| 国产精品色在线观看| ...xxx性欧美| 亚洲一区二区三区在线看| 亚洲伦在线观看| 男人的天堂久久精品| 激情成人综合网| 国产99久久久久| 91 com成人网| 精品88久久久久88久久久| 久久精品日韩一区二区三区| 日韩亚洲欧美高清| 亚洲欧洲一区二区在线播放| 亚洲视频香蕉人妖| 污片在线观看一区二区| 亚洲三级小视频| 国内精品第一页| av成人老司机| 欧美日韩色综合| 中文在线免费一区三区高中清不卡| 国产精品污污网站在线观看 | 2欧美一区二区三区在线观看视频| 久久久精品欧美丰满| 综合激情成人伊人| 亚洲日本韩国一区| 国产精品一区二区视频| 欧洲国内综合视频|