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

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

?? sddevice.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 5 頁
字號(hào):
                break;
            else if (++m_dwCurSearchIndex>=m_dwArraySize)
                m_dwCurSearchIndex = 0 ;
        } while (dwStopIndex != m_dwCurSearchIndex);

        ASSERT(m_dwCurSearchIndex<m_dwArraySize);
        if( m_dwCurSearchIndex < m_dwArraySize && m_rgObjectArray[m_dwCurSearchIndex] == NULL )  {
            pReturn = m_rgObjectArray[m_dwCurSearchIndex] = pObject;
            pReturn->AddRef();
            if( pdwIndex )
                *( pdwIndex ) = m_dwCurSearchIndex;
        };
        Unlock();
        return pReturn;
    }
    else
    {
        return NULL;
    }
}
///////////////////////////////////////////////////////////////////////////////
//  GetCardRegisters - Get card registers
//  Input:  pBaseDevice - the base device
//          BaseDeviceType - base device type
//          pSlot - the slot
//  Output: 
//  Return:  SD_API_STATUS code
//  Notes:  This function retreives important card registers for the device type
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDDevice::GetCardRegisters()
{
    if (m_FuncionIndex!=0) {
        ASSERT(FALSE);
        return SD_API_STATUS_DEVICE_UNSUPPORTED;
    }
    SD_API_STATUS               status = SD_API_STATUS_DEVICE_UNSUPPORTED;    // status
    SD_COMMAND_RESPONSE         response;  // response
    UCHAR                       scrReg[SD_SCR_REGISTER_SIZE]; // temporary buffer
    USHORT                      oidValue;  // oid value
    SD_CARD_STATUS              cardStatus; // card status

    // must get CID first in order to get the cards into the IDENT state.
    // Check for SD I/O - only cards; will not have  CID.
    if (Device_SD_IO != m_DeviceType) {
        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice:  Getting registers from slot %d \n"), m_sdSlot.GetSlotIndex())); 

        // for MMC, SD Memory and SD Combo cards, retreive the CID
        status = SendSDCommand(SD_CMD_ALL_SEND_CID,0x00000000,ResponseR2,&response);

        if (!SD_API_SUCCESS(status)){
            return status;
        }

        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: Got CID from device in slot %d \n"), m_sdSlot.GetSlotIndex())); 
        // update shadow registers
        UpdateCachedRegisterFromResponse( SD_INFO_REGISTER_CID, &response);
    }

    // fetch/set the RCA
    if (Device_MMC != m_DeviceType) {
        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: Getting RCA from SD card in  slot %d .... \n"),m_sdSlot.GetSlotIndex())); 
        // get the RCA
        status = SendSDCommand(SD_CMD_SEND_RELATIVE_ADDR, 0x00000000,ResponseR6,&response);

        if (!SD_API_SUCCESS(status)){
            return status;
        }
        // update shadow registers
        UpdateCachedRegisterFromResponse(SD_INFO_REGISTER_RCA, &response);

        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: Got RCA (0x%04X) from SD card in slot %d \n"), 
                    m_RelativeAddress, m_sdSlot.GetSlotIndex())); 
    } else {
        // get OEM ID from the CID
        oidValue = m_CachedRegisters.CID[SD_CID_OID_OFFSET];
        oidValue |= (((USHORT)m_CachedRegisters.CID[SD_CID_OID_OFFSET + 1]) << 8);

        // for MMC cards set the RCA
        // take the unique OEM ID and add the slot number to it to form a system unique address
        m_RelativeAddress = (SD_CARD_RCA)(oidValue + m_sdSlot.GetSlotIndex());

        // add 1 if this is zero
        if (m_RelativeAddress == 0) {
            m_RelativeAddress++;
        }
        // for MMC cards, we must set the RCA
        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: Setting MMC RCA to 0x%04X .... \n"), m_RelativeAddress)); 

        // set the RCA
        status = SendSDCommand(SD_CMD_MMC_SET_RCA,((DWORD)m_RelativeAddress) << 16, ResponseR1,&response);

        if (!SD_API_SUCCESS(status)){
            return status;
        }

        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: RCA set for MMC device in slot %d \n"), m_sdSlot.GetSlotIndex())); 
    }

    // now that the RCA has been fetched/set, we can move on to do other things.........

    // check for SD I/O - Only cards. They will not have a CSD or card status
    if (Device_SD_IO != m_DeviceType) {
        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: Getting CSD in slot %d .... \n"), m_sdSlot.GetSlotIndex())); 

        // get the CSD
        status = SendSDCommand(SD_CMD_SEND_CSD,
                ((DWORD)m_RelativeAddress) << 16,
                ResponseR2,
                &response);

        if (!SD_API_SUCCESS(status)){
            return status;
        }

        // update shadow registers
        UpdateCachedRegisterFromResponse(SD_INFO_REGISTER_CSD, &response);
        DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: Got CSD from device in slot %d \n"), m_sdSlot.GetSlotIndex())); 
        // get the card status
        status = SendSDCommand( SD_CMD_SEND_STATUS,((DWORD)m_RelativeAddress) << 16,ResponseR1, &response);
        if (!SD_API_SUCCESS(status)){
            return status;
        }


        SDGetCardStatusFromResponse(&response, &cardStatus);

        if (cardStatus & SD_STATUS_CARD_IS_LOCKED) {
            DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: card in slot %d is locked\n"), m_sdSlot.GetSlotIndex())); 
            m_SDCardInfo.SDMMCInformation.CardIsLocked = TRUE;
        }

    }

    // now in order to get the SCR register we must be in the trans state
    // also in order to do a few other things, so lets select the card now and leave it
    // selected
    // send CMD 7 to select the card and keep it selected, this is required  for SDIO cards
    // too as mentioned in I/O working group newsgroup
    status = SendSDCommand( SD_CMD_SELECT_DESELECT_CARD,((DWORD)m_RelativeAddress) << 16, ResponseR1b, &response);

    if (!SD_API_SUCCESS(status)){
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("CSDDevice: Failed to select card in slot %d \n"), m_sdSlot.GetSlotIndex()));     
        return status;
    }

    DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice:Card in slot %d is now selected \n"), m_sdSlot.GetSlotIndex())); 

    // only SD Memory and Combo cards have an SCR
    if ((Device_SD_Memory == m_DeviceType) || (Device_SD_Combo == m_DeviceType)) {
        // if the card is unlocked, get the SCR
        if (!m_SDCardInfo.SDMMCInformation.CardIsLocked) {
            // get the SD Configuration register
            status = SendSDAppCmd(SD_ACMD_SEND_SCR, 0, SD_READ,  ResponseR1,&response,
                    1,                    // 1 block
                    SD_SCR_REGISTER_SIZE, // 64 bits
                    scrReg);

            // If the memory card is locked then the SCR becomes inaccessable. If we fail
            // to read the SCR then just set up the cached SCR register to default to
            // a 1bit access mode.

            if (!SD_API_SUCCESS(status)){
                DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("CSDDevice: Failed to get SCR from device in slot %d \n"), m_sdSlot.GetSlotIndex()));
                memset(m_CachedRegisters.SCR, 0, sizeof(m_CachedRegisters.SCR));
            } else {            
                // this is a spec discrepency, since the SCR register is not associated with 
                // an address, the byte order it ambiguous.  All the cards we have seen store the data 
                // most significant byte first as it arrives.  
                for (ULONG ii = 0 ; ii < sizeof(m_CachedRegisters.SCR); ii++) {
                    m_CachedRegisters.SCR[ii] = scrReg[(SD_SCR_REGISTER_SIZE - 1) - ii];
                }

                DEBUGMSG(SDBUS_ZONE_DEVICE, (TEXT("SDBusDriver: Got SCR from device in slot %d \n"), m_sdSlot.GetSlotIndex()));     
            }
        }
    }

    return SD_API_STATUS_SUCCESS;
}
SD_API_STATUS CSDDevice::HandleDeviceSelectDeselect(SD_SLOT_EVENT SlotEvent,BOOL fSelect)
{
    SD_API_STATUS          status = SD_API_STATUS_SUCCESS;
    UCHAR                  regValue;
    SD_COMMAND_RESPONSE    response;
    DbgPrintZo(SDBUS_ZONE_DEVICE, (TEXT("CSDDevice: HandleSlotSelectDeselect++: %d \n"),SlotEvent));
    BOOL fSDIO = FALSE;
    BOOL fSDMemory = FALSE;

    if (m_DeviceType ==Device_SD_IO ||  m_DeviceType == Device_SD_Combo ) {
        fSDIO = TRUE;
    }
    if ((m_DeviceType == Device_MMC) || (m_DeviceType == Device_SD_Memory) ||(m_DeviceType == Device_SD_Combo)) { 
        fSDMemory = TRUE;
    }

    if (fSelect) {
        if (m_FuncionIndex == 0 ) {
            // Select I/O controller first
            if (fSDIO) {
                if ( m_sdSlot.GetSlotState()!= SlotDeselected ) {
                    // reset I/O controller 
                    regValue = SD_IO_REG_IO_ABORT_RES;
                    status = SDSynchronousBusRequest_I(SD_IO_RW_DIRECT,
                            BUILD_IO_RW_DIRECT_ARG((UCHAR)SD_IO_WRITE,FALSE,0,(SD_IO_REG_IO_ABORT),SD_IO_REG_IO_ABORT_RES),
                            SD_COMMAND,ResponseR5,&response,0,0,NULL,(DWORD)SD_SLOTRESET_REQUEST); 
                    m_RelativeAddress = 0;
                }

                // Query OCR
                if (SD_API_SUCCESS(status)) {
                    status = SendSDCommand(SD_CMD_IO_OP_COND,0,ResponseR4,&response);
                }

                // Re-init I/O controller by powering it up
                if (SD_API_SUCCESS(status)) {
                    status = SetCardPower(Device_SD_IO,m_OperatingVoltage,FALSE);
                }

                if (SD_API_SUCCESS(status)) {
                    status = GetCardRegisters();
                }
                else {
                    DbgPrintZo(SDCARD_ZONE_ERROR, (TEXT("CSDSlot: Failed to power up SDIO card \n")));  
                }
            }
            if (fSDMemory) {

                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)) {
                    m_RelativeAddress = 0;
                }
                else{
                    DbgPrintZo(SDCARD_ZONE_ERROR,
                            (TEXT("CSDSlot: Go Idle Failed during selection: Status: 0x%08X on slot:%d \n"),status,m_sdSlot.GetSlotIndex()));
                }
                if (SD_API_SUCCESS(status)) { 
                    if ((m_DeviceType == Device_SD_Memory) || (m_DeviceType == Device_SD_Combo)) {
                        status = SendSDAppCommand(SD_ACMD_SD_SEND_OP_COND,0,ResponseR3,&response);
                    }
                }
                // Should I send CMD1 for MMC card here????  TODO!!!

                // Now it is ready to re-initialize memory controller.
                // Re-initialize memory controller by powering it up
                // SetCardPower will send CMD0 first before issuing ACMD41
                if (SD_API_SUCCESS(status)) { 
                    status = SetCardPower(m_DeviceType, m_OperatingVoltage,FALSE);
                }
                // For SD Memory, GetCardRegisters will do the following things:
                //  Issue CMD2 to make memory state trans to IDENT
                //  Issue CMD3 to get or set RCA
                //  Issue CMD7 to select the card again
                //  For SD Memory card, additional ACMD51 would be issued too, but
                //  should not have impact for init process.
                if (SD_API_SUCCESS(status)) { 
                    status = GetCardRegisters();
                }
            }
        }
        else {
            CSDDevice * pDevice0 = m_sdSlot.GetFunctionDevice(0);
            if (pDevice0) {
                CopyContentFromParent(*pDevice0);
                pDevice0->DeRef();
            }
        }
    }
    else {// De select Card.
        if ((SlotEvent == SlotResetRequest) || (SlotEvent == SlotDeselectRequest)) {
            DbgPrintZo(SDBUS_ZONE_DEVICE, (TEXT("CSDSlot: Deselect the card\n")));

            if (m_FuncionIndex == 0 ) {
                // deselect I/O controller first, see SDIO Spec v1.1 Section 3.4.4
                if (fSDIO) {
                    regValue = SD_IO_REG_IO_ABORT_RES;
                    status = SDReadWriteRegistersDirect_I(SD_IO_WRITE,SD_IO_REG_IO_ABORT,FALSE,&regValue,1);
                    if (SD_API_SUCCESS(status))  {
                        // TODO, should CCCRShadowIntEnable to be updated???
                        m_SDCardInfo.SDIOInformation.pCommonInformation->CCCRShadowIOEnable = 0;
                    }
                    else {
                        DbgPrintZo(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Failed to deselect SDIO card \n")));  
                    }
                }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区三区四区| 亚洲第一福利一区| 国产成人在线视频网站| 精品sm捆绑视频| 久久99国产精品久久99果冻传媒| 日韩精品在线一区| 国产成人自拍网| 国产精品久久久久久久蜜臀 | 在线观看亚洲a| 一区二区三区在线观看欧美| 欧美日韩一区中文字幕| 久久国产精品免费| 中文久久乱码一区二区| 欧美羞羞免费网站| 视频精品一区二区| 久久综合九色欧美综合狠狠| 国产成a人亚洲精| 一卡二卡三卡日韩欧美| 日韩欧美区一区二| a美女胸又www黄视频久久| 亚洲高清在线视频| 精品1区2区在线观看| 91看片淫黄大片一级在线观看| 午夜视频在线观看一区二区三区 | 在线看一区二区| 蜜桃av噜噜一区| 综合婷婷亚洲小说| 欧美一区二区福利视频| 成人av免费观看| 日韩制服丝袜先锋影音| 国产精品色一区二区三区| 欧美二区三区的天堂| 国v精品久久久网| 五月天丁香久久| 中文字幕亚洲欧美在线不卡| 6080日韩午夜伦伦午夜伦| 成人国产免费视频| 麻豆极品一区二区三区| 亚洲视频狠狠干| 亚洲精品一区二区三区影院| 在线观看不卡视频| 成人综合婷婷国产精品久久蜜臀| 亚洲第一主播视频| 中文字幕一区二区三区在线不卡| 欧美一区二区在线看| 一本大道综合伊人精品热热 | 成人18视频日本| 久久精品国产秦先生| 亚洲一区中文日韩| 国产精品久久毛片a| 精品国产青草久久久久福利| 精品视频一区二区三区免费| 99国产精品久久久久久久久久 | 国产午夜精品一区二区三区四区| 91成人国产精品| 成人深夜在线观看| 国产一区激情在线| 日韩成人精品在线观看| 亚洲精品水蜜桃| 中文字幕精品三区| 欧美mv日韩mv| 欧美不卡一区二区三区| 欧美日韩国产小视频| 一本大道久久a久久综合婷婷 | 免费观看久久久4p| 亚洲国产你懂的| 亚洲综合色噜噜狠狠| 综合激情网...| 自拍偷自拍亚洲精品播放| 国产精品国产三级国产aⅴ原创 | 亚洲国产岛国毛片在线| 久久综合九色综合久久久精品综合| 日韩精品中午字幕| 欧美草草影院在线视频| 精品少妇一区二区三区免费观看 | 国产亚洲综合在线| wwwwww.欧美系列| 久久无码av三级| 久久久久久99久久久精品网站| 精品国产乱码久久久久久免费 | 日韩国产高清在线| 天天色天天操综合| 丝袜诱惑制服诱惑色一区在线观看| 午夜精品一区二区三区电影天堂 | 欧美日韩一区二区欧美激情| 欧美唯美清纯偷拍| 欧美中文字幕一二三区视频| 欧美日韩和欧美的一区二区| 91精品国产全国免费观看| 欧美一级一级性生活免费录像| 日韩一区二区免费在线电影| 欧美成人猛片aaaaaaa| 国产欧美一区二区精品性色超碰| 国产精品久久久久久久蜜臀| 亚洲综合在线视频| 日韩电影免费在线看| 韩国女主播一区| 不卡av免费在线观看| 91成人免费在线视频| 欧美一区二区视频免费观看| ww亚洲ww在线观看国产| 亚洲欧美在线另类| 亚洲第一成人在线| 国产在线乱码一区二区三区| 成人a免费在线看| 欧美高清hd18日本| 欧美国产日韩一二三区| 一区二区三区影院| 麻豆精品在线观看| 99久久国产综合精品色伊| 欧美视频一区二区三区四区| 精品久久久久久久久久久久包黑料| 国产精品久久久久久久久免费相片| 亚洲综合色在线| 国产精品夜夜爽| 欧美美女一区二区在线观看| 国产免费成人在线视频| 亚洲一区国产视频| 国产精品一二二区| 欧美性感一区二区三区| 亚洲精品在线三区| 夜夜亚洲天天久久| 国产久卡久卡久卡久卡视频精品| 在线观看一区二区视频| 久久精品免视看| 日韩精品电影一区亚洲| 99久久精品久久久久久清纯| 日韩久久久久久| 亚洲国产综合91精品麻豆| 国产福利一区在线| 51久久夜色精品国产麻豆| 国产精品色哟哟| 久久99精品国产91久久来源| 欧美午夜精品久久久久久孕妇| 中文一区在线播放| 激情六月婷婷久久| 欧美裸体一区二区三区| 亚洲婷婷国产精品电影人久久| 精品无人区卡一卡二卡三乱码免费卡| 在线看不卡av| 中文字幕在线免费不卡| 国内精品国产成人国产三级粉色 | 亚洲激情五月婷婷| 国产精品18久久久久久久久久久久 | 久草精品在线观看| 欧美丝袜第三区| 亚洲区小说区图片区qvod| 成人性生交大片免费看中文网站| 精品蜜桃在线看| 日本不卡视频在线| 欧美日韩精品三区| 亚洲一级二级在线| 91亚洲精华国产精华精华液| 欧美国产乱子伦| 国产成人aaa| 欧美国产欧美综合| 国产99久久精品| 国产亚洲精品资源在线26u| 久久精品国产在热久久| 欧美一级高清大全免费观看| 亚洲成人动漫在线观看| 欧美日韩一区在线观看| 一区二区三区不卡视频在线观看| 91美女在线视频| 中文字幕一区二区三区不卡| 成人免费视频视频在线观看免费| 国产欧美日韩不卡免费| 国产aⅴ综合色| 国产精品视频麻豆| 91在线高清观看| 一区二区三区 在线观看视频| 欧美主播一区二区三区| 亚洲图片有声小说| 在线播放日韩导航| 九九**精品视频免费播放| 日韩精品综合一本久道在线视频| 精品一区二区av| 国产欧美日韩麻豆91| 91一区在线观看| 亚洲一区二区欧美激情| 91精品国产乱| 狠狠色狠狠色综合| 久久久亚洲精品一区二区三区| 成人一级视频在线观看| 久久美女艺术照精彩视频福利播放| 国产一区二区在线观看免费| 国产欧美一区二区精品仙草咪 | 国产资源精品在线观看| 久久久久国产成人精品亚洲午夜| 成人一区二区三区视频在线观看| 亚洲日本在线看| 欧美精品久久一区二区三区| 另类小说一区二区三区| 国产亚洲婷婷免费| 99re8在线精品视频免费播放| 亚洲第四色夜色| 久久青草国产手机看片福利盒子| 99久久婷婷国产综合精品电影| 亚洲成人激情av| 久久久久国产一区二区三区四区|