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

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

?? smc_log.c

?? 這套代碼已經成功一直到S3C44B0X開發板上
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : smc_log.c
Purpose     : Generic logical sector read/write access module for SMC
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
None.
---------------------------END-OF-HEADER------------------------------
*/

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "fs_port.h"
#include "fs_dev.h"
#include "fs_conf.h"

#if FS_USE_SMC_DRIVER

#include "smc.h"


/*********************************************************************
*
*             #define macros
*
**********************************************************************
*/

#define Set_X_Bit(a,b)    (a[(unsigned char)((b)/8)]|= _FS_SMC_BitData[(b)%8])
#define Clr_X_Bit(a,b)    (a[(unsigned char)((b)/8)]&=~_FS_SMC_BitData[(b)%8])
#define Chk_X_Bit(a,b)    (a[(unsigned char)((b)/8)] & _FS_SMC_BitData[(b)%8])


/*********************************************************************
*
*             Local Variables        
*
**********************************************************************
*/

static const char     _FS_SMC_BitData[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };
static unsigned int   _FS_SMC_ErrCode[FS_SMC_MAXUNIT];
static unsigned char  _FS_SMC_SectBuf[SECTSIZE];
static unsigned char  _FS_SMC_WorkBuf[SECTSIZE];
static unsigned char  _FS_SMC_Redundant[REDTSIZE];
static unsigned char  _FS_SMC_WorkRedund[REDTSIZE];
static unsigned short _FS_SMC_Log2Phy[FS_SMC_MAXUNIT][2][MAX_LOGBLOCK];
static unsigned char  _FS_SMC_Assign[FS_SMC_MAXUNIT][2][MAX_BLOCKNUM/8];
static unsigned short _FS_SMC_AssignStart[FS_SMC_MAXUNIT][2];
static unsigned short _FS_SMC_AssignZone[FS_SMC_MAXUNIT];
static unsigned short _FS_SMC_ReadBlock[FS_SMC_MAXUNIT];
static unsigned short _FS_SMC_WriteBlock[FS_SMC_MAXUNIT];
static unsigned int   _FS_SMC_MediaChange[FS_SMC_MAXUNIT];
static unsigned int   _FS_SMC_SectCopyMode[FS_SMC_MAXUNIT];


/*********************************************************************
*
*             Local functions
*
**********************************************************************
*/

/*********************************************************************
*
*             _FS_SMC_Bit_Count
*/

static char _FS_SMC_Bit_Count(unsigned char cdata)
{
    char bitcount=0;
    while(cdata) {
        bitcount+=(cdata &0x01);
        cdata   /=2;
    }
    return(bitcount);
}


/*********************************************************************
*
*             _FS_SMC_Bit_CountWord
*/

static char _FS_SMC_Bit_CountWord(unsigned short cdata)
{
    char bitcount=0;
    while(cdata) {
        bitcount+=(cdata &0x01);
        cdata   /=2;
    }
    return(bitcount);
}

/*********************************************************************
*
*             _FS_SMC_Chk_DataBlank
*/

static int _FS_SMC_Chk_DataBlank(unsigned char *redundant)
{
    char i;
    for(i=0; i<REDTSIZE; i++)
        if(*redundant++!=0xFF)      return(ERROR);
    return(SUCCESS);
}

/*********************************************************************
*
*             _FS_SMC_Chk_FailBlock
*/

static int _FS_SMC_Chk_FailBlock(unsigned char *redundant)
{
    redundant+=REDT_BLOCK;
    if(*redundant==0xFF)            return(SUCCESS);
    if(! *redundant)                return(ERROR);
    if(_FS_SMC_Bit_Count(*redundant)<7)     return(ERROR);
    return(SUCCESS);
}


/*********************************************************************
*
*             _FS_SMC_Chk_CisBlock
*/

static int _FS_SMC_Chk_CisBlock(unsigned char *redundant)
{
    if(! (*(redundant+REDT_ADDR1H)|*(redundant+REDT_ADDR1L)))
        return(SUCCESS);
    if(! (*(redundant+REDT_ADDR2H)|*(redundant+REDT_ADDR2L)))
        return(SUCCESS);
    return(ERROR);
}

/*********************************************************************
*
*             _FS_SMC_Chk_DataStatus
*/

static int _FS_SMC_Chk_DataStatus(unsigned char *redundant)
{
    redundant+=REDT_DATA;
    if(*redundant==0xFF)            return(SUCCESS);
    if(! *redundant)                return(ERROR);
    if(_FS_SMC_Bit_Count(*redundant)<5)     return(ERROR);
    return(SUCCESS);
}


/*********************************************************************
*
*             _FS_SMC_Load_LogBlockAddr
*/

