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

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

?? sdiofeat.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
            return SD_API_STATUS_INVALID_DEVICE_REQUEST;
        }
    }

    // Changing the bus width is tricky when SDIO interrupts are 
    // enabled. In 1-bit mode, DAT[1] is used as the interrupt line.
    // In 4-bit mode, DAT[1] is used for data and interrupts. If
    // we change from 1-bit mode to 4-bit mode while interrupts are 
    // occurring (like when a BTH mouse is being moved franticly), we
    // need to disable SDIO interrupts while we are changing the mode
    // on both the host controller and the card. Otherwise an interrupt in
    // the middle could confuse the host controller.

    PSD_INTERRUPT_CALLBACK pInterruptCallBack = NULL;
    if ( (Device_SD_IO == m_DeviceType) && m_sdSlot.IsSlotInterruptOn() && 
             (m_CardInterfaceEx.InterfaceModeEx.bit.sd4Bit != CardInterfaceEx.InterfaceModeEx.bit.sd4Bit) ) {
        // Temporarily disable SDIO interrupts
        pInterruptCallBack = m_SDCardInfo.SDIOInformation.pInterruptCallBack;
        DEBUGCHK(pInterruptCallBack);
        SDIOConnectDisconnectInterrupt( NULL, FALSE);
    }
    SD_CARD_INTERFACE_EX CardInterfaceExBackup = m_CardInterfaceEx;
    BOOL isRestore = FALSE;
    while (TRUE) {
        SD_API_STATUS inStatus = SD_API_STATUS_SUCCESS ;
        
        // check for success
        BOOL fContinue = TRUE;
        if (SD_API_SUCCESS(inStatus)) {
            // set the card interface for device's slot        
            inStatus = m_sdSlot.GetHost().SlotSetupInterface(m_sdSlot.GetSlotIndex(),&CardInterfaceEx);
            //m_sdSlot.GetHost().SlotOptionHandler(m_sdSlot.GetSlotIndex(), SDHCDSetSlotInterface, &CardInterface, sizeof(CardInterface));
            fContinue = SD_API_SUCCESS(inStatus) ;
        }
            
        for (DWORD dwIndex = 0; dwIndex < SD_MAXIMUM_DEVICE_PER_SLOT && fContinue; dwIndex++) {
            CSDDevice * pDevice = m_sdSlot.GetFunctionDevice(dwIndex);
            if (pDevice != NULL) {
                inStatus = pDevice->SetCardInterface(&CardInterfaceEx);
                if (!SD_API_SUCCESS(inStatus)) {
                    fContinue = FALSE;
                }
                pDevice->DeRef();
            }
        }

        if (!SD_API_SUCCESS(inStatus) &&!isRestore ) {
            ASSERT(FALSE);
            status = inStatus;
            CardInterfaceEx = CardInterfaceExBackup;
            isRestore = TRUE;
        }
        else 
            break;
    }
    if (pInterruptCallBack) {
        // Re-enable SDIO interrupts
        DEBUGCHK(!m_sdSlot.IsSlotInterruptOn());
        DEBUGCHK(Device_SD_IO == m_DeviceType);
        SDIOConnectDisconnectInterrupt(pInterruptCallBack, TRUE);
    }
    return status;

}
///////////////////////////////////////////////////////////////////////////////
//  SDSetCardFeature       - Set card feature
//  Input:  hDevice        - SD Device Handle
//          CardFeature    - Card Feature to set
//          StructureSize  - size of card feature structure
//  Output: pCardInfo      - Information for the feature
//  Return: SD_API_STATUS code
//  Notes:  This function is provided to set various card features
//          in a thread safe manner.  SDIO cards utilize shared register sets
//          between functions. This requires that the 
//          register state be preserved between functions that can be 
//          controlled in separate thread contexts.
//          This function can potentially block by issuing synchronous bus 
//          request.  This function must not be called from a bus request callback
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDDevice::SDSetCardFeature_I(SD_SET_FEATURE_TYPE  CardFeature,PVOID pCardInfo,ULONG StructureSize)
{
    SD_API_STATUS               status = SD_API_STATUS_SUCCESS;  // intermediate status
    PSD_DATA_TRANSFER_CLOCKS    pClocks;                         // data transfer clocks variable  

    switch (CardFeature) {

      case SD_IO_FUNCTION_ENABLE:
        if ((sizeof(SD_IO_FUNCTION_ENABLE_INFO) != StructureSize) || (NULL == pCardInfo)) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: SD_IO_FUNCTION_ENABLE - Invalid params \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        if (Device_SD_IO != m_DeviceType) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: device is not SDIO ! \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }        
        status = SDEnableDisableFunction((PSD_IO_FUNCTION_ENABLE_INFO)pCardInfo, TRUE);
        break;
        
      case SD_IO_FUNCTION_DISABLE:
        if (Device_SD_IO != m_DeviceType) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: device is not SDIO ! \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        status = SDEnableDisableFunction(NULL, FALSE);
        break;
      case SD_IO_FUNCTION_HIGH_POWER:         
        if (Device_SD_IO != m_DeviceType) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: device is not SDIO ! \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        status = SDFunctionSelectPower(FALSE);
        break;

      case SD_IO_FUNCTION_LOW_POWER:
        if (Device_SD_IO != m_DeviceType) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: device is not SDIO ! \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        status = SDFunctionSelectPower(TRUE);
        break;

      case SD_INFO_POWER_CONTROL_STATE:
        if ((sizeof(FUNCTION_POWER_STATE) != StructureSize) || (NULL == pCardInfo)) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: SD_INFO_POWER_CONTROL_STATE - Invalid params \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        if (Device_SD_IO != m_DeviceType) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: device is not SDIO ! \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }

        status = GetFunctionPowerState((PFUNCTION_POWER_STATE)pCardInfo);
        break;

      case SD_IO_FUNCTION_SET_BLOCK_SIZE:
        if ((sizeof(DWORD) != StructureSize) || (NULL == pCardInfo)) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: SD_IO_FUNCTION_SET_BLOCK_SIZE - Invalid params \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        if (Device_SD_IO != m_DeviceType) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: device is not SDIO ! \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }
        status = SDSetFunctionBlockSize(*((DWORD *)pCardInfo));
        break;

      case SD_SET_DATA_TRANSFER_CLOCKS:
        if ((sizeof(SD_DATA_TRANSFER_CLOCKS) != StructureSize) || (NULL == pCardInfo)) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: SD_SET_DATA_TRANSFER_CLOCKS - Invalid params \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }

        pClocks = (PSD_DATA_TRANSFER_CLOCKS)pCardInfo;
        m_SDCardInfo.SDMMCInformation.DataAccessReadClocks = pClocks->ReadClocks;
        m_SDCardInfo.SDMMCInformation.DataAccessWriteClocks = pClocks->WriteClocks;
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_IS_FAST_PATH_AVAILABLE:
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_FAST_PATH_DISABLE:
        //  Disable the use of Fast-Path for testing.
        m_SDCardInfo.SDIOInformation.Flags |= FSTPTH_DISABLE;
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_FAST_PATH_ENABLE:
#ifdef _FASTPATH_ENABLE_
        //  Always use Fast-Path operations.
        m_SDCardInfo.SDIOInformation.Flags &= ~ FSTPTH_DISABLE;
#else
        m_SDCardInfo.SDIOInformation.Flags |= FSTPTH_DISABLE;
#endif
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_IS_SOFT_BLOCK_AVAILABLE:
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_SOFT_BLOCK_FORCE_UTILIZATION:
        //  Always use Soft-Block operations.
        m_SDCardInfo.SDIOInformation.Flags |= SFTBLK_USE_ALWAYS;
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_SOFT_BLOCK_DEFAULT_UTILIZATON:
        //  Use hardware multi-block operations if supported by the card,
        //  otherwise use Soft-Block.
        m_SDCardInfo.SDIOInformation.Flags &= ~ SFTBLK_USE_ALWAYS;
        status = SD_API_STATUS_SUCCESS;
        break;

      case SD_SET_CARD_INTERFACE: {
        if ((sizeof(SD_CARD_INTERFACE) != StructureSize) || (NULL == pCardInfo)) {
                DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: SD_SET_CARD_INTERFACE - Invalid params \n")));
                return SD_API_STATUS_INVALID_PARAMETER;
        }
        PSD_CARD_INTERFACE pCardInterface = (PSD_CARD_INTERFACE) pCardInfo ;
        SD_CARD_INTERFACE_EX sdCardInterfaceEx;
        memset (&sdCardInterfaceEx, 0, sizeof(sdCardInterfaceEx));
        sdCardInterfaceEx.ClockRate = pCardInterface->ClockRate;
        sdCardInterfaceEx.InterfaceModeEx.bit.sdWriteProtected = (pCardInterface->WriteProtected?1:0);
        sdCardInterfaceEx.InterfaceModeEx.bit.sd4Bit = (pCardInterface->InterfaceMode == SD_INTERFACE_SD_4BIT?1:0) ;
        status =SetCardFeature_Interface(sdCardInterfaceEx);
        break;
      }
     case SD_SET_CARD_INTERFACE_EX: {
        if ((sizeof(SD_CARD_INTERFACE_EX) != StructureSize) || (NULL == pCardInfo)) {
                DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDSetCardFeature: SD_SET_CARD_INTERFACE_EX - Invalid params \n")));
                return SD_API_STATUS_INVALID_PARAMETER;
        }
        status = SetCardFeature_Interface(*(PSD_CARD_INTERFACE_EX)pCardInfo);
        break;
      }

      case SD_SET_CLOCK_STATE_DURING_IDLE:
        if ( (sizeof(BOOL) != StructureSize) || (NULL == pCardInfo) ) {
            DEBUGMSG(SDCARD_ZONE_ERROR,(TEXT("SDSetCardFeature: SD_SET_CLOCK_ON_DURING_IDLE - Invalid params \n")));
            return SD_API_STATUS_INVALID_PARAMETER;
        }

        // prompt the host to turn on or off the clock during the idle state based on the client's
        // request.
        status = m_sdSlot.GetHost().SlotOptionHandler(m_sdSlot.GetSlotIndex(), SDHCDSetClockStateDuringIdle, pCardInfo,StructureSize);

        DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("SDSetCardFeature: SDHCDSetClockStateDuringIdle finished with status: %x\n"),
            status));
        break;
      case SD_CARD_FORCE_RESET:
        DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDSetCardFeature: call SD_CARD_FORCE_RESET \n")));
        m_sdSlot.PostEvent(SlotResetRequest);
        break;

      case SD_CARD_SELECT_REQUEST:
        // request made by client driver to select the card. The request will not be honored
        // until all client drivers in this slot make such request.
        {
            BOOL bAllFunctionsRequestedCardSelect  = TRUE;;
            DbgPrintZo(SDCARD_ZONE_INIT,(TEXT("SDSetCardFeature: call SD_CARD_SELECT_REQUEST \n")));
            m_bCardSelectRequest = TRUE;
            NotifyClient(SDCardSelectRequest);
            for (DWORD dwIndex = 0; dwIndex < SD_MAXIMUM_DEVICE_PER_SLOT; dwIndex++) {
                CSDDevice * pDevice = m_sdSlot.GetFunctionDevice(dwIndex);
                if (pDevice != NULL) {
                    if (pDevice->m_bCardSelectRequest == FALSE && pDevice->GetDeviceType()!= Device_Unknown ) {
                        bAllFunctionsRequestedCardSelect = FALSE;
                    }
                    pDevice->DeRef();
                }
            }
            if (bAllFunctionsRequestedCardSelect == FALSE) {
                DbgPrintZo(SDCARD_ZONE_INFO, (TEXT("SDSetCardFeature: SD_CARD_SELECT_REQUEST - request is pending\n")));
                return SD_API_STATUS_PENDING;
            }
            DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDSetCardFeature: SD_CARD_SELECT_REQUEST - request is processing\n")));
            m_sdSlot.PostEvent(SlotSelectRequest);
        }
        break;
      case SD_CARD_DESELECT_REQUEST:
        {
            BOOL bAllFunctionsRequestedCardDeselect= TRUE;;
            DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDSetCardFeature: call SD_CARD_DESELECT_REQUEST \n")));
            if (!m_bCardDeselectRequest) {
                m_bCardDeselectRequest = TRUE;
                NotifyClient(SDCardDeselectRequest);
            }
            for (DWORD dwIndex = 0; dwIndex < SD_MAXIMUM_DEVICE_PER_SLOT; dwIndex++) {
                CSDDevice * pDevice = m_sdSlot.GetFunctionDevice(dwIndex);
                if (pDevice != NULL) {
                    if (pDevice->m_bCardDeselectRequest == FALSE && pDevice->GetDeviceType()!= Device_Unknown) {
                        bAllFunctionsRequestedCardDeselect = FALSE ;
                    }
                    pDevice->DeRef();
                }
            }
            if (bAllFunctionsRequestedCardDeselect == FALSE) {
                DbgPrintZo(SDCARD_ZONE_INFO, (TEXT("SDSetCardFeature: SD_CARD_DESELECT_REQUEST - request is pending\n")));
                return SD_API_STATUS_PENDING;
            }
            DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDSetCardFeature: SD_CARD_DESELECT_REQUEST - request is processing\n")));
            m_sdSlot.PostEvent(SlotDeselectRequest);
        }
        break;
      case SD_SET_SWITCH_FUNCTION: {
        if (pCardInfo!=NULL && StructureSize >= sizeof(SD_CARD_SWITCH_FUNCTION)) {
            PSD_CARD_SWITCH_FUNCTION psdSwitchFunction = (PSD_CARD_SWITCH_FUNCTION)pCardInfo;
            status = SwitchFunction((PSD_CARD_SWITCH_FUNCTION)pCardInfo,FALSE);
        }
      }
      break;
      case SD_DMA_ALLOC_PHYS_MEM:
        if (pCardInfo!=NULL && StructureSize >= sizeof(SD_HOST_ALLOC_FREE_DMA_BUFFER)) {
            status = m_sdSlot.GetHost().SlotOptionHandler(m_sdSlot.GetSlotIndex(),SDHCAllocateDMABuffer, pCardInfo,sizeof(SD_HOST_ALLOC_FREE_DMA_BUFFER));                
        }
        break;
      case SD_DMA_FREE_PHYS_MEM:
        if (pCardInfo!=NULL && StructureSize >= sizeof(SD_HOST_ALLOC_FREE_DMA_BUFFER)) {
            status = m_sdSlot.GetHost().SlotOptionHandler(m_sdSlot.GetSlotIndex(),SDHCFreeDMABuffer, pCardInfo,sizeof(SD_HOST_ALLOC_FREE_DMA_BUFFER));                
        }
        break;
    default:
        status = SD_API_STATUS_INVALID_PARAMETER;
        break;
    }

    return status;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区福利| 日本女优在线视频一区二区| 午夜精品福利一区二区蜜股av| 精品中文字幕一区二区小辣椒| 91免费看视频| 精品国产伦一区二区三区观看体验| 综合久久国产九一剧情麻豆| 久久国产精品99精品国产| 在线免费不卡视频| 欧美国产国产综合| 久久国产精品72免费观看| 欧美视频在线不卡| 伊人性伊人情综合网| 成人性生交大合| 久久久久久久国产精品影院| 日韩不卡手机在线v区| 日本丰满少妇一区二区三区| 国产精品天美传媒沈樵| 久久精品99久久久| 欧美一卡二卡三卡| 日本中文字幕一区| 欧美日韩国产成人在线免费| 中文字幕视频一区| 成人中文字幕合集| 国产女人18毛片水真多成人如厕| 久久99精品视频| 精品乱人伦一区二区三区| 日韩黄色在线观看| 日韩欧美国产一区在线观看| 青青草97国产精品免费观看| 欧美久久久久免费| 日韩电影在线一区二区三区| 日韩欧美电影一区| 黄页网站大全一区二区| 2019国产精品| 国产精品亚洲视频| 国产精品欧美综合在线| 国产成人精品免费视频网站| 久久天堂av综合合色蜜桃网| 国产在线不卡一区| 欧美高清在线视频| 99精品国产99久久久久久白柏| 中文字幕在线一区免费| 色拍拍在线精品视频8848| 亚洲综合在线观看视频| 欧美精品日日鲁夜夜添| 久久不见久久见中文字幕免费| 日韩午夜在线观看| 国产精品亚洲一区二区三区在线| 中文字幕av一区二区三区高| 一本一道综合狠狠老| 艳妇臀荡乳欲伦亚洲一区| 欧美三级一区二区| 久久成人羞羞网站| 国产欧美精品国产国产专区| 99re这里只有精品首页| 亚洲成人中文在线| 久久综合狠狠综合久久激情 | 久久先锋资源网| 成人做爰69片免费看网站| 亚洲精品久久7777| 欧美电影精品一区二区| 不卡的电影网站| 日韩精品乱码av一区二区| 中文字幕免费在线观看视频一区| 麻豆精品在线观看| 一区二区三区免费网站| 久久久精品国产免费观看同学| 99精品视频一区二区| 麻豆精品视频在线| 亚洲精品欧美综合四区| 欧美大片拔萝卜| 99久久久精品| 免费观看在线综合| 亚洲欧美另类图片小说| 久久影院午夜片一区| 欧美三级三级三级| 粗大黑人巨茎大战欧美成人| 天天综合天天做天天综合| 国产精品久久久久久久第一福利 | 蜜桃视频在线观看一区二区| 国产精品第五页| 精品少妇一区二区三区视频免付费| 99在线精品观看| 国产一区二区三区视频在线播放| 亚洲欧美日韩系列| 国产日产欧美一区| 91麻豆精品国产91久久久| 97精品久久久久中文字幕| 精品一区二区三区视频| 午夜精品免费在线| 亚洲精品亚洲人成人网在线播放| 久久久久国产免费免费 | 美女免费视频一区二区| 国产精品家庭影院| 久久久久久**毛片大全| 欧美成人一区二区三区片免费| 在线观看视频一区二区| 成人av影视在线观看| 国产综合色精品一区二区三区| 天天综合网天天综合色| 亚洲国产日韩在线一区模特| 亚洲人精品一区| 国产精品欧美综合在线| 国产拍揄自揄精品视频麻豆| 久久精品日产第一区二区三区高清版 | 欧美在线高清视频| 99国产精品99久久久久久| 国产.欧美.日韩| 国产大陆a不卡| 国产精品69久久久久水密桃| 看电影不卡的网站| 韩国理伦片一区二区三区在线播放 | 欧美一级午夜免费电影| 777久久久精品| 欧美放荡的少妇| 欧美久久久久免费| 欧美一区二区视频免费观看| 欧美精品乱码久久久久久| 欧美福利一区二区| 在线不卡免费欧美| 日韩欧美成人一区| 国产人妖乱国产精品人妖| 欧美激情一区二区三区四区| 国产精品久线在线观看| 一区二区三区日本| 视频一区二区中文字幕| 麻豆精品视频在线| 国产精品系列在线观看| 91影院在线免费观看| 在线观看亚洲专区| 日韩欧美国产wwwww| 久久精品夜色噜噜亚洲aⅴ| 中文字幕在线观看一区二区| |精品福利一区二区三区| 亚洲午夜在线观看视频在线| 蜜桃av一区二区| 国产黑丝在线一区二区三区| 99国产精品一区| 欧美精品日韩一区| 久久精品男人的天堂| 亚洲色图视频免费播放| 日韩中文字幕不卡| 国产成人日日夜夜| 91国产精品成人| 日韩欧美区一区二| 日韩毛片视频在线看| 日韩中文字幕一区二区三区| 国产高清不卡一区二区| 色婷婷亚洲一区二区三区| 日韩欧美美女一区二区三区| 国产精品久久久久久久久久久免费看 | 亚洲精品综合在线| 免费不卡在线视频| 播五月开心婷婷综合| 91精品久久久久久蜜臀| 综合久久久久久| 久久国产人妖系列| 日本韩国一区二区三区视频| 在线观看91精品国产麻豆| 中文字幕制服丝袜一区二区三区| 日日夜夜免费精品| 91女厕偷拍女厕偷拍高清| 日韩免费视频线观看| 伊人夜夜躁av伊人久久| 国产成人夜色高潮福利影视| 欧美日韩专区在线| 亚洲丝袜另类动漫二区| 激情六月婷婷久久| 91精品一区二区三区在线观看| 成人免费在线播放视频| 国产一区二区三区日韩| 欧美一区二区三区日韩视频| 亚洲免费观看在线观看| 成人污视频在线观看| 亚洲精品一线二线三线| 香蕉久久夜色精品国产使用方法| 99久久精品免费| 国产校园另类小说区| 日韩黄色一级片| 欧美色窝79yyyycom| 亚洲另类在线视频| 不卡区在线中文字幕| 亚洲美女淫视频| www.日韩大片| 国产人成亚洲第一网站在线播放| 三级久久三级久久久| 日本高清成人免费播放| 亚洲欧美日韩小说| 99riav一区二区三区| 国产精品美女久久久久久| 国产成人在线电影| 久久精品欧美一区二区三区不卡| 麻豆国产一区二区| 日韩美女在线视频| 国产在线精品一区二区不卡了 | 欧美最猛性xxxxx直播| ㊣最新国产の精品bt伙计久久| 成人av电影在线播放| 中文字幕一区在线观看视频|