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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? sdhcslot.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
        }
        else {
            cps = D4;
        }

        SetHardwarePowerState(cps);
    }

    BOOL fKeepPower = FALSE;
    if (m_fSleepsWithPower || m_cpsCurrent == D0) {
        DEBUGCHK(!m_fSleepsWithPower || m_cpsCurrent == D3);
        fKeepPower = TRUE;
    }
    else
        m_fFakeCardRemoval = TRUE;

    PowerUpDown(FALSE, fKeepPower);
}


VOID 
CSDHCSlotBase::PowerUp(
        )
{
    Validate();

    if (!m_fIsPowerManaged) {
        SetHardwarePowerState(m_cpsAtPowerDown);
    }
    else if (m_fSleepsWithPower) {
        WORD wIntStatus = ReadWord(SDHC_NORMAL_INT_STATUS);
        if (wIntStatus == NORMAL_INT_STATUS_CARD_INT) {
            // We woke system through a card interrupt. We need to clear
            // this so that the IST will not be signalled.
            EnableSDIOInterrupts(FALSE);
            m_fPowerUpDisabledInts = TRUE;
        }
    }

    PowerUpDown(TRUE, TRUE);
    if (m_fFakeCardRemoval){
        Start();
        SetInterruptEvent();
    }
}
//
// For BC, 
// 1. Returns SD_API_STATUS_FAST_PATH_SUCCESS, callback is NOT called. Fastpass only.
// 2. Return !SD_API_SUCCESS(status). callback is NOT called.
// 3. Return SD_API_STATUS_SUCCESS, callback is called
// 4. Return SD_API_STATUS_PENDING, callback is NOT call Yet.
//
    SD_API_STATUS
CSDHCSlotBase::BusRequestHandler( PSD_BUS_REQUEST pRequest)
{
    SETFNAME();
    SD_API_STATUS status;
    PREFAST_DEBUGCHK(pRequest);
    Validate();
    DEBUGMSG(SDHC_SEND_ZONE, (TEXT("%s CMD:%d\n"), pszFname, pRequest->CommandCode));

    if (m_pCurrentRequest) { // We have outstand request.
        ASSERT(FALSE);
        IndicateBusRequestComplete(pRequest, SD_API_STATUS_CANCELED);
        m_pCurrentRequest = NULL;
    }
    if (!m_fCardPresent) {
        status= SD_API_STATUS_DEVICE_REMOVED;
    }
    else {
        WORD wIntSignals = ReadWord(SDHC_NORMAL_INT_SIGNAL_ENABLE);
        WriteWord(SDHC_NORMAL_INT_SIGNAL_ENABLE,0);
        m_fCurrentRequestFastPath = FALSE ;
        m_pCurrentRequest = pRequest ;
        // if no data transfer involved, use FAST PATH
        if ((pRequest->SystemFlags & SD_FAST_PATH_AVAILABLE)!=0) { // Fastpath
            m_fCurrentRequestFastPath = TRUE;
            status = SubmitBusRequestHandler( pRequest );
            if( status == SD_API_STATUS_PENDING ) { // Polling for completion.
                BOOL fCardInserted = TRUE;
                DWORD dwStartTicks = GetTickCount();
#ifdef _SMDK6410_CH0_EXTCD_
                if (m_pCurrentRequest && 
                        (fCardInserted = (IsCardPresent() & TRUE)!=0) &&
                        GetTickCount() - dwStartTicks <= m_dwFastPathTimeoutTicks) {
#else
                    while (m_pCurrentRequest &&
                            (fCardInserted = (ReadDword(SDHC_PRESENT_STATE) & STATE_CARD_INSERTED)!=0 ) &&
                            ((GetTickCount() - dwStartTicks) <= m_dwFastPathTimeoutTicks)) {
#endif
                        HandleInterrupt();
                    } 
                    if (m_pCurrentRequest && fCardInserted ) { 
                        // Time out , need to switch to asyn.it will call callback after this
                        pRequest->SystemFlags &= ~SD_FAST_PATH_AVAILABLE;
                        m_fCurrentRequestFastPath = FALSE ;
                    }
                    else { // Fastpass completed.
                        status = m_FastPathStatus;
                        // Clear before status of fastpath.
                        m_FastPathStatus = 0;
                        if (m_pCurrentRequest) {
                            ASSERT(FALSE);
                            status = SD_API_STATUS_DEVICE_REMOVED;
                        }
                    }
                }
                if (status == SD_API_STATUS_SUCCESS) {
                    status = SD_API_STATUS_FAST_PATH_SUCCESS;
                }
            }
            else
                status = SubmitBusRequestHandler( pRequest );

            if (status!=SD_API_STATUS_PENDING && m_pCurrentRequest) { 
                // if there is error case. We don't notify the callback function either So.
                m_fCurrentRequestFastPath = TRUE;
                IndicateBusRequestComplete(pRequest,status);
            }
            WriteWord(SDHC_NORMAL_INT_SIGNAL_ENABLE,wIntSignals);
        }

        return status;
    }


    SD_API_STATUS
        CSDHCSlotBase::SubmitBusRequestHandler(PSD_BUS_REQUEST pRequest)
        {
            SETFNAME();

            PREFAST_DEBUGCHK(pRequest);
            Validate();

            WORD            wRegCommand;
            SD_API_STATUS   status;
            WORD            wIntStatusEn;
            BOOL            fSuccess;

            DEBUGCHK(m_dwReadyInts == 0);
            DEBUGCHK(!m_fCommandCompleteOccurred);

            DEBUGMSG(SDHC_SEND_ZONE, (TEXT("%s CMD:%d\n"), pszFname, pRequest->CommandCode));

            // bypass CMD12 if AutoCMD12 was done by hardware
            if (pRequest->CommandCode == 12) {
                if (m_fAutoCMD12Success) {
                    DEBUGMSG(SDHC_SEND_ZONE, 
                            (TEXT("%s AutoCMD12 Succeeded, bypass CMD12.\n"), pszFname));
                    // The response for Auto CMD12 is in a special area
                    UNALIGNED DWORD *pdwResponseBuffer = 
                        (PDWORD) (pRequest->CommandResponse.ResponseBuffer + 1); // Skip CRC
                    *pdwResponseBuffer = ReadDword(SDHC_R6);
                    IndicateBusRequestComplete(pRequest, SD_API_STATUS_SUCCESS);
                    status = SD_API_STATUS_SUCCESS;
                    goto EXIT;
                }
            }

            m_fAutoCMD12Success = FALSE;

            // initialize command register with command code
            wRegCommand = (pRequest->CommandCode << CMD_INDEX_SHIFT) & CMD_INDEX_MASK;

            // check for a response
            switch (pRequest->CommandResponse.ResponseType) {
                case NoResponse:
                    break;

                case ResponseR2:
                    wRegCommand |= CMD_RESPONSE_R2;
                    break;

                case ResponseR3:
                case ResponseR4:
                    wRegCommand |= CMD_RESPONSE_R3_R4;
                    break;

                case ResponseR1:
                case ResponseR5:
                case ResponseR6:
                case ResponseR7:
                    wRegCommand |= CMD_RESPONSE_R1_R5_R6_R7;
                    break;

                case ResponseR1b:
                    wRegCommand |= CMD_RESPONSE_R1B_R5B;   
                    break;

                default:
                    status = SD_API_STATUS_INVALID_PARAMETER;
                    goto EXIT;
            }

            // Set up variable for the new interrupt sources. Note that we must
            // enable DMA and read/write interrupts in this routine (not in
            // HandleCommandComplete) or they will be missed.
            wIntStatusEn = ReadWord(SDHC_NORMAL_INT_STATUS_ENABLE);
            wIntStatusEn |= NORMAL_INT_ENABLE_CMD_COMPLETE | NORMAL_INT_ENABLE_TRX_COMPLETE;

            // check command inhibit, wait until OK
            fSuccess = WaitForReg<DWORD>(&CSDHCSlotBase::ReadDword, SDHC_PRESENT_STATE, STATE_CMD_INHIBIT, 0);
            if (!fSuccess) {
                DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Timeout waiting for CMD Inhibit\r\n"),
                            pszFname));
                status = SD_API_STATUS_DEVICE_NOT_RESPONDING;
                goto EXIT;
            }

            // programming registers
            if (!TRANSFER_IS_COMMAND_ONLY(pRequest)) {
                WORD wRegTxnMode = 0;        
#ifdef _MMC_SPEC_42_
                // To distinguish btween MMCmicro and MMCplus, we will issue MMC_CMD_SEND_EXT_CSD.
                // At that time, Dat line is 8bit. If the inserted card is MMCmicro, "Data timeout" error will be occurred.
                // Because MMCmicro does not supports 8bit DAT line but 4bit. To reduce the delay time on Data timeout error occurring,
                // we modify the timeout value.
                if ( (ReadByte(SDHC_TIMEOUT_CONTROL) != m_dwTimeoutControl) && 
                        (pRequest->CommandCode != MMC_CMD_SEND_EXT_CSD) ) {
                    WriteByte(SDHC_TIMEOUT_CONTROL, (BYTE) m_dwTimeoutControl);
                } else if ( (ReadByte(SDHC_TIMEOUT_CONTROL) == m_dwTimeoutControl) &&
                        (pRequest->CommandCode == MMC_CMD_SEND_EXT_CSD) ) {
                    WriteByte(SDHC_TIMEOUT_CONTROL, (BYTE)0x3);
                }
#endif
                wRegCommand |= CMD_DATA_PRESENT;

                if (m_SlotDma &&  m_SlotDma->ArmDMA(*pRequest,TRANSFER_IS_WRITE(pRequest))) {
                    wIntStatusEn |= NORMAL_INT_ENABLE_DMA;
                    wRegTxnMode |= TXN_MODE_DMA;
                }
                else {
                    if (TRANSFER_IS_WRITE(pRequest)) {
                        wIntStatusEn |= NORMAL_INT_ENABLE_BUF_WRITE_RDY;
                    }
                    else {
                        wIntStatusEn |= NORMAL_INT_ENABLE_BUF_READ_RDY;
                    }
                }

                // BlockSize
                // Note that for DMA we are programming the buffer boundary for 4k
                DEBUGMSG(SDHC_SEND_ZONE,(TEXT("Sending command block size 0x%04X\r\n"), (WORD) pRequest->BlockSize));
                ASSERT(PAGE_SIZE == 0x1000);
                WriteWord(SDHC_BLOCKSIZE, (WORD)(pRequest->BlockSize & 0xfff) | (0<<12)); // SDHC 2.2.2, CE is 4k-aligned page.

                // We always go into block mode even if there is only 1 block. 
                // Otherwise the Pegasus will occaissionally hang when
                // writing a single block with DMA.
                wRegTxnMode |= (TXN_MODE_MULTI_BLOCK | TXN_MODE_BLOCK_COUNT_ENABLE);

                // BlockCount
                DEBUGMSG(SDHC_SEND_ZONE,(TEXT("Sending command block count 0x%04X\r\n"), 
                            (WORD) pRequest->NumBlocks));            
                WriteWord(SDHC_BLOCKCOUNT, (WORD) pRequest->NumBlocks);

                if (pRequest->Flags & SD_AUTO_ISSUE_CMD12) {
                    wRegTxnMode |= TXN_MODE_AUTO_CMD12;
                }

                if (TRANSFER_IS_READ(pRequest)) {
                    wRegTxnMode |= TXN_MODE_DATA_DIRECTION_READ;     
                }

                // check dat inhibit, wait until okay
                fSuccess = WaitForReg<DWORD>(&CSDHCSlotBase::ReadDword, SDHC_PRESENT_STATE, STATE_DAT_INHIBIT, 0); 
                if (!fSuccess) {
                    DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Timeout waiting for DAT Inhibit\r\n"),
                                pszFname));
                    status = SD_API_STATUS_DEVICE_NOT_RESPONDING;
                    goto EXIT;
                }

                DEBUGMSG(SDHC_SEND_ZONE,(TEXT("Sending Transfer Mode 0x%04X\r\n"),wRegTxnMode));
                WriteWord(SDHC_TRANSFERMODE, wRegTxnMode);
            }
            else {
                // Command-only
                if (pRequest->CommandCode == SD_CMD_STOP_TRANSMISSION) {
                    wRegCommand |= CMD_TYPE_ABORT;
                }
                else if (TransferIsSDIOAbort(pRequest)) {
                    // Use R5b For CMD52, Function 0, I/O Abort
                    DEBUGMSG(SDHC_SEND_ZONE, (TEXT("Sending Abort command \r\n")));
                    wRegCommand |= CMD_TYPE_ABORT | CMD_RESPONSE_R1B_R5B;
                }
            }

            DEBUGMSG(SDHC_SEND_ZONE,(TEXT("Sending command register 0x%04X\r\n"),wRegCommand));
            DEBUGMSG(SDHC_SEND_ZONE,(TEXT("Sending command Argument 0x%08X\r\n"),pRequest->CommandArgument));

            WriteDword(SDHC_ARGUMENT_0, pRequest->CommandArgument);

            // Enable transfer interrupt sources.
            WriteWord(SDHC_NORMAL_INT_STATUS_ENABLE, wIntStatusEn);

            // Status Busy bit checking for clearing the interrupt status register before "CMD ISSUE".
            fSuccess = WaitForReg<DWORD>(&CSDHCSlotBase::ReadDword, SDHC_CONTROL4, SDHC_CONTROL4_STABUSY, 0); 
            if (!fSuccess) {
                DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Timeout waiting for CMD operation finish\r\n"),
                            pszFname));
                status = SD_API_STATUS_DEVICE_NOT_RESPONDING;
                goto EXIT;
            }

            // Turn the clock on. It is turned off in IndicateBusRequestComplete().
            SDClockOn();

            // Turn the LED on.
            EnableLED(TRUE);

            // Writing the upper byte of the command register starts the command.
            // All register initialization must already be complete by this point.
            WriteWord(SDHC_COMMAND, wRegCommand);
            if (m_fCommandPolling  ) {
                PollingForCommandComplete();
            }
            status = SD_API_STATUS_PENDING;

EXIT:
            return status;
        }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久超级碰视频| 成人激情视频网站| 国产精品不卡一区二区三区| 欧美顶级少妇做爰| 9l国产精品久久久久麻豆| 男女视频一区二区| 一级女性全黄久久生活片免费| 久久综合色之久久综合| 欧美日韩一区高清| 99精品桃花视频在线观看| 九九**精品视频免费播放| 亚洲国产毛片aaaaa无费看| 国产精品天美传媒沈樵| 欧美电视剧免费全集观看| 欧美精品v国产精品v日韩精品| www.在线成人| 高潮精品一区videoshd| 九九精品视频在线看| 日韩精品五月天| 亚洲一卡二卡三卡四卡无卡久久| 国产精品色在线| 久久久av毛片精品| 精品国产青草久久久久福利| 欧美三级视频在线| 欧美天天综合网| 欧美性猛片aaaaaaa做受| 91视频国产资源| 99九九99九九九视频精品| 成人不卡免费av| 国产精品自拍一区| 国产精品一区二区x88av| 美女爽到高潮91| 麻豆91小视频| 开心九九激情九九欧美日韩精美视频电影 | 国产一区美女在线| 看电视剧不卡顿的网站| 男人的天堂亚洲一区| 久久精品国产久精国产| 全国精品久久少妇| 秋霞电影一区二区| 麻豆精品新av中文字幕| 久久se这里有精品| 国产在线精品免费av| 国产一区久久久| 国产成人亚洲综合a∨婷婷| 国产电影一区二区三区| 成人黄页毛片网站| 91在线云播放| 欧美亚洲综合另类| 欧美精品vⅰdeose4hd| 日韩欧美高清在线| 国产欧美日韩不卡| 亚洲人成人一区二区在线观看| 一区二区三区在线观看欧美| 夜夜嗨av一区二区三区| 亚洲电影视频在线| 老司机午夜精品| 福利一区福利二区| 色拍拍在线精品视频8848| 欧美伊人精品成人久久综合97 | 97久久超碰国产精品电影| 91色porny蝌蚪| 欧美老年两性高潮| 久久蜜桃av一区二区天堂 | 亚洲欧美激情视频在线观看一区二区三区 | 欧美日韩一区三区四区| 欧美大片在线观看一区| 欧美激情综合五月色丁香小说| 亚洲精品视频免费看| 丝瓜av网站精品一区二区| 国内精品自线一区二区三区视频| 播五月开心婷婷综合| 欧美性色黄大片手机版| 久久网站热最新地址| 亚洲色图视频网站| 青青草成人在线观看| jlzzjlzz国产精品久久| 欧美精品色一区二区三区| 久久久久久夜精品精品免费| 亚洲黄色小视频| 久久国产精品色| 91免费国产在线观看| 日韩一区二区电影在线| 中文字幕欧美一| 麻豆freexxxx性91精品| 色噜噜久久综合| 久久综合久久综合亚洲| 一区二区高清在线| 国产精品一区二区三区四区| 色成人在线视频| xf在线a精品一区二区视频网站| 亚洲精品自拍动漫在线| 精品中文av资源站在线观看| 色婷婷激情综合| www国产精品av| 亚洲大片精品永久免费| 成年人网站91| 久久综合九色综合97婷婷女人 | 美腿丝袜在线亚洲一区| 色狠狠色噜噜噜综合网| 久久精品人人做人人爽97| 亚洲va天堂va国产va久| 99久久er热在这里只有精品66| 日韩免费高清视频| 亚洲国产精品一区二区久久恐怖片 | 蜜臀久久99精品久久久画质超高清 | 久久婷婷色综合| 日本成人中文字幕在线视频| 色综合天天综合网天天看片| 久久综合久久综合久久| 日本vs亚洲vs韩国一区三区二区| 日本精品一区二区三区高清| 中文子幕无线码一区tr| 精品一区免费av| 91精品国产综合久久福利| 亚洲影视资源网| 91丨porny丨国产| 国产精品沙发午睡系列990531| 国产呦萝稀缺另类资源| 日韩欧美色综合| 蜜桃视频在线一区| 5月丁香婷婷综合| 日日噜噜夜夜狠狠视频欧美人| 在线亚洲+欧美+日本专区| 亚洲欧美国产77777| www.性欧美| 日韩美女视频一区| 91视频免费观看| 樱桃国产成人精品视频| 色综合一个色综合亚洲| 亚洲美女在线国产| 色视频成人在线观看免| 一级精品视频在线观看宜春院 | 久久天堂av综合合色蜜桃网| 精品一区二区免费视频| 久久伊人蜜桃av一区二区| 韩国v欧美v亚洲v日本v| 久久噜噜亚洲综合| 国产精品99久久久久久久vr| 久久综合久久久久88| 国产成人综合视频| 国产精品免费视频观看| www.久久精品| 亚洲精品视频自拍| 欧美日本在线看| 久久精品免费看| 国产无人区一区二区三区| 国产成人av福利| 日韩美女啊v在线免费观看| 在线日韩一区二区| 日本欧美加勒比视频| 欧美成人r级一区二区三区| 韩国欧美一区二区| 日本一区二区三区在线不卡 | 欧美色精品天天在线观看视频| 午夜不卡av免费| 欧美va亚洲va在线观看蝴蝶网| 国产盗摄精品一区二区三区在线| 国产蜜臀av在线一区二区三区| 91网站黄www| 日韩在线a电影| 久久精品男人天堂av| 91黄色免费看| 久久国产视频网| 国产精品久久777777| 欧美四级电影网| 久久99国产精品久久| 日本一区二区电影| 欧美日本韩国一区二区三区视频 | 一本色道久久综合精品竹菊| 亚洲第一主播视频| 国产亚洲成av人在线观看导航| 91免费在线看| 久久精品国产精品亚洲综合| 国产精品国产三级国产| 555夜色666亚洲国产免| 国产不卡免费视频| 天天做天天摸天天爽国产一区| 久久综合中文字幕| 欧美视频一区二区三区在线观看 | 一区2区3区在线看| 久久众筹精品私拍模特| 欧美丝袜丝交足nylons| 国产一区二区免费视频| 亚洲在线观看免费视频| 久久精品亚洲国产奇米99 | 日本一区二区电影| 欧美一区二区三区日韩视频| 成人看片黄a免费看在线| 蜜臀精品久久久久久蜜臀| 国产精品白丝在线| 精品国精品自拍自在线| 欧美午夜精品免费| youjizz国产精品| 狠狠狠色丁香婷婷综合久久五月| 亚洲一区二区三区四区的| 国产精品嫩草影院av蜜臀| 精品久久久久99| 欧美精品aⅴ在线视频| 91福利视频网站|