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

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

?? sddevinf.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
    // Erase Group Mult fields
    eraseGroupSize = (UCHAR)GET_BIT_SLICE_FROM_CSD(pCSD,MMC_CSD_ER_GRP_SIZE_BIT_SLICE, 
        MMC_CSD_ER_GRP_SIZE_SLICE_SIZE);

    eraseGroupMult = (UCHAR)GET_BIT_SLICE_FROM_CSD(pCSD,MMC_CSD_ER_GRP_MULT_BIT_SLICE, 
        MMC_CSD_ER_GRP_MULT_SLICE_SIZE);


    pParsedCSD->EraseSectorSize = (eraseGroupSize+1)*(eraseGroupMult+1);

    pParsedCSD->WPGroupSize = (UCHAR)GET_BIT_SLICE_FROM_CSD(pCSD,MMC_CSD_WP_GROUP_SIZE_BIT_SLICE, 
        MMC_CSD_WP_GROUP_SIZE_SLICE_SIZE);

    pParsedCSD->WPGroupSize++;
  } else {

    // Erase by block size enabled
    pParsedCSD->EraseBlockEnable = GET_BIT_SLICE_FROM_CSD(pCSD,SD_CSD_ERASE_BL_ENABLE_BIT_SLICE, 
        SD_CSD_ERASE_BL_ENABLE_SLICE_SIZE)
      ? TRUE:FALSE;

    // Erase Sector Size

    pParsedCSD->EraseSectorSize = (UCHAR)GET_BIT_SLICE_FROM_CSD(pCSD,SD_CSD_ERASE_SECT_SIZE_BIT_SLICE, 
        SD_CSD_ERASE_SECT_SIZE_SLICE_SIZE);


    pParsedCSD->EraseSectorSize++;


    // Write Protect Group Size
    pParsedCSD->WPGroupSize = (UCHAR)GET_BIT_SLICE_FROM_CSD(pCSD,SD_CSD_WP_GROUP_SIZE_BIT_SLICE, 
        SD_CSD_WP_GROUP_SIZE_SLICE_SIZE);

    pParsedCSD->WPGroupSize++;
  }

  memcpy(pParsedCSD->RawCSDRegister, m_CachedRegisters.CSD, SD_CSD_REGISTER_SIZE );
  DumpParsedCSDRegisters(pParsedCSD);

  return SD_API_STATUS_SUCCESS;
}

SD_API_STATUS CSDDevice::InfoQueryRCA(PVOID pCardInfo, ULONG cbCardInfo)
{
    PREFAST_DEBUGCHK(pCardInfo);
    DEBUGCHK(cbCardInfo == sizeof(SD_CARD_RCA));

    memcpy(pCardInfo, &m_RelativeAddress, sizeof(SD_CARD_RCA));

    return SD_API_STATUS_SUCCESS;
}

SD_API_STATUS CSDDevice::InfoQueryCardInterface(PVOID pCardInfo,ULONG cbCardInfo)
{
    PREFAST_DEBUGCHK(pCardInfo);
    DEBUGCHK(cbCardInfo == sizeof(SD_CARD_INTERFACE_EX));

    m_CardInterfaceEx.InterfaceModeEx.bit.sdHighCapacity = (IsHighCapacitySDMemory()?1: 0);
    *(PSD_CARD_INTERFACE_EX)pCardInfo = m_CardInterfaceEx;
    return SD_API_STATUS_SUCCESS;
}


SD_API_STATUS CSDDevice::InfoQueryStatus(
                              PVOID                   pCardInfo,
                              ULONG                   cbCardInfo
                              )
{
    DEBUGCHK(pCardInfo);
    DEBUGCHK(cbCardInfo == sizeof(SD_CARD_STATUS));

    // get the card status
    return GetCardStatus((SD_CARD_STATUS *)pCardInfo);
}