static int _FS_SMC_Load_LogBlockAddr(FS_u32 id,unsigned char *redundant)
{
    unsigned short addr1,addr2;
    addr1=*(redundant+REDT_ADDR1H)*0x100+*(redundant+REDT_ADDR1L);
    addr2=*(redundant+REDT_ADDR2H)*0x100+*(redundant+REDT_ADDR2L);
    if(addr1==addr2)
        if((addr1 &0xF000)==0x1000)
            { FS__SMC_cardparam[id].LogBlock=(addr1 &0x0FFF)/2; return(SUCCESS); }
    if(_FS_SMC_Bit_CountWord(addr1^addr2)>1)            return(ERROR);
    if((addr1 &0xF000)==0x1000)
        if(! (_FS_SMC_Bit_CountWord(addr1) &0x0001))
            { FS__SMC_cardparam[id].LogBlock=(addr1 &0x0FFF)/2; return(SUCCESS); }
    if((addr2 &0xF000)==0x1000)
        if(! (_FS_SMC_Bit_CountWord(addr2) &0x0001))
            { FS__SMC_cardparam[id].LogBlock=(addr2 &0x0FFF)/2; return(SUCCESS); }
    return(ERROR);
}


/*********************************************************************
*
*             _FS_SMC_Clr_RedundantData
*/

static void _FS_SMC_Clr_RedundantData(unsigned char *redundant)
{
    char i;
    for(i=0; i<REDTSIZE; i++)   *(redundant+i)=0xFF;
}


/*********************************************************************
*
*             _FS_SMC_Set_LogBlockAddr
*/

static void _FS_SMC_Set_LogBlockAddr(FS_u32 id,unsigned char *redundant)
{
    unsigned short addr;
    *(redundant+REDT_BLOCK)=0xFF;
    *(redundant+REDT_DATA) =0xFF;
    addr=FS__SMC_cardparam[id].LogBlock*2+0x1000;
    if((_FS_SMC_Bit_CountWord(addr)%2)) addr++;
    *(redundant+REDT_ADDR1H)=*(redundant+REDT_ADDR2H)=addr/0x100;
    *(redundant+REDT_ADDR1L)=*(redundant+REDT_ADDR2L)=(unsigned char)addr;
}


/*********************************************************************
*
*             _FS_SMC_Set_FailBlock
*/

static void _FS_SMC_Set_FailBlock(unsigned char *redundant)
{
    char i;
    for(i=0; i<REDTSIZE; i++)
        *redundant++=((i==REDT_BLOCK)?0xF0:0xFF);
}

/*********************************************************************
*
*             _FS_SMC_Set_DataStatus
*/

static void _FS_SMC_Set_DataStatus(unsigned char *redundant)
{
    redundant+=REDT_DATA;
    *redundant=0x00;
}


/*********************************************************************
*
*             _FS_SMC_Init_Media
*/

static void _FS_SMC_Init_Media(FS_u32 id)
{
    _FS_SMC_ErrCode[id]=NO_ERROR;
    _FS_SMC_MediaChange[id]=(unsigned int) ERROR;
    _FS_SMC_SectCopyMode[id]=COMPLETED;
    FS__SMC_PHY_Cnt_Reset(id);
}


/*********************************************************************
*
*             _FS_SMC_Chk_MediaPower
*/

static int _FS_SMC_Chk_MediaPower(FS_u32 id)
{
    if(FS__SMC_PHY_Chk_CardStsChg(id))      _FS_SMC_MediaChange[id]=(unsigned int) ERROR;
    if((! FS__SMC_PHY_Chk_CntPower(id))&&(! _FS_SMC_MediaChange[id]))          return(SUCCESS);
    if(FS__SMC_PHY_Chk_CardExist(id))
        { _FS_SMC_MediaChange[id]=(unsigned int) ERROR; _FS_SMC_ErrCode[id]=ERR_NoSmartMedia; return(ERROR); }
    if(FS__SMC_PHY_Cnt_PowerOn(id))
        { _FS_SMC_MediaChange[id]=(unsigned int) ERROR; _FS_SMC_ErrCode[id]=ERR_NoSmartMedia; return(ERROR); }
    FS__SMC_PHY_Reset(id);
    return(SUCCESS);
}


/*********************************************************************
*
*             _FS_SMC_Chk_MediaWP
*/

static int _FS_SMC_Chk_MediaWP(FS_u32 id)
{
    if(FS__SMC_cardattrib[id].Attribute &MWP)
        { _FS_SMC_ErrCode[id]=ERR_WrtProtect;   return(ERROR); }
    return(SUCCESS);
}


