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

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

?? sdhcslot.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
            // with allowance for power supply ramp-up time. (SD Phys Layer 6.4)
            // Note that power supply ramp-up time occurs in SetVoltage().
            SetClockRate(&dwClockRate);
            SDClockOn();
            DWORD dwSleepMs = (74 / (dwClockRate / 1000)) + 1;
            Sleep(dwSleepMs);
            SDClockOff();
            if (m_SlotDma) {
                ASSERT(FALSE);
                delete m_SlotDma;
                m_SlotDma = NULL;
            }

            if (!m_fDisableDMA) {
                SSDHC_CAPABILITIES caps = GetCapabilities();
                if (FALSE) { // Disable ADM2 support for now    // caps.bits.ADMA2
                    m_SlotDma = new CSDHCSlotBase32BitADMA2(*this);
                }
                else if (caps.bits.SDMA) {
                    m_SlotDma = new CSDHCSlotBaseSDMA(*this);
                }

                if (m_SlotDma && !m_SlotDma->Init()) { // failed.
                    delete m_SlotDma;
                    m_SlotDma = NULL;
                }
                ASSERT(!(caps.bits.ADMA2 || caps.bits.SDMA) || m_SlotDma!=NULL);
            }

            // Interrupts are not enabled on a newly inserted card.
            EnableSDIOInterrupts(FALSE);

            // Indicate device arrival
            IndicateSlotStateChange(DeviceInserted);

            // Disable the command and data CRC error
            WriteWord(SDHC_ERROR_INT_SIGNAL_ENABLE, (wErrIntSignalEn | (0x20)));
            WriteWord(SDHC_ERROR_INT_STATUS_ENABLE, (wErrIntStatusEn | (0x20)));

             // Below code lines are needed for working as a mass storage device
            v_gBspArgs->g_SDCardState = CARD_INSERTED;
            SetEvent( v_gBspArgs->g_SDCardDetectEvent );
        }

    BOOL 
        CSDHCSlotBase::HandleCommandComplete(
                )
        {
            SETFNAME();

            PSD_BUS_REQUEST pRequest;
            BOOL fRet = FALSE;

            // get the current request  
            pRequest = GetAndLockCurrentRequest();
            DEBUGCHK(m_dwReadyInts == 0);

            if (pRequest) {
                DEBUGCHK(pRequest->HCParam == 0);
                // INT_TRX_COMPLETE is not suitable for s3c6410, so I comment out below code.
                // therefore, in order to keep fastpath status, those code like just below is needed.
                SD_API_STATUS transferStatus = (m_FastPathStatus >= SD_API_STATUS_SUCCESS) ? SD_API_STATUS_SUCCESS : m_FastPathStatus;

                if (NoResponse != pRequest->CommandResponse.ResponseType) {
                    // Copy response over to request structure. Note that this is a 
                    // bus driver buffer, so we do not need to SetProcPermissions 
                    // or __try/__except.
                    UNALIGNED DWORD *pdwResponseBuffer = 
                        (PDWORD) (pRequest->CommandResponse.ResponseBuffer + 1); // Skip CRC
                    WORD wCommand = ReadWord(SDHC_COMMAND);

                    if ((wCommand & CMD_RESPONSE_R1B_R5B) == CMD_RESPONSE_R1B_R5B) {
                        // Reset cmd and dat circuits
                        SoftwareReset(SOFT_RESET_CMD | SOFT_RESET_DAT);
                    }

                    pdwResponseBuffer[0] = ReadDword(SDHC_R0);
                    if (pRequest->CommandResponse.ResponseType == ResponseR2) {
                        pdwResponseBuffer[1] = ReadDword(SDHC_R2);
                        pdwResponseBuffer[2] = ReadDword(SDHC_R4);
                        pdwResponseBuffer[3] = ReadDword(SDHC_R6);
                    }
                }

                // check for command/response only
                if (TRANSFER_IS_COMMAND_ONLY(pRequest)) {
                    IndicateBusRequestComplete(pRequest, transferStatus);
                    fRet = TRUE;
                } else {
                    // handle data phase transfer
                    pRequest->HCParam = 0;
                    fRet = FALSE;
                }
            }
            // else request must have been canceled due to an error

            return fRet;
        }

    VOID 
        CSDHCSlotBase::HandleErrors(
                )
        {
            SD_API_STATUS status = SD_API_STATUS_SUCCESS;

            // get the current request  
            PSD_BUS_REQUEST pRequest = NULL;
            pRequest = GetAndLockCurrentRequest();

            WORD wErrorStatus = 0;
            WORD RetryCount = 100;

            do {
                wErrorStatus = ReadWord(SDHC_ERROR_INT_STATUS);
                RetryCount--;
            } while ((wErrorStatus == 0) || (RetryCount != 0));

            if (wErrorStatus == 0)
            {
                DEBUGMSG(SDCARD_ZONE_ERROR, 
                        (TEXT("[HSMMC0] HandleErrors - ERROR INT STATUS=0x%02X\n"), wErrorStatus));
                return;
            }
    
            DEBUGMSG(SDCARD_ZONE_ERROR, 
                    (TEXT("[HSMMC0] HandleErrors - ERROR INT STATUS=0x%02X\n"), wErrorStatus));
            if (pRequest) {
                DumpRequest(pRequest, SDCARD_ZONE_ERROR);
                // For simple debugging, we have to confirm the command number!
                RETAILMSG(TRUE, (TEXT("[HSMMC0] HandleErrors - ERR CMD:%d : "), pRequest->CommandCode));
            }

            DEBUGCHK( (wErrorStatus & ERR_INT_STATUS_VENDOR) == 0 );

            if (wErrorStatus) {
                if ( wErrorStatus & ERR_INT_STATUS_CMD_TIMEOUT ) {
                    status = SD_API_STATUS_RESPONSE_TIMEOUT;
                    switch(pRequest->CommandCode) {
                        case 1 : RETAILMSG(TRUE, (TEXT("If the card is not a MMC, CMD 1 does not work in reason.\n")));
                            break;
                        case 5 : RETAILMSG(TRUE, (TEXT("If the card is not a SDIO, CMD 5 does not work in reason.\n")));
                            break;
                        case 8 : RETAILMSG(TRUE, (TEXT("If the card is not SD SPEC 2.0, CMD 8 does not work in reason.\n")));
                            break;
                        default :
                            RETAILMSG(TRUE, (TEXT("[HSMMC0] HandleErrors - CMD Timeout Error...\n")));
                            break;
                    }
                }

                if ( wErrorStatus & ERR_INT_STATUS_CMD_CRC ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - CMD CRC Error...\r\n")));            
                    status = SD_API_STATUS_CRC_ERROR;
                    if ( wErrorStatus & ERR_INT_STATUS_CMD_TIMEOUT )
                        status = SD_API_STATUS_DEVICE_RESPONSE_ERROR;
                }

                if ( wErrorStatus & ERR_INT_STATUS_CMD_ENDBIT ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - CMD ENDBIT Error...\r\n")));                        
                    status = SD_API_STATUS_RESPONSE_TIMEOUT;
                }

                if ( wErrorStatus & ERR_INT_STATUS_CMD_INDEX ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - CMD INDEX Error...\r\n")));            
                    status = SD_API_STATUS_DEVICE_RESPONSE_ERROR;
                }

                if ( wErrorStatus & ERR_INT_STATUS_DAT_TIMEOUT ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - DAT Timeout Error...\r\n")));            
                    status = SD_API_STATUS_DATA_TIMEOUT;
                }

                if ( wErrorStatus & ERR_INT_STATUS_DAT_CRC ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - Data CRC Error...\r\n")));              
                    status = SD_API_STATUS_CRC_ERROR;
                }

                if ( wErrorStatus & ERR_INT_STATUS_DAT_ENDBIT ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - DAT END BIT Error...\r\n")));            
                    status = SD_API_STATUS_DEVICE_RESPONSE_ERROR;
                }

                if ( wErrorStatus & ERR_INT_STATUS_BUS_POWER ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - Bus Power Error...\r\n")));
                    status = SD_API_STATUS_DEVICE_RESPONSE_ERROR;
                }

                if ( wErrorStatus & ERR_INT_STATUS_AUTOCMD12 ) {
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - AUTOCMD12 Error...\r\n")));            
                    status = SD_API_STATUS_DEVICE_RESPONSE_ERROR;
                }

                if (wErrorStatus & ERR_INT_STATUS_ADMA) { // ADMA Error
                    RETAILMSG(TRUE,(TEXT("[HSMMC0] HandleErrors - ADMA Error...\r\n")));
                    if (m_SlotDma && pRequest ) {
                        m_SlotDma->DMANotifyEvent(*pRequest, DMA_ERROR_OCCOR );
                    }
                    else {
                        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("[HSMMC0] HandleErrors - ADMA Error without DMA Enabled (0x%x). Resetting CMD line.\r\n"),
                                    wErrorStatus));
                    }
                }
                
                // Perform basic error recovery
                WORD wErrIntSignal = ReadWord(SDHC_ERROR_INT_SIGNAL_ENABLE);
                WriteWord(SDHC_ERROR_INT_SIGNAL_ENABLE, 0);
                // Make sure that the value of "Error Interrupt Status Enable" is zero
                WORD wErrIntStatusEn = ReadWord(SDHC_ERROR_INT_STATUS_ENABLE);
                WriteWord(SDHC_ERROR_INT_STATUS_ENABLE,0);

                if (IS_CMD_LINE_ERROR(wErrorStatus)) {
                    // Reset CMD line
                    DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("[HSMMC0] HandleErrors - Command line error (0x%x). Resetting CMD line.\r\n"),
                                wErrorStatus));
                    SoftwareReset(SOFT_RESET_CMD);
                }

                if (IS_DAT_LINE_ERROR(wErrorStatus)) {
                    // Reset DAT line
                    DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("[HSMMC0] HandleErrors - Data line error (0x%x). Resetting DAT line.\r\n"),
                                wErrorStatus));

                    DWORD RetryCount = 5000;

                    SoftwareReset(SOFT_RESET_DAT);
                    do {
                        WriteWord(SDHC_ERROR_INT_STATUS,wErrorStatus);

                        if ((ReadWord(SDHC_NORMAL_INT_STATUS) & NORMAL_INT_STATUS_ERROR_INT)) {
                            RetryCount--;
                        } else {
                            break;
                        }

                        if(RetryCount == 0) {
                            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("[HSMMC0] HandleErrors - DAT line error Recovery Timeout...\r\n")));
                        }
                    } while(RetryCount != 0);
                }

                // clear all error status
                WriteWord(SDHC_ERROR_INT_STATUS, wErrorStatus);

                // re-enable error interrupt signals
                WriteWord(SDHC_ERROR_INT_STATUS_ENABLE, wErrIntStatusEn);
                WriteWord(SDHC_ERROR_INT_SIGNAL_ENABLE, wErrIntSignal);

                // complete the request
                if (pRequest) {
                    IndicateBusRequestComplete(pRequest, status);
                } else {
                    // If there is not a current request, the initialize of normal interrupt status enable is needed.
                    WriteWord(SDHC_NORMAL_INT_STATUS_ENABLE,
                            (ReadWord(SDHC_NORMAL_INT_STATUS_ENABLE)) | NORMAL_INT_ENABLE_CMD_COMPLETE | NORMAL_INT_ENABLE_TRX_COMPLETE);
                }
            }
        }

    VOID 
        CSDHCSlotBase::HandleTransferDone(
                )
        {
            PSD_BUS_REQUEST pRequest;
            SD_API_STATUS   status = SD_API_STATUS_SUCCESS;

            // get the current request  
            pRequest = GetAndLockCurrentRequest();

            if (pRequest) {
                if (!TRANSFER_IS_COMMAND_ONLY(pRequest)) {
                    if (m_SlotDma && !m_SlotDma->IsDMACompleted()) {
                        m_SlotDma->DMANotifyEvent(*pRequest, TRANSFER_COMPLETED);
                    }
                }
                if (pRequest->HCParam != TRANSFER_SIZE(pRequest)) {
                    // This means that a Command Complete interrupt occurred before
                    // a Buffer Ready interrupt. Hardware should not allow this. 
                    DEBUGCHK(FALSE);
                    status = SD_API_STATUS_DEVICE_RESPONSE_ERROR;
                }

                // complete the request
                if (pRequest->Flags & SD_AUTO_ISSUE_CMD12) {
                    m_fAutoCMD12Success = TRUE;
                }
                IndicateBusRequestComplete(pRequest, status);
            }
            // else request must have been canceled due to an error
        }


    VOID 
        CSDHCSlotBase::HandleReadReady(
                )
        {
            DEBUGMSG(SDHC_RECEIVE_ZONE, (TEXT("HandleReadReady - HandleReadReady!\n"))); 

            // get the current request  
            PSD_BUS_REQUEST pRequest = GetAndLockCurrentRequest();

            if (pRequest) {
                DEBUGCHK(pRequest->NumBlocks > 0);
                DEBUGCHK(pRequest->HCParam < TRANSFER_SIZE(pRequest));
                DEBUGCHK(TRANSFER_IS_READ(pRequest));

#ifdef DEBUG
                ++m_dwReadyInts;
#endif

                __try {
                    PDWORD pdwUserBuffer = (PDWORD) &pRequest->pBlockBuffer[pRequest->HCParam];
                    PDWORD pdwBuffer = pdwUserBuffer;
                    DWORD  rgdwIntermediateBuffer[SDHC_MAX_BLOCK_LENGTH / sizeof(DWORD)];
                    BOOL   fUsingIntermediateBuffer = FALSE;
                    DWORD  cDwords = pRequest->BlockSize / 4;
                    DWORD  dwRemainder = pRequest->BlockSize % 4;

                    PREFAST_DEBUGCHK(sizeof(rgdwIntermediateBuffer) >= pRequest->BlockSize);

                    if (((DWORD) pdwUserBuffer) % 4 != 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品电影| 欧美唯美清纯偷拍| 精品成人免费观看| 国产一区二区中文字幕| 国产欧美精品一区aⅴ影院| 不卡av免费在线观看| 综合自拍亚洲综合图不卡区| 色狠狠桃花综合| 午夜精品久久久久久久| 欧美一区二区三区日韩视频| 国产揄拍国内精品对白| 亚洲欧美在线aaa| 欧美日韩国产一二三| 久久福利资源站| 国产精品成人网| 69堂成人精品免费视频| 国产精品一区二区在线观看网站| 国产精品久久综合| 欧美肥妇free| 国产成人精品aa毛片| 亚洲一区二区五区| 亚洲精品一区二区三区影院 | 一区二区三区国产精品| 91精品国产欧美一区二区| 国产毛片一区二区| 亚洲黄色性网站| 精品裸体舞一区二区三区| 91免费国产视频网站| 婷婷开心激情综合| 日本一区二区电影| 91精品国产综合久久久蜜臀图片| 国产精品自在欧美一区| 亚洲线精品一区二区三区八戒| 欧美va日韩va| 在线视频你懂得一区二区三区| 激情欧美一区二区三区在线观看| 亚洲精品水蜜桃| 久久蜜桃香蕉精品一区二区三区| 欧美网站大全在线观看| 成人在线综合网站| 免费在线看一区| 一区二区三区91| 中文成人综合网| 日韩欧美视频在线| 欧美日韩高清影院| 99re热这里只有精品免费视频| 美女视频一区二区三区| 亚洲国产精品一区二区尤物区| 国产视频一区在线观看| 91精品国产一区二区三区香蕉| 91亚洲国产成人精品一区二三| 国模套图日韩精品一区二区 | 老司机免费视频一区二区| 一区二区三国产精华液| 欧美激情一区二区在线| 日韩精品一区二区三区在线播放| 欧美怡红院视频| 日本乱人伦一区| 成人国产精品免费网站| 国产毛片精品国产一区二区三区| 日韩精品五月天| 丝袜亚洲另类丝袜在线| 亚洲成a人v欧美综合天堂| 亚洲精品高清在线观看| 亚洲欧美日韩国产另类专区| 国产精品丝袜91| 国产精品丝袜在线| 中文字幕制服丝袜成人av| 国产精品美女久久久久高潮| 国产日韩欧美精品综合| 日本一区二区三区电影| 欧美国产日韩一二三区| 中文字幕不卡一区| 国产精品福利影院| 亚洲精品视频观看| 亚洲午夜三级在线| 午夜精品久久久久久久久| 午夜在线电影亚洲一区| 亚洲国产成人av网| 日韩福利视频导航| 日本怡春院一区二区| 免费成人在线观看视频| 久久99国产精品久久99| 久久99久久99| 国产99精品视频| 99久久国产免费看| 在线视频中文字幕一区二区| 欧美日韩一区二区电影| 欧美欧美午夜aⅴ在线观看| 69堂成人精品免费视频| 精品人在线二区三区| 久久久99免费| 中文字幕字幕中文在线中不卡视频| 亚洲免费观看高清完整版在线观看熊 | 粉嫩绯色av一区二区在线观看| 粉嫩嫩av羞羞动漫久久久| 97精品久久久久中文字幕 | 精品系列免费在线观看| 粉嫩aⅴ一区二区三区四区| 91影视在线播放| 欧美日本视频在线| 欧美www视频| 中文字幕一区二区三| 亚洲一区二区三区四区在线观看 | 日韩三级精品电影久久久| 精品久久久久久综合日本欧美| 国产婷婷色一区二区三区| 亚洲三级免费电影| 日韩电影免费一区| 国产不卡高清在线观看视频| 色一情一乱一乱一91av| 日韩精品影音先锋| 国产精品久久久久三级| 一区二区三区**美女毛片| 久久er99热精品一区二区| 成人精品国产免费网站| 欧美日韩一二三区| 国产色产综合色产在线视频| 亚洲国产一二三| 成人晚上爱看视频| 欧美一区二区观看视频| 亚洲色图制服诱惑| 精品一区二区在线观看| 91浏览器打开| 久久精品亚洲麻豆av一区二区| 亚洲在线免费播放| 国产成人综合在线| 555www色欧美视频| 亚洲欧美中日韩| 国产又黄又大久久| 欧美日韩高清在线播放| 亚洲欧洲精品成人久久奇米网| 六月丁香婷婷色狠狠久久| 91成人免费网站| 国产欧美日本一区二区三区| 狂野欧美性猛交blacked| 91高清在线观看| 国产无人区一区二区三区| 青青草97国产精品免费观看 | 欧美视频在线不卡| 国产精品久久午夜| 国产精品综合一区二区| 日韩三级免费观看| 午夜国产不卡在线观看视频| 91亚洲国产成人精品一区二区三 | 97se亚洲国产综合在线| 国产欧美日韩另类视频免费观看| 美腿丝袜在线亚洲一区| 欧美久久久一区| 亚洲电影中文字幕在线观看| aaa国产一区| 中文字幕久久午夜不卡| 国产麻豆日韩欧美久久| 日韩一级大片在线| 男男成人高潮片免费网站| 欧美性xxxxxxxx| 亚洲综合在线五月| 在线免费观看日本一区| 亚洲欧洲av另类| 91麻豆免费观看| 亚洲欧美偷拍卡通变态| 91亚洲永久精品| 亚洲精品免费一二三区| 欧亚洲嫩模精品一区三区| 亚洲一区在线视频| 欧美午夜不卡视频| 午夜a成v人精品| 51午夜精品国产| 美女视频免费一区| 亚洲精品在线一区二区| 国产一区二区三区四区在线观看| 精品久久久三级丝袜| 国产一区二区日韩精品| 欧美国产丝袜视频| 99精品在线观看视频| 亚洲精品一二三区| 欧美日韩精品欧美日韩精品一| 性感美女极品91精品| 在线不卡免费av| 激情综合色丁香一区二区| 精品国产污网站| 成人精品在线视频观看| 亚洲色图视频网站| 欧美午夜在线一二页| 日日嗨av一区二区三区四区| 日韩一区二区三区在线| 国产精品一区一区| 亚洲欧美日韩系列| 在线播放91灌醉迷j高跟美女| 男女男精品视频网| 欧美国产精品久久| 色婷婷国产精品| 日韩电影一区二区三区| 国产日韩视频一区二区三区| 色香蕉久久蜜桃| 久久国产综合精品| 中文字幕在线一区二区三区| 精品视频在线免费观看| 久久国产成人午夜av影院| 国产精品国产精品国产专区不片 |