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

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

?? sddevice.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 5 頁
字號(hào):
                if (fSDMemory && SD_API_SUCCESS(status)) {
                    status = SDSynchronousBusRequest_I(SD_CMD_GO_IDLE_STATE,
                            0x00000000,SD_COMMAND,NoResponse,NULL,0,0,NULL,(DWORD)SD_SLOTRESET_REQUEST);
                    if (SD_API_SUCCESS(status))  {
                        DbgPrintZo(SDCARD_ZONE_ERROR,(TEXT("CSDSlot: Go Idle Failed during deselection: Status: 0x%08X \n"),
                                    status));
                    }

                }
            }
            m_RelativeAddress = 0;
            m_bCardDeselectRequest = FALSE;
        }
    }
    return status;
}

///////////////////////////////////////////////////////////////////////////////
//  DeactivateCardDetect - Deativate Card Detect resistors on SD devices
//  Input:  pBaseDevice - the base device
//          BaseDeviceType - the base device type
//          pSlot - the slot
//  Output: 
//  Return : SD_API_STATUS code
//  Notes:  This function deactivates the card detect resistor for SDIO,
//          SD and or Combo cards
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDDevice::DeactivateCardDetect()
{
    UCHAR                   regValue;       // intermediate value
    SD_API_STATUS           status;         // status
    SD_COMMAND_RESPONSE     response;       // response
    BOOL                    fDisableSDIO;   // disable SDIO portion?

    ASSERT(m_FuncionIndex == 0);
    if (Device_SD_IO == m_DeviceType ) {
        fDisableSDIO = TRUE;
    }
    else if (Device_SD_Combo == m_DeviceType) {
        fDisableSDIO = TRUE;

        // *** Combo Card Issue ***
        // SDIO 1.00 requires that both memory and SDIO portions of combo
        // cards be deactivated.
        // SDIO 1.10 only requires one of memory or SDIO combo to be disabled. (4.6)
        // Some 1.10 cards have a problem where only one can be disabled--disabling 
        // both simultaneously will fail.
        //
        // Our solution is to disable both for < 1.10 and only disable memory 
        // for >= 1.10.

        BYTE bSDIORevision; // SDIO spec version
        status = SDReadWriteRegistersDirect_I(SD_IO_READ, SD_IO_REG_CCCR, FALSE, &bSDIORevision, sizeof(bSDIORevision));
        if (!SD_API_SUCCESS(status)) {
            DEBUGMSG(SDCARD_ZONE_ERROR, 
                    (TEXT("SDBusDriver: Failed to read SDIO revision in slot %d. We will treat it as a 1.0 combo card \n"),
                     m_sdSlot.GetSlotIndex()));
        }
        else {
            bSDIORevision >>= 4; // SDIO revision is in the upper four bits.
            if (bSDIORevision != 0x0) {
                fDisableSDIO = FALSE;
            }
        }
    }
    else {
        DEBUGCHK(Device_SD_Memory == m_DeviceType || 
                Device_MMC == m_DeviceType);
        fDisableSDIO = FALSE;
    }

    // for SD memory or combo, send ACMD42 to turn off card detect resistor
    if ( (Device_SD_Memory == m_DeviceType) || 
            (Device_SD_Combo == m_DeviceType) ) {
        // send ACMD42
        status = SendSDAppCommand(SD_ACMD_SET_CLR_CARD_DETECT,
                0x00000000,  // bit 0 - cleared to disconnect pullup resistor
                ResponseR1,
                &response);

        if (!SD_API_SUCCESS(status)){
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Failed to turn off CD resistor in slot %d \n"), m_sdSlot.GetSlotIndex())); 
            return status;
        }
    }

    // for SD I/O or SD Combo cards, write to the Bus Interface control register and clear the CD bit
    if (fDisableSDIO) {
        regValue = SD_IO_BUS_CONTROL_CD_DETECT_DISABLE; 

        status = SDReadWriteRegistersDirect_I(SD_IO_WRITE,
                SD_IO_REG_BUS_CONTROL,
                TRUE,        // read after write
                &regValue,
                1);

        if (!SD_API_SUCCESS(status)){
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Failed to turn off CD resistor for SDIO Device in slot %d \n"), m_sdSlot.GetSlotIndex())); 
            return status;
        }
    }

    return SD_API_STATUS_SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////
//  UpdateCachedRegisterFromResponse - update the device shadow registers from the
//                                     information in the response buffer
//  Input:  pDevice - the device who's shadowed register should be updated
//          Register - the information to update
//          pResponse - the response containing the register data
//  Output: 
//  Return
//  Notes:  
//         
///////////////////////////////////////////////////////////////////////////////
VOID CSDDevice::UpdateCachedRegisterFromResponse(SD_INFO_TYPE  Register,PSD_COMMAND_RESPONSE     pResponse) 
{

    switch (Register) { 

        case SD_INFO_REGISTER_CID:
            memcpy(m_CachedRegisters.CID, pResponse->ResponseBuffer, SD_CID_REGISTER_SIZE);
            break;
        case SD_INFO_REGISTER_RCA:
            // RCA is in bytes 3,4
            m_RelativeAddress = (SD_CARD_RCA)pResponse->ResponseBuffer[3];
            m_RelativeAddress |= ((SD_CARD_RCA)pResponse->ResponseBuffer[4]) << 8;
            break;
        case SD_INFO_REGISTER_OCR: 
            m_CachedRegisters.OCR[3] = pResponse->ResponseBuffer[4];
            m_CachedRegisters.OCR[2] = pResponse->ResponseBuffer[3];
            m_CachedRegisters.OCR[1] = pResponse->ResponseBuffer[2];
            m_CachedRegisters.OCR[0] = pResponse->ResponseBuffer[1];
            break;
        case SD_INFO_REGISTER_CSD:
            memcpy(m_CachedRegisters.CSD, pResponse->ResponseBuffer, SD_CSD_REGISTER_SIZE);
            break;
        case SD_INFO_REGISTER_IO_OCR:
            m_CachedRegisters.IO_OCR[2] = pResponse->ResponseBuffer[3];
            m_CachedRegisters.IO_OCR[1] = pResponse->ResponseBuffer[2];
            m_CachedRegisters.IO_OCR[0] = pResponse->ResponseBuffer[1];
            break;
        default:
            DEBUGCHK(FALSE);
    }

}
SD_API_STATUS  CSDDevice::SetOperationVoltage(SDCARD_DEVICE_TYPE DeviceType,BOOL SetHCPower)
{
    SD_API_STATUS status = SD_API_STATUS_DEVICE_UNSUPPORTED;
    if (SetHCPower) {
        DWORD ocrValue;
        ASSERT(m_FuncionIndex == 0 );
        if (m_DeviceType == Device_SD_Memory || m_DeviceType == Device_MMC) {
            ocrValue = (DWORD)m_CachedRegisters.OCR[0] & ~0xF;
            ocrValue |= ((DWORD)m_CachedRegisters.OCR[1]) << 8;  
            ocrValue |= ((DWORD)m_CachedRegisters.OCR[2]) << 16; 
        }
        else if (m_DeviceType == Device_SD_IO || m_DeviceType == Device_SD_Combo) {
            ocrValue = (DWORD)m_CachedRegisters.IO_OCR[0] & ~0xF;
            ocrValue |= ((DWORD)m_CachedRegisters.IO_OCR[1]) << 8; 
            ocrValue |= ((DWORD)m_CachedRegisters.IO_OCR[2]) << 16;
        }
        else 
            ASSERT(FALSE);
        m_OperatingVoltage = m_sdSlot.SDGetOperationalVoltageRange(ocrValue);
    }
    // check to see if the voltages can be supported
    if (0 != m_OperatingVoltage ) {

        // power up the card
        status = SetCardPower(DeviceType, m_OperatingVoltage, SetHCPower);
    }
    return status;

}

///////////////////////////////////////////////////////////////////////////////
//  SetCardPower - Set the card power
//  Input:  DeviceType - the device type 
//          OperatingVoltageMask - operating voltage mask
//          pSlot - the slot
//          SetHCPower - flag to indicate whether the power should be set in the HC
//                       (combo cards do not need to reset power if the I/O portion
//                        was already powered).     
//              
//  Output: 
//  Return: SD_API_STATUS code
//  Notes:  
//          This function sets the card power and polls the card until it is
//          not busy
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDDevice::SetCardPower(SDCARD_DEVICE_TYPE DeviceType,DWORD OperatingVoltageMask,BOOL SetHCPower)
{
    SD_API_STATUS       status = SD_API_STATUS_SUCCESS;  // intermediate status 
    SD_COMMAND_RESPONSE response;                        // response
    UCHAR               command;                         // command
    SD_RESPONSE_TYPE    responseType;                    // response type
    ULONG               powerUpRetries;                  // power up retries
    BOOL                appcmd = FALSE;                  // command is an app cmd
    ULONG               powerUpInterval;                 // powerup interval
    ULONG               totalPowerUpTime;                // total powerup time
    ULONG               powerUpIntervalByDevice;         // powerup interval by device

    switch (DeviceType) {

        case Device_MMC:
            command = SD_CMD_MMC_SEND_OPCOND;
            responseType = ResponseR3;
            powerUpIntervalByDevice = DEFAULT_POWER_UP_MMC_POLL_INTERVAL;
            break;
        case Device_SD_IO:
            command = SD_CMD_IO_OP_COND;
            responseType = ResponseR4;
            powerUpIntervalByDevice = DEFAULT_POWER_UP_SDIO_POLL_INTERVAL;
            break;
        case Device_SD_Memory:
            command = SD_ACMD_SD_SEND_OP_COND;
            responseType = ResponseR3;
            appcmd = TRUE;
            powerUpIntervalByDevice = DEFAULT_POWER_UP_SD_POLL_INTERVAL;
            break;
        default:
            DEBUGCHK(FALSE);
            return SD_API_STATUS_INVALID_PARAMETER;
    }

    // check to see if we need to apply power
    if (SetHCPower) {
        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("SDBusDriver: Setting slot %d power to 0x%08X \n"), 
                    m_sdSlot.GetSlotIndex(), OperatingVoltageMask)); 
        // set slot power           
        status = m_sdSlot.SDSetSlotPower(OperatingVoltageMask);    

        if (!SD_API_SUCCESS(status)) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Host failed to set slot power 0x%08X on slot:%d \n"),
                        status, m_sdSlot.GetSlotIndex()));
            return status;
        }

        m_sdSlot.DelayForPowerUp();
    }

    if (Device_SD_IO != DeviceType) {
        // put the card into idle again
        status = SendSDCommand(SD_CMD_GO_IDLE_STATE, 0x00000000, NoResponse, NULL);
        if (!SD_API_SUCCESS(status)){
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Go Idle Failed during powerup: Status: 0x%08X on slot:%d \n"),status,
                        m_sdSlot.GetSlotIndex()));
            return status;
        }
        if ((Device_SD_Memory == DeviceType || Device_MMC==DeviceType) && IsValid20Card()) {
            OperatingVoltageMask |= 0x40000000; // HCS
        }
    }

    totalPowerUpTime = CSDHostContainer::RegValueDWORD(POWER_UP_POLL_TIME_KEY, DEFAULT_POWER_UP_TOTAL_WAIT_TIME);
    powerUpInterval = CSDHostContainer::RegValueDWORD(POWER_UP_POLL_TIME_INTERVAL_KEY, powerUpIntervalByDevice);

    powerUpRetries = totalPowerUpTime/powerUpInterval;

    DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("SDBusDriver: Power Set, checking card in slot %d, MaxRetries: %d, Time: %d MS, Interval: %d MS \n"), 
                m_sdSlot.GetSlotIndex(), powerUpRetries, totalPowerUpTime , powerUpInterval)); 

    while (powerUpRetries != 0) {

        if (appcmd) {
            // send it as an APP cmd
            status = SendSDAppCommand(command,
                    OperatingVoltageMask,
                    responseType,
                    &response);
        } else {
#ifdef _MMC_SPEC_42_
            /**
             * Description : To support MMC Spec 4.2
             */
            OperatingVoltageMask |= (1<<30);
#endif
            // send the command to get the ready bit
            status = SendSDCommand(command,
                    OperatingVoltageMask,
                    responseType,
                    &response);
        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91高清视频在线| 欧美亚洲一区二区在线观看| 欧美大片顶级少妇| 日本最新不卡在线| 欧美大片顶级少妇| 成人免费视频视频在线观看免费| 中文天堂在线一区| 欧美日韩一区精品| 久久精品国产精品青草| 国产亚洲va综合人人澡精品| 91在线免费视频观看| 午夜精品一区二区三区免费视频 | 中文字幕在线观看一区二区| 91丨九色丨尤物| 午夜久久久久久电影| 2020国产精品自拍| 一本色道a无线码一区v| 日韩av中文字幕一区二区三区| 久久久蜜桃精品| 在线这里只有精品| 精品一区二区三区在线观看国产 | 亚洲一区二区三区国产| 欧美一区中文字幕| 成人激情综合网站| 图片区小说区国产精品视频| 久久久精品蜜桃| 在线观看亚洲专区| 国产综合色产在线精品 | 亚洲午夜久久久久久久久电影网| 欧美疯狂性受xxxxx喷水图片| 国产精品996| 天堂va蜜桃一区二区三区漫画版| 国产日韩一级二级三级| 欧美亚一区二区| 国产九色sp调教91| 日韩国产欧美一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 91麻豆精品91久久久久同性| 国产成人精品免费| 免费三级欧美电影| 一区二区三区鲁丝不卡| 国产欧美一区二区精品秋霞影院 | 国产原创一区二区| 性做久久久久久久久| 国产精品国产馆在线真实露脸| 欧美一区二区女人| 色哟哟精品一区| 国产91精品一区二区麻豆亚洲| 日韩不卡一二三区| 亚洲男人的天堂在线aⅴ视频| 久久久不卡网国产精品二区| 91精品国产色综合久久ai换脸| 一本一道波多野结衣一区二区 | 成人av手机在线观看| 久久国产麻豆精品| 日本亚洲最大的色成网站www| 亚洲视频资源在线| 国产精品欧美一级免费| 精品国产一区久久| 91精品国产综合久久久久久久久久| 91亚洲大成网污www| 高清视频一区二区| 国产一区二区久久| 极品美女销魂一区二区三区 | 91在线视频播放地址| 国产成人精品www牛牛影视| 极品尤物av久久免费看| 麻豆精品一区二区三区| 午夜精品视频一区| 午夜精品久久久久久久久久久 | 亚洲欧洲在线观看av| 国产欧美久久久精品影院| 国产三级精品三级在线专区| 国产无一区二区| 日韩一级精品视频在线观看| 日韩一区二区三区电影在线观看 | 欧美日韩专区在线| 欧美日韩一区二区三区四区五区| 色婷婷综合久久久久中文| 色婷婷激情综合| 欧美性受xxxx黑人xyx| 欧美精品免费视频| 3d成人h动漫网站入口| 日韩欧美一区二区久久婷婷| 日韩欧美在线1卡| 精品久久久久久久久久久院品网| 日韩一区二区精品葵司在线 | 欧美一区二区三区小说| 91精品国产免费| 精品国产3级a| 国产午夜精品久久久久久久 | 亚洲国产成人在线| 136国产福利精品导航| 一区二区三区中文字幕精品精品 | 国产精品久久久久久久岛一牛影视| 国产精品久久影院| 有码一区二区三区| 日韩电影免费在线| 国产精品自拍在线| 91麻豆国产自产在线观看| 欧美蜜桃一区二区三区| 精品久久久久久久久久久院品网| 国产精品情趣视频| 亚洲国产精品影院| 久久99精品久久久久久久久久久久| 国产精品综合在线视频| 99久久精品情趣| 欧美一区二区三区在线电影| 亚洲国产精品成人久久综合一区| 一区二区三区毛片| 国产麻豆精品久久一二三| 色诱亚洲精品久久久久久| 欧美一区二区成人| 国产精品夫妻自拍| 日本欧美在线看| www.成人在线| 日韩色视频在线观看| 亚洲免费在线电影| 国内久久精品视频| 欧美伊人久久大香线蕉综合69| 欧美成人女星排名| 亚洲精品视频在线看| 国产精品亚洲视频| 3d成人动漫网站| 亚洲视频资源在线| 国产中文字幕一区| 欧美日韩国产免费| 1000部国产精品成人观看| 久久精品国产亚洲aⅴ| 色一情一乱一乱一91av| 国产欧美一区二区在线| 奇米影视一区二区三区| 色偷偷久久一区二区三区| 精品成a人在线观看| 粉嫩av一区二区三区| 欧美日韩国产免费一区二区| 亚洲图片另类小说| 国产精品亚洲人在线观看| 欧美精品久久天天躁| 亚洲激情在线激情| 成人h动漫精品| 国产亚洲综合色| 韩国v欧美v亚洲v日本v| 91精品综合久久久久久| 麻豆成人综合网| 91麻豆国产精品久久| 国产亚洲欧美一级| 国产在线一区二区综合免费视频| 欧美日韩国产一区| 一区二区三区美女| 色综合久久久久网| 亚洲人成人一区二区在线观看| 成人性生交大片免费看视频在线 | 国产精品欧美一区喷水| 国产精品综合二区| 久久综合久久综合久久综合| 裸体健美xxxx欧美裸体表演| 日韩一区二区三区三四区视频在线观看| 亚洲一区二区三区四区在线| 99久久亚洲一区二区三区青草 | 欧美亚洲精品一区| 一区二区三区不卡在线观看| 91麻豆产精品久久久久久| 国产精品毛片a∨一区二区三区| 国产成人av福利| 国产亚洲视频系列| 国产成人自拍网| 国产精品人人做人人爽人人添 | 国产一区二区视频在线| 精品国产髙清在线看国产毛片| 免费观看一级特黄欧美大片| 日韩欧美高清一区| 久久99精品国产.久久久久 | 91久久一区二区| 亚洲日本va午夜在线电影| 在线精品亚洲一区二区不卡| 亚洲欧美二区三区| 欧美亚洲综合色| 男女视频一区二区| 久久人人97超碰com| 国产99久久久精品| 亚洲女人****多毛耸耸8| 欧美色图免费看| 蜜桃一区二区三区在线| 久久久久久久久岛国免费| 成人av网在线| 亚欧色一区w666天堂| 欧美r级电影在线观看| 国产成人日日夜夜| 亚洲激情自拍视频| 日韩免费观看高清完整版在线观看| 国产自产视频一区二区三区| 一区精品在线播放| 91精品国产高清一区二区三区蜜臀| 九九精品视频在线看| 国产精品久久久一本精品| 欧美午夜精品一区二区蜜桃| 韩日欧美一区二区三区| 一区二区三区欧美亚洲| 日韩一区二区电影网|