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

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

?? mmcdrv.c

?? WINDOWSCE4.2 ARM PXA255 SDMMC驅(qū)動程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    statusInfo |= (UINT32)(respBuff[2] & 0xFF);
    statusInfo <<= 8;
    statusInfo |= (UINT32)(respBuff[3] & 0xE0);
    statusInfo <<= 8;

    /* Get the MMC state */
    pc->currentState = (UINT16)(respBuff[3] & 0x1F);
    pc->mmcStatus = statusInfo;
    pc->mmcRdyState = pc->currentState & 01;
    pc->currentState >>= 1;

    /* Check status for error. Convert RAW status to driver error code */
    if (statusInfo == 0)
        return MMC_NO_ERROR;

    if (statusInfo & OUT_OF_RANGE_ERROR)
        return  MMC_OUT_OF_RANGE;

    if (statusInfo & ADDRESS_ERROR)
        return  MMC_ADDRESS_ERROR;

    if (statusInfo & BLK_LENGTH_ERROR)
        return  MMC_DATA_LENGTH_ERROR;

    if (statusInfo & ERASE_SEQ_ERROR)
        return  MMC_ERASE_SEQ_ERROR;

    if (statusInfo & ERASE_PARAM)
        return  MMC_ERASE_PARAM;

    if (statusInfo & WP_VIOLATION)
        return  MMC_WP_VIOLATION;

    if (statusInfo & CMD_CRC_ERROR)
        return MMC_CMD_CRC_ERROR;

    if (statusInfo & COMUNC_ILLEG_COM)
        return  MMC_COMUNC_ILLEG_COM;

    if (statusInfo & CARD_ECC_FAILED)
        return  MMC_CARD_ECC_FAILED;

    if (statusInfo & CONTROLLER_ERROR)
        return  MMC_INTERFACE_ERROR;

    if (statusInfo & EERROR)
        return  MMC_ERROR;

    if (statusInfo & UNDERRUN)
        return  MMC_UNDERRUN;

    if (statusInfo & OVERRUN)
        return  MMC_OVERRUN;

    if (statusInfo & CIDCSD_OVERWRITE)
        return  MMC_CIDCSD_OVERWRITE;

    if (statusInfo & WP_ERASE_SKIP)
        return  MMC_WP_ERASE_SKIP;

    if (statusInfo & CARD_ECC_DISABLED)
        return  MMC_CARD_ECC_DISABLED;

    if (statusInfo & ERASE_RESET)
        return  MMC_ERASE_RESET;

#if (USE_SD)
        if (statusInfo & CARD_IS_LOCKED)
                return  MMC_CARD_IS_LOCKED;

        if (statusInfo & LOCK_UNLOCK_FAILED)
                return  MMC_LOCK_UNLOCK_FAILED;
#endif

    return MMC_CARD_IS_NOT_RESPONDING;
}


/***************************************************************************
* Name: MMCCommandAndResponse - Send the command to the MMC card
*
* Description:
*       Send the command to the MMC card
*
* Input:
*       pc              Device information structure
*       Cmd             MMC Command
*       Arg             MMC Argument
*       noBlocks        Number of blocks to transfer        
*       Resp            Response Type
*
* Output:
*       Command is sent and Response is analyzed
*
* Return:
*       MMC Completion Code
*
***************************************************************************/
MMC_CC mmcCommandAndResponse(PDEVICE_CONTROLLER pc, UINT32 Arg, UINT16 Cmd, UINT16 noBlocks, RESP_TYPE Resp )
{
    MMC_CC  resErr;
    INT16   i;

        /* Check for stop transmission command to set approriated flag */
        if ( Cmd == STOP_TRANSMISSION)
        {
                if ( (pc->mode & READ_MODE) == READ_MODE )
                        multipleRdWr = DATA;      /* For read */
                else if ( (pc->mode & WRITE_MODE) == WRITE_MODE )
                        multipleRdWr = RCV;       /* For write */               
                else
                        multipleRdWr = NO;
        }

    /* Setup the command */
        if ( Resp == R6 )
        {
                if ( !MMCPrepareAndSetup(Arg, Cmd, noBlocks, R1) )
                        return MMC_INTERFACE_ERROR;
        }
        else
        {
                if ( !MMCPrepareAndSetup(Arg, Cmd, noBlocks, (UINT16)Resp) )
                        return MMC_INTERFACE_ERROR;
        }
    if ( !Resp )                    /* Command without response (R0) */
        return MMC_NO_ERROR;

    for (i = 0; i < (CID_BYTE_LENGTH>>1); i++)
        pc->LastResponse[i] = 0;/* Clear buffer */

    /* Check the response */
    resErr = MMCReceivedResponse( pc, Resp );

        if ( resErr == MMC_NO_ERROR)
        {
                if ( (Resp == R1) || (Resp == R6) )
                        resErr = MMCAnalysisResponse(pc, Resp);
        }

    return resErr;
}

SDLOCAL SDBOOL getDeviceStatus(INT16 driveno, INT16 dFlag);

/*******************************************************************************
* Name: IsCardBusy
* 
* Description:
*       Check for READY/BUSY state of the device 
* 
* Input:
*       INT16   driveno         Drive number
*
* Output:
*       None
*
* Returns:
*       YES if the device is busy
*       NO otherwise
*
********************************************************************************/
MMC_CC IsCardBusy(INT16 driveno)
{
        /* Check for the card READY/BUSY */
        return (getDeviceStatus(driveno, 1));
}


/*******************************************************************************
* Name: is_device_changed
* 
* Description:
*       Check for device removal and insertion       
* 
* Input:
*       INT16   driveno         Drive number
*
* Output:
*       None
*
* Returns:
*       YES if the device is removed or inserted back.
*       NO otherwise
*
********************************************************************************/
SDBOOL is_device_changed (INT16 driveno) /*__fn__*/
{
        return (getDeviceStatus(driveno, 0));
}


SDLOCAL SDBOOL getDeviceStatus(INT16 driveno, INT16 dFlag) /* __fn__ */
{
    PDEVICE_CONTROLLER pc;
    UINT16  phys_drive;

#if (N_INTERFACES > 1)
    pc = drno_to_controller(driveno);
    phys_drive = drno_to_phys(driveno);
#else
    phys_drive = driveno;
    pc = &controller_s[0];
#endif

    MMCSelectController(pc->controller_number, phys_drive);

        pc->drive_active = (((UINT16)phys_drive) | DRV_ACTIVE);

        /* Get status information. */
    if ( MMC_NO_ERROR != mmcGetStatus ( pc, pc->drive[phys_drive].RCA) )
    {
        return (YES);
    }

        if ( dFlag )    /* For Card Ready/Busy state */
    {
                /* READY/BUSY of the device */
                if ( pc->mmcRdyState == YES )
                        return NO;
                else
                        /* Card is busy */
                        return YES;
    }

        /* The device has not changed */
        return NO;
}

#if (USE_MMC)

/***************************************************************************
* Name: setupMMcHostDataRegister - Configure MMC info. for MMC controller
*
* Description:
*       Set up the information to configure the MMC controller
*
* Input:
*       cmdIndex        Command index
*       cmdDatContReg   Control information of CMD_DAT_CON_REG
*       noBlocks        Number of blocks to transfer
*       blkLength       Block data length
*
* Output:
*       None
*       
* Return:
*       None
*         
***************************************************************************/
SDVOID setupMMcHostDataRegister(UINT16 cmdIndex, UINT16 *cmdDatContReg, UINT16 *noBlocks, UINT16 *blkLength)
{
#if (USE_SECURITY)
        if ( cmdIndex & SECURITY_CMD_BIT )
        {
                SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
                return;
        }
#endif

        /* For normal driver */
    switch ( cmdIndex )
    { 
        case    READ_BLOCK:             /* DATA TRANSFER */
        case    READ_MULTIPLE_BLOCK:    /* DATA TRANSFER */
        case    READ_DAT_UNTIL_STOP:    /* STREAM READ */
            *cmdDatContReg = DATA_ENABLE;
            *blkLength = DEFAULT_BLK_LENGTH;
            break;

        case    WRITE_BLOCK:            /* DATA TRANSFER */
        case    WRITE_MULTIPLE_BLOCK:   /* DATA TRANSFER */
        case    WRITE_DAT_UNTIL_STOP:   /* STREAM WRITE */
            *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
/*                        *cmdDatContReg |= BUSY_SET; */
            *blkLength = DEFAULT_BLK_LENGTH;
            break;

        case    SEND_WRITE_PROT:
            *cmdDatContReg = DATA_ENABLE;
                        *blkLength = NO;
            break;
#if (USE_SD)
                case    SD_STATUS:
            *cmdDatContReg = DATA_ENABLE;
                        *blkLength = (DEFAULT_BLK_LENGTH >> 3);
            *noBlocks = 1;
            break;

                case    SD_SEND_SCR:
            *cmdDatContReg = DATA_ENABLE;
                        *blkLength = 8;
            *noBlocks = 1;
                        break;
#endif
        case    PROGRAM_CSD:
        case    PROGRAM_CID:
            *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
                        *blkLength = 16;
            *noBlocks = 1;
            break;

        case    ERASE_SECTORS:
            *cmdDatContReg = NO;
                        *blkLength = NO;
            break;

        case    STOP_TRANSMISSION:
                        if ( multipleRdWr == RCV)       /* For write */
/*                                *cmdDatContReg = (BUSY_SET | DATA_WRITE_SET); */
/* If BUSY_SET and one sector write using MultipleWrite the host will write two
        sectors, one correct and one dummy */
/*                                *cmdDatContReg = (BUSY_SET); */
                                *cmdDatContReg = NO;
                        else                            /* For read */
                                *cmdDatContReg = NO;
                        *blkLength = NO;
            break;

        /* NO DATA TRANSFER */
        case    GO_IDLE_STATE:
        case    SEND_OP_COND:
        case    ALL_SEND_CID:
        case    SEND_CID:
        case    SEND_CSD:
        case    SEND_STATUS:
            *cmdDatContReg = NO;
                        *blkLength = NO;
                        *noBlocks = NO;
            break;

    } /* END SWITCH */
}

#endif /* USE_MMC */

#endif  /* (USE_MMC || USE_MMC_EMULATION) */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产风韵犹存在线视精品| 欧洲一区在线电影| 欧洲另类一二三四区| 日本一区免费视频| 国产馆精品极品| 日韩精品一区二区三区在线观看 | 日韩av一区二区在线影视| 蜜桃视频一区二区三区| 欧美日本一区二区三区四区| 亚洲综合在线视频| 精品在线一区二区| 日韩精品一区二区在线观看| 国产.欧美.日韩| 一区二区视频免费在线观看| 欧美日韩另类一区| 国产综合色视频| 国产精品久久久久久久久晋中| 色菇凉天天综合网| 天堂精品中文字幕在线| 久久影视一区二区| 91毛片在线观看| 日本欧美韩国一区三区| 久久久久久久久久看片| 色综合色狠狠综合色| 天天综合色天天| 国产午夜精品福利| 欧美日韩久久不卡| 国产999精品久久久久久绿帽| 国产精品二三区| 日韩欧美国产三级电影视频| 成av人片一区二区| 水野朝阳av一区二区三区| 日本一区二区三区视频视频| 欧美男同性恋视频网站| 国产iv一区二区三区| 亚洲图片欧美视频| 国产欧美精品日韩区二区麻豆天美| 色哟哟国产精品| 国产又粗又猛又爽又黄91精品| 亚洲日本青草视频在线怡红院| 欧美一级电影网站| 色婷婷综合久久久| 国产乱一区二区| 欧美aaaaa成人免费观看视频| 18欧美亚洲精品| 欧美tk丨vk视频| 欧美日韩免费在线视频| 丁香激情综合国产| 久久电影国产免费久久电影 | 91一区二区在线| 麻豆91免费观看| 亚洲va欧美va人人爽午夜| 国产精品国产三级国产aⅴ原创 | 另类小说综合欧美亚洲| 亚洲一区中文在线| 国产精品传媒入口麻豆| 久久婷婷色综合| 91精品免费在线观看| 欧美主播一区二区三区| 91丝袜美腿高跟国产极品老师| 国产一区91精品张津瑜| 美腿丝袜亚洲三区| 日韩国产在线一| 曰韩精品一区二区| 国产精品久久久久一区二区三区共| 日韩一区二区三区高清免费看看| 精品视频资源站| 在线视频一区二区免费| 99久久99久久精品国产片果冻| 国产成人h网站| 国产白丝精品91爽爽久久| 激情丁香综合五月| 国内外成人在线| 久久精品国产秦先生| 日韩精品久久久久久| 亚洲大尺度视频在线观看| 亚洲综合一区二区三区| 亚洲一区二区三区四区在线免费观看 | 有坂深雪av一区二区精品| 国产精品入口麻豆九色| 欧美激情一区二区三区全黄| 国产无人区一区二区三区| 国产亚洲欧美中文| 国产精品无圣光一区二区| 久久久国产一区二区三区四区小说| 欧美精品一区二区三区很污很色的| 欧美va在线播放| 亚洲国产成人午夜在线一区 | 亚洲美女精品一区| 亚洲国产欧美另类丝袜| 奇米精品一区二区三区在线观看 | 欧美一区二区久久| 精品欧美一区二区在线观看| 亚洲精品一区二区精华| 国产视频视频一区| 国产精品国产三级国产普通话99 | 久久美女艺术照精彩视频福利播放| 久久综合色8888| 国产精品午夜在线观看| 亚洲一区成人在线| 久久99国产精品免费| 国产1区2区3区精品美女| 日本高清视频一区二区| 欧美一区二区三区男人的天堂| 日韩你懂的在线观看| 国产精品污www在线观看| 亚洲免费在线观看| 美腿丝袜亚洲三区| 99久久国产综合精品色伊| 欧美情侣在线播放| 国产日韩欧美高清| 亚洲丰满少妇videoshd| 国精产品一区一区三区mba桃花| 成人国产一区二区三区精品| 欧美日韩一区二区三区在线| 久久色成人在线| 亚洲精品国久久99热| 美女视频免费一区| 色欲综合视频天天天| 精品久久久久久最新网址| 中文字幕亚洲欧美在线不卡| 日韩电影在线免费看| 日韩精品综合一本久道在线视频| 国产日韩影视精品| 亚洲成va人在线观看| 国产精品综合二区| 欧美日韩三级一区二区| 国产精品色噜噜| 秋霞午夜av一区二区三区| 成av人片一区二区| 精品卡一卡二卡三卡四在线| 亚洲综合激情网| av一区二区三区黑人| 欧美一区二区三区男人的天堂| 亚洲桃色在线一区| 国产成人综合视频| 欧美一卡二卡在线| 一区二区三区四区乱视频| 国产一区二区在线影院| 欧美片在线播放| 伊人色综合久久天天人手人婷| 国产69精品久久久久毛片 | 国产精品亚洲综合一区在线观看| 在线观看不卡视频| 国产精品久久免费看| 国产在线一区二区综合免费视频| 欧美综合视频在线观看| 国产精品久久久久三级| 国产精品一区一区三区| 制服丝袜亚洲网站| 亚洲图片欧美色图| 色婷婷亚洲一区二区三区| 国产欧美一区二区三区在线看蜜臀| 免费一级片91| 91精品免费在线| 亚洲午夜私人影院| 日本韩国欧美国产| 亚洲三级电影网站| 91免费版在线| 亚洲日本欧美天堂| 色94色欧美sute亚洲线路一ni| 国产精品久久午夜| 成人av在线网| 亚洲欧美在线高清| 91网页版在线| 一区二区三区91| 欧美亚州韩日在线看免费版国语版| 日韩毛片一二三区| 在线观看成人小视频| 亚洲国产一区二区三区| 欧美色电影在线| 视频一区中文字幕国产| 91精品国产欧美日韩| 喷白浆一区二区| 久久婷婷色综合| 成人爱爱电影网址| 亚洲精品视频在线观看网站| 在线精品国精品国产尤物884a| 亚洲激情网站免费观看| 免费人成在线不卡| 欧美xxxxxxxxx| 国产精品99久久久久久有的能看| 久久精品夜夜夜夜久久| thepron国产精品| 一区二区三区免费| 欧美日本一区二区三区四区| 蜜臀久久99精品久久久久宅男| 久久综合九色综合97婷婷| 成人av电影免费在线播放| 亚洲欧美另类小说视频| 欧美日韩高清影院| 经典三级视频一区| 国产精品无人区| 欧美性淫爽ww久久久久无| 午夜精品福利在线| 日韩精品中文字幕一区二区三区| 国产福利一区二区三区视频 | 欧美精品丝袜久久久中文字幕| 日本不卡中文字幕| 国产欧美1区2区3区|