/*********************************************************************
*
*             _FS_SMC_MarkFail_PhyOneBlock
*/

static int _FS_SMC_MarkFail_PhyOneBlock(FS_u32 id)
{
    unsigned char sect;
    sect=FS__SMC_cardparam[id].Sector;
    _FS_SMC_Set_FailBlock(_FS_SMC_WorkRedund);
    FS__SMC_PHY_WriteRedtMode(id);
    for(FS__SMC_cardparam[id].Sector=0; FS__SMC_cardparam[id].Sector<FS__SMC_cardattrib[id].MaxSectors; FS__SMC_cardparam[id].Sector++)
        if(FS__SMC_PHY_WriteRedtData(id,_FS_SMC_WorkRedund)) {
            FS__SMC_PHY_Reset(id);
            FS__SMC_cardparam[id].Sector=sect;
            _FS_SMC_ErrCode[id]=ERR_HwError;
            return(ERROR);
        }   /* NO Status Check */
    FS__SMC_PHY_Reset(id);
    FS__SMC_cardparam[id].Sector=sect;
    return(SUCCESS);
}


/*********************************************************************
*
*             _FS_SMC_Set_PhyFmtValue
*/

static int _FS_SMC_Set_PhyFmtValue(FS_u32 id)
{
    unsigned short idcode;
    FS__SMC_PHY_ReadID(id,&idcode);
    if(FS__SMC_PHY_Set_Model(id,(unsigned char)idcode))
        return(ERROR);
    if(FS__SMC_PHY_Chk_WP(id))
        FS__SMC_cardattrib[id].Attribute|=WP;
    return(SUCCESS);
}


/*********************************************************************
*
*             _FS_SMC_Search_CIS
*/

static int _FS_SMC_Search_CIS(FS_u32 id,unsigned short *pcis)
{
    FS__SMC_cardparam[id].Zone=0;   FS__SMC_cardparam[id].Sector=0;
    for(FS__SMC_cardparam[id].PhyBlock=0; FS__SMC_cardparam[id].PhyBlock<(FS__SMC_cardattrib[id].MaxBlocks-FS__SMC_cardattrib[id].MaxLogBlocks-1); FS__SMC_cardparam[id].PhyBlock++) {
        if(FS__SMC_PHY_ReadRedtData(id,_FS_SMC_Redundant))
            { FS__SMC_PHY_Reset(id);        return(ERROR); }
        if(! _FS_SMC_Chk_FailBlock(_FS_SMC_Redundant)) {
            if(_FS_SMC_Chk_CisBlock(_FS_SMC_Redundant))
                { FS__SMC_PHY_Reset(id);    return(ERROR); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一二三| 美国十次综合导航| 亚洲激情自拍偷拍| av电影天堂一区二区在线 | 久久精品水蜜桃av综合天堂| 日本视频免费一区| 在线播放亚洲一区| 国产精品羞羞答答xxdd| 精品国产成人在线影院| 91美女视频网站| 亚洲三级在线播放| 天堂午夜影视日韩欧美一区二区| 久久国产精品区| 欧美综合色免费| 亚洲国产精品传媒在线观看| 日韩和欧美一区二区| 大美女一区二区三区| 在线中文字幕一区| 青青草国产精品97视觉盛宴| 91色乱码一区二区三区| 久久综合九色综合97婷婷女人| 亚洲成人在线网站| 91蜜桃网址入口| 国产精品久久国产精麻豆99网站 | 亚洲黄色在线视频| 色综合色狠狠天天综合色| 国产精品亲子伦对白| 国产精品一区免费视频| 精品国产乱码久久久久久图片| 日本aⅴ亚洲精品中文乱码| 欧美午夜片在线看| 亚洲国产精品人人做人人爽| 91视视频在线观看入口直接观看www| 国产精品天美传媒沈樵| 成人中文字幕电影| 中文字幕亚洲电影| 91麻豆国产精品久久| 一区二区在线观看免费| 91国偷自产一区二区开放时间| 最新日韩在线视频| 欧美羞羞免费网站| 亚洲国产另类av| 在线播放中文一区| 黄页网站大全一区二区| 国产色产综合色产在线视频| 成人高清伦理免费影院在线观看| 国产精品传媒视频| 欧美在线小视频| 日韩综合在线视频| 26uuu另类欧美亚洲曰本| 国产精品一区二区无线| 国产精品美女一区二区三区| 99re视频这里只有精品| 亚洲成人动漫在线免费观看| 欧美久久久久中文字幕| 国内精品自线一区二区三区视频| 国产欧美日韩另类视频免费观看| 91亚洲大成网污www| 亚洲成人在线观看视频| 中文字幕在线一区免费| 欧美丝袜第三区| 久久99精品久久久久久| 欧美激情一区不卡| 欧美午夜不卡在线观看免费| 美女在线观看视频一区二区| 欧美激情综合五月色丁香小说| 91免费小视频| 久久se这里有精品| 亚洲欧美乱综合| 日韩精品中文字幕在线一区| 成人免费av网站| 五月综合激情婷婷六月色窝| 国产亚洲欧美日韩俺去了| 在线观看一区二区视频| 国产麻豆视频精品| 亚洲一区二区在线观看视频| 欧美精品一区二区三区视频 | 欧美高清精品3d| 国产成+人+日韩+欧美+亚洲| 亚洲成av人片在线观看| 亚洲国产精华液网站w| 欧美久久久影院| 91在线porny国产在线看| 毛片基地黄久久久久久天堂| 亚洲另类在线视频| 国产视频一区在线观看| 欧美一区二区三区在线视频 | 一区二区国产视频| 26uuu国产电影一区二区| 欧美日韩国产大片| 91在线丨porny丨国产| 国产一区二区三区在线观看免费视频| 亚洲黄网站在线观看| 国产精品麻豆久久久| 精品国产一区二区在线观看| 欧美色图免费看| 色噜噜狠狠成人中文综合| 国产乱码精品一区二区三| 丁香另类激情小说| 国产美女娇喘av呻吟久久| 天堂av在线一区| 亚洲成av人片| 亚洲综合在线第一页| 亚洲品质自拍视频| 国产精品国产三级国产专播品爱网 | 91精品国产91久久久久久最新毛片 | 99久久婷婷国产综合精品电影| 国产美女一区二区三区| 韩国精品在线观看| 激情亚洲综合在线| 免费一级欧美片在线观看| 日韩av中文字幕一区二区三区| 一区二区不卡在线播放| 亚洲综合视频在线观看| 午夜久久久久久| 天天综合色天天| 久久精品国产在热久久| 久久91精品久久久久久秒播| 久久精品国产秦先生| 精品一区二区av| 国产黄人亚洲片| 成人h版在线观看| 成人avav在线| 欧美在线不卡一区| 欧美日韩国产高清一区二区 | 亚洲少妇中出一区| 亚洲激情图片一区| 午夜国产精品一区| 精品一区二区三区免费视频| 国产精品1区2区3区| 91网址在线看| 欧美日韩国产另类一区| 久久久亚洲国产美女国产盗摄| 国产欧美日本一区视频| 亚洲乱码中文字幕| 日韩精品欧美成人高清一区二区| 久久99精品国产91久久来源| 成人中文字幕合集| 欧美日韩情趣电影| 久久婷婷成人综合色| 亚洲人亚洲人成电影网站色| 亚洲国产综合色| 久久福利视频一区二区| 99久久夜色精品国产网站| 欧美日韩一区成人| 久久久一区二区| 亚洲第一会所有码转帖| 韩国女主播一区| 色综合视频一区二区三区高清| 91精品在线免费观看| 国产精品女同互慰在线看| 一区二区成人在线观看| 国产精品1024久久| 欧美色窝79yyyycom| 久久久99久久| 亚洲chinese男男1069| 国产 日韩 欧美大片| 精品视频全国免费看| 国产三级精品视频| 五月婷婷色综合| 99精品视频一区二区三区| 欧美一级欧美三级| 亚洲裸体xxx| 国产成人三级在线观看| 欧美精品自拍偷拍动漫精品| 国产精品美女久久福利网站| 日本女优在线视频一区二区 | 亚洲一级在线观看| 国产精品一区二区在线播放 | 国产毛片精品视频| 91精品在线一区二区| 一区二区三国产精华液| 懂色av一区二区三区免费观看| 欧美一级理论片| 亚洲午夜久久久久久久久久久| 福利91精品一区二区三区| 日韩一卡二卡三卡| 亚瑟在线精品视频| 91久久免费观看| 亚洲欧美一区二区三区久本道91| 黄页网站大全一区二区| 欧美变态tickling挠脚心| 偷拍日韩校园综合在线| 在线精品亚洲一区二区不卡| 亚洲欧洲精品天堂一级 | 在线精品视频免费播放| 中文字幕制服丝袜成人av | 欧美精三区欧美精三区| 亚洲国产视频一区二区| 日本精品裸体写真集在线观看| 中文字幕视频一区| 成人理论电影网| 国产精品久久久久久亚洲毛片| 国产精品一区二区久久不卡| 久久综合九色综合欧美就去吻 | 国产精品欧美经典| 本田岬高潮一区二区三区| 亚洲国产高清aⅴ视频| 成人福利视频网站| 亚洲人快播电影网|