SD_API_STATUS CSDDevice::InfoQuerySDIOInfo(PVOID pCardInfo, ULONG cbCardInfo )
{
    PREFAST_DEBUGCHK(pCardInfo);
    DEBUGCHK(cbCardInfo == sizeof(SDIO_CARD_INFO));
    
    if (Device_SD_IO != m_DeviceType || m_FuncionIndex==0) {
        ASSERT(FALSE);
        return SD_API_STATUS_INVALID_PARAMETER;
    }
    
    SD_API_STATUS status = SD_API_STATUS_INVALID_PARAMETER;
    CSDDevice * device0 = m_sdSlot.GetFunctionDevice(0);
    if (device0) {
        __try {
            ((PSDIO_CARD_INFO)pCardInfo)->FunctionNumber = m_SDCardInfo.SDIOInformation.Function;
            ((PSDIO_CARD_INFO)pCardInfo)->DeviceCode = m_SDCardInfo.SDIOInformation.DeviceCode;
            ((PSDIO_CARD_INFO)pCardInfo)->CISPointer = m_SDCardInfo.SDIOInformation.CISPointer;
            ((PSDIO_CARD_INFO)pCardInfo)->CSAPointer = m_SDCardInfo.SDIOInformation.CSAPointer;

            DEBUGCHK(device0->m_SDCardInfo.SDIOInformation.pCommonInformation != NULL);

            ((PSDIO_CARD_INFO)pCardInfo)->CardCapability = 
                device0->m_SDCardInfo.SDIOInformation.pCommonInformation->CardCapability;
            status = SD_API_STATUS_SUCCESS;
        }
        __except(SDProcessException(GetExceptionInformation())) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        device0->DeRef();
    }
    else {
        ASSERT(FALSE);
    }
    return status;
}


SD_API_STATUS CSDDevice::InfoQueryHostInterface(PVOID pCardInfo,ULONG cbCardInfo )
{
    PREFAST_DEBUGCHK(pCardInfo);
    DEBUGCHK(cbCardInfo == sizeof(SD_CARD_INTERFACE));

    PSD_CARD_INTERFACE pCardCapabilities = (PSD_CARD_INTERFACE)pCardInfo;
    // fetch the max clock rate
    pCardCapabilities->ClockRate = m_sdSlot.MaxClockRate;

    // work out the best interface the HC can provide
    if( m_sdSlot.Capabilities & SD_SLOT_SD_4BIT_CAPABLE ) {
        pCardCapabilities->InterfaceMode = SD_INTERFACE_SD_4BIT;
    } else {
        pCardCapabilities->InterfaceMode = SD_INTERFACE_SD_MMC_1BIT;
    }

    // write protect is meaningless for a capability query, set to FALSE
    pCardCapabilities->WriteProtected = FALSE;    

    return SD_API_STATUS_SUCCESS;
}


SD_API_STATUS CSDDevice::InfoQueryBlockCaps(PVOID pCardInfo,ULONG cbCardInfo )
{
    DEBUGCHK(pCardInfo);
    DEBUGCHK(cbCardInfo == sizeof(SD_HOST_BLOCK_CAPABILITY));
    SD_HOST_BLOCK_CAPABILITY sdHostBLockCap = *(PSD_HOST_BLOCK_CAPABILITY)pCardInfo;
    // send the requested block transfer size to the HC, if the HC is
    // unable to support the requested block size it will return the 
    // next supported block size smaller than that requested
    SD_API_STATUS status = m_sdSlot.GetHost().SlotOptionHandler(m_sdSlot.GetSlotIndex(),
        SDHCDQueryBlockCapability,
        &sdHostBLockCap,                
        sizeof(SD_HOST_BLOCK_CAPABILITY));
    if (SD_API_SUCCESS(status)) {
        *(PSD_HOST_BLOCK_CAPABILITY)pCardInfo = sdHostBLockCap;
    }
    return status;
}

///////////////////////////////////////////////////////////////////////////////
//  SDCardInfoQuery__X - Obtain Card information
//  Input:  hHandle        - SD Device Handle
//          InfoType       - information to get
//          StructureSize  - size of info structure
//  Output: pCardInfo      - Information specific structure 
//  Return: SD_API_STATUS code
//  Notes:  pCardInfo must point to sufficient memory for the informtion type
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDDevice::SDCardInfoQuery_I( IN  SD_INFO_TYPE     InfoType,
                                 OUT PVOID            pCardInfo,
                                 IN  ULONG            StructureSize)
{
    DEBUGMSG(SDCARD_ZONE_FUNC, (TEXT("SDCard: +SDCardInfoQuery\n")));
    SD_API_STATUS status = SD_API_STATUS_INVALID_PARAMETER;
    __try {
        switch (InfoType) {
          case SD_INFO_REGISTER_OCR:
            break;
          case SD_INFO_REGISTER_CID:
            if (StructureSize>=sizeof(SD_PARSED_REGISTER_CID) && pCardInfo!=NULL) {
                status = InfoQueryCID(pCardInfo, StructureSize);
            }
            break;
          case  SD_INFO_REGISTER_CSD: 
            if (StructureSize>=sizeof(SD_PARSED_REGISTER_CSD) && pCardInfo!=NULL ) {
                status = InfoQueryCSD(pCardInfo, StructureSize);
            }
            break;
          case SD_INFO_REGISTER_RCA:
            if (StructureSize>=sizeof(SD_CARD_RCA) && pCardInfo!=NULL) {
                status = InfoQueryRCA(pCardInfo, StructureSize);
            }
            break;
          case SD_INFO_REGISTER_IO_OCR:
            break;
          case SD_INFO_CARD_INTERFACE:
            if (StructureSize>=sizeof(SD_CARD_INTERFACE) && pCardInfo!=NULL) {
                SD_CARD_INTERFACE_EX sdCardInterfacEx;
                status = InfoQueryCardInterface(&sdCardInterfacEx, sizeof(sdCardInterfacEx));
                if (SD_API_SUCCESS(status)) {
                    *(PSD_CARD_INTERFACE)pCardInfo = ConvertFromEx(sdCardInterfacEx);
                }
            }
            break;
          case SD_INFO_CARD_INTERFACE_EX:
            if (StructureSize>=sizeof(SD_CARD_INTERFACE_EX) && pCardInfo!=NULL) {
                status = InfoQueryCardInterface((PSD_CARD_INTERFACE_EX)pCardInfo, sizeof(SD_CARD_INTERFACE_EX));
            }
            break;
          case SD_INFO_CARD_STATUS:
            if (StructureSize>=sizeof(SD_CARD_STATUS)&& pCardInfo!=NULL) {
                status = InfoQueryStatus(pCardInfo, StructureSize);
            }
            break;
          case SD_INFO_SDIO:
            if ( StructureSize>=sizeof(SDIO_CARD_INFO) && pCardInfo!=NULL) {
                status = InfoQuerySDIOInfo(pCardInfo, StructureSize);
            }
            break;
          case SD_INFO_HOST_IF_CAPABILITIES:
            if ( StructureSize>=sizeof(SD_CARD_INTERFACE)  && pCardInfo!=NULL) {
                status = InfoQueryHostInterface(pCardInfo, StructureSize);
            }
            break;
          case SD_INFO_HOST_BLOCK_CAPABILITY:
            if (StructureSize >= sizeof(SD_HOST_BLOCK_CAPABILITY) && pCardInfo!=NULL) {
                status = InfoQueryBlockCaps(pCardInfo, StructureSize);
            }
            break;
          case SD_INFO_HIGH_CAPACITY_SUPPORT:
            if (StructureSize>= sizeof(DWORD) && pCardInfo!=NULL) {
                SD_CARD_INTERFACE_EX sdCardInterfacEx;
                status = InfoQueryCardInterface(&sdCardInterfacEx, sizeof(sdCardInterfacEx));
                if (SD_API_SUCCESS(status)) {
                    *(PDWORD)pCardInfo = sdCardInterfacEx.InterfaceModeEx.bit.sdHighCapacity;
                }
            };
            break;
          case SD_INFO_SWITCH_FUNCTION:
            if (StructureSize>= sizeof(SD_CARD_SWITCH_FUNCTION) && pCardInfo!=NULL) {
                status =SwitchFunction((PSD_CARD_SWITCH_FUNCTION)pCardInfo, TRUE);
            }
            break;
        }
    }__except(SDProcessException(GetExceptionInformation())) {
        status = SD_API_STATUS_ACCESS_VIOLATION;
    };

    DEBUGMSG(SDCARD_ZONE_FUNC, (TEXT("SDCard: -SDCardInfoQuery status = %x\n"),status));
    return status;
}


// Shifts pbInput down by dwBitOffset.
static
VOID
ShiftBytes(PBYTE pbInput, ULONG cbInput, DWORD dwBitOffset, PBYTE pbOutput) 
{
    PREFAST_DEBUGCHK(pbInput);
    PREFAST_DEBUGCHK(pbOutput);

    DWORD dwByteIndex = dwBitOffset / 8;
    dwBitOffset %= 8;

    DWORD dwRemainderShift = 8 - dwBitOffset;

    // Only copy 4 bytes max.
    DWORD dwEndIndex = min(dwByteIndex + sizeof(DWORD), cbInput);
    DWORD dwCurrOutputIndex = 0;
    while (dwByteIndex < dwEndIndex) {
        DEBUGCHK(dwCurrOutputIndex < sizeof(DWORD));
        DEBUGCHK(dwByteIndex < cbInput);

        pbOutput[dwCurrOutputIndex] = pbInput[dwByteIndex] >> dwBitOffset;

        ++dwByteIndex;

        if (dwByteIndex != cbInput) {
            BYTE bTemp = pbInput[dwByteIndex];
            bTemp <<= dwRemainderShift;
            pbOutput[dwCurrOutputIndex] |= bTemp;
        }

        ++dwCurrOutputIndex;
    }
}


///////////////////////////////////////////////////////////////////////////////
//  GetBitSlice - Get a bit slice from a stream of bytes
//  Input:  pBuffer - buffer containing data stream
//          cbBuffer - size of buffer in bytes
//          dwBitOffset - bit offset from start of buffer
//          ucBitCount - number of bits (less than or equal to 32)
//  Output: 
//
//  Return: returns a DWORD contain the bit slice shifted to fill the least significant bits
//  Notes:  will raise an SEH exception if integer overflow occurs
///////////////////////////////////////////////////////////////////////////////
DWORD CSDDevice::GetBitSlice(PUCHAR pBuffer, ULONG cbBuffer, DWORD dwBitOffset, UCHAR ucBitCount)
{
    UCHAR rgbShifted[4] = { 0 };

    if (ucBitCount > 32) {
        DEBUG_CHECK(FALSE, (TEXT("GetBitSlice: invalid number of bits \n")));
        return 0;
    }

    typedef SafeInt<DWORD> SafeDW;
    // Exception will be raised on the next line if there is an overflow.
    if ( (SafeDW(dwBitOffset) + SafeDW(ucBitCount)) > (SafeDW(cbBuffer) * 8) ) {
        DEBUG_CHECK(FALSE, (TEXT("GetBitSlice: invalid bit offset given the number of bits \n")));
        return 0;
    }

    // Shift the pBuffer down by dwBitOffset bits.
    ShiftBytes(pBuffer, cbBuffer, dwBitOffset, rgbShifted);

    DWORD dwUsedBytes; // How many bytes have valid data.

    if (ucBitCount % 8 == 0) {
        // Return a byte multiple.
        dwUsedBytes = ucBitCount / 8;
    }
    else {
        // Clear the last used byte of upper bits.
        DWORD dwLastByteIndex = (ucBitCount - 1) / 8;
        DWORD dwRemainderShift = 8 - (ucBitCount % 8);
        rgbShifted[dwLastByteIndex] <<= dwRemainderShift;
        rgbShifted[dwLastByteIndex] >>= dwRemainderShift;
        dwUsedBytes = dwLastByteIndex + 1;
    }

    // Clear the unused bytes.
    if (dwUsedBytes != sizeof(rgbShifted)) {
        memset(rgbShifted + dwUsedBytes, 0, sizeof(rgbShifted) - dwUsedBytes);
    }

    DWORD dwRet;
    memcpy(&dwRet, rgbShifted, sizeof(dwRet));

    return dwRet;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲综合在线| 欧美一区二视频| 国产精品国产三级国产普通话三级 | 国产精品综合久久| 久久久精品国产免大香伊| 国产黄色91视频| 成人免费在线视频| 欧美色图激情小说| 免费在线视频一区| 国产欧美综合在线| 色婷婷久久久久swag精品| 亚洲成a人v欧美综合天堂 | 精东粉嫩av免费一区二区三区| 国产呦萝稀缺另类资源| 欧美国产日韩a欧美在线观看| 一区二区免费看| 91精品在线免费| 国产一区二区不卡老阿姨| 综合激情成人伊人| 欧美婷婷六月丁香综合色| 老色鬼精品视频在线观看播放| 91福利在线播放| 青娱乐精品视频| 国产精品丝袜久久久久久app| 麻豆精品国产91久久久久久| 国产欧美一区二区三区鸳鸯浴| 日韩中文字幕不卡| 欧美国产视频在线| 在线免费不卡视频| 国产乱妇无码大片在线观看| 一区二区三区在线影院| 26uuu久久综合| 欧洲精品在线观看| 国产资源精品在线观看| 夜色激情一区二区| 国产午夜精品一区二区三区视频 | 日韩欧美中文一区| a在线欧美一区| 久久99久久99| 亚洲国产精品综合小说图片区| 99久久精品国产毛片| 毛片一区二区三区| 夜夜精品浪潮av一区二区三区| 99久久综合国产精品| 奇米精品一区二区三区在线观看一| 日本国产一区二区| 成人在线一区二区三区| 日韩高清电影一区| 亚洲精品五月天| 国产亚洲一区二区在线观看| 欧美精品日日鲁夜夜添| 91小视频在线免费看| 国产一区二区伦理片| 日韩精品一级中文字幕精品视频免费观看 | 欧美影院一区二区三区| 成人精品在线视频观看| 日本网站在线观看一区二区三区| 91精品国产91久久久久久一区二区 | 国产成人精品亚洲午夜麻豆| 亚洲国产乱码最新视频| 亚洲色欲色欲www在线观看| 国产婷婷色一区二区三区在线| 99综合影院在线| 国产成人啪午夜精品网站男同| 久久久.com| 精品日韩在线观看| 日韩免费高清av| 欧美日韩黄视频| 在线观看不卡一区| 色婷婷国产精品| 91女厕偷拍女厕偷拍高清| 99久久婷婷国产综合精品| 成人h精品动漫一区二区三区| 亚洲一区电影777| 悠悠色在线精品| 亚洲欧美日本韩国| 亚洲综合视频网| 亚洲成人自拍偷拍| 午夜欧美一区二区三区在线播放| 精品国产自在久精品国产| 日韩午夜精品视频| 日韩午夜在线影院| 精品国产伦一区二区三区免费| 国产成人午夜精品影院观看视频| 亚洲欧美另类久久久精品| 中文字幕中文字幕在线一区| 亚洲私人影院在线观看| 亚洲一级二级三级在线免费观看| 日韩精品一区在线| 欧美电影免费观看高清完整版在线| www.欧美色图| 色综合久久88色综合天天免费| 日本成人在线电影网| 视频在线在亚洲| 激情综合五月婷婷| 粉嫩av一区二区三区在线播放| 日本少妇一区二区| 免费在线观看一区| 国产福利一区在线| 91在线看国产| 欧美三级资源在线| 精品国产乱码久久久久久蜜臀| 欧美吻胸吃奶大尺度电影| 91精品国产综合久久久久久| 日韩欧美国产一区二区三区| 欧美韩国日本不卡| 亚洲高清中文字幕| 国产精品白丝av| 99久久伊人网影院| 在线电影一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 日韩欧美在线1卡| 国产精品欧美久久久久一区二区| 91精品国产综合久久久久久久| 一本大道久久a久久综合婷婷| 国产精品996| 欧美三区免费完整视频在线观看| av激情亚洲男人天堂| 91精品国产综合久久蜜臀| 欧美激情一区二区三区在线| 天天综合网 天天综合色| 国产精品一区二区无线| 欧美日韩免费观看一区二区三区| 99re这里只有精品视频首页| 欧美高清性hdvideosex| 亚洲国产精品成人综合| 亚洲线精品一区二区三区八戒| 亚洲视频免费看| 国产一区视频导航| 欧美日韩中文精品| 中国色在线观看另类| 久久激情五月激情| 在线中文字幕不卡| 中文字幕精品—区二区四季| 天天影视色香欲综合网老头| 成人av在线观| 久久嫩草精品久久久久| 日韩高清在线一区| 色偷偷成人一区二区三区91| 国产亚洲精品中文字幕| 日韩高清不卡一区二区三区| 欧美自拍偷拍午夜视频| 国产精品久久久久永久免费观看 | 在线观看国产一区二区| 久久五月婷婷丁香社区| 日本亚洲免费观看| 欧美日韩另类一区| 亚洲欧美一区二区在线观看| 风间由美一区二区三区在线观看| 成人黄色av电影| 精品国产乱码久久久久久浪潮| 国产丝袜欧美中文另类| 男女视频一区二区| 欧美男女性生活在线直播观看| 欧美电影影音先锋| 亚洲不卡av一区二区三区| 成人激情视频网站| 国产日韩欧美一区二区三区乱码| 亚洲欧洲成人av每日更新| 成人性生交大片免费看在线播放| 99久久夜色精品国产网站| 久久综合九色综合97婷婷女人 | 色噜噜狠狠色综合中国| 1024成人网| 成人在线视频一区二区| 国产欧美日韩亚州综合| 福利一区二区在线| 中文在线资源观看网站视频免费不卡 | 久久青草国产手机看片福利盒子| 欧美高清在线视频| 成人高清免费观看| 国产精品三级电影| 99久久久免费精品国产一区二区| 欧美日韩成人综合在线一区二区| 精品国产一区二区国模嫣然| 蜜臀av一区二区| 在线电影欧美成精品| 日本成人超碰在线观看| 日韩欧美资源站| 国产一区二三区好的| 国产精品视频看| 色悠悠久久综合| 亚洲不卡av一区二区三区| 91精品国产91综合久久蜜臀| 国产一区二区三区香蕉| 中文字幕 久热精品 视频在线 | 久久电影网站中文字幕| 久久久精品tv| proumb性欧美在线观看| 亚洲国产精品嫩草影院| 日韩欧美的一区| 久久99久久精品| 国产欧美va欧美不卡在线 | 免费日本视频一区| 精品福利在线导航| 精品日韩一区二区三区| 国产suv精品一区二区三区| 中文字幕一区免费在线观看| 欧美日韩黄色影视| 国产成人自拍网|