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

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

?? sdhc.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
{
#ifdef DEBUG
    const DWORD dwTimeout = 2000;
#else
    const DWORD dwTimeout = INFINITE;
#endif
    SETFNAME(_T("IST"));

    DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("%s Thread Starting\n"), pszFname));

    if (!CeSetThreadPriority(GetCurrentThread(), m_dwPriority)) {
        DEBUGMSG(SDCARD_ZONE_WARN, (TEXT("%s Failed to set CEThreadPriority\n"),
            pszFname));
    }

    while (TRUE) {
        DEBUGCHK(m_hevInterrupt);
        DWORD dwWaitStatus = WaitForSingleObject(m_hevInterrupt, dwTimeout);
        Validate();
        if (m_fDriverShutdown) {
            break;
        }
        if (WAIT_OBJECT_0 != dwWaitStatus) {
            PCSDHCSlotBase pSlotZero = GetSlot(0);
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("%s Wait timeout Slot Interrupt Reg x%08X ! Wait status 0x%08X\n"),pszFname,pSlotZero->ReadControllerInterrupts(), dwWaitStatus));
        } else {
            HandleInterrupt();
            InterruptDone(m_dwSysIntr);
        }
    }

    DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("%s Thread Exiting\n"), pszFname));
    return 0;
}


VOID 
CSDHCBase::HandleInterrupt(
                           ) 
{
    Lock();

    // Use slot zero to get the shared global interrupt register
    PCSDHCSlotBase pSlotZero = GetSlot(0);
    DWORD dwIntStatus = pSlotZero->ReadControllerInterrupts();

    do {
         for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
            PCSDHCSlotBase pSlot = GetSlot(dwSlot);

            // It is not needed to use slot number because we use NORMAL_INT_STATUS instead of SLOT_INT_STATUS
            if ( (dwIntStatus) || pSlot->NeedsServicing() ) {
                pSlot->HandleInterrupt();
            }
        }

        dwIntStatus = pSlotZero->ReadControllerInterrupts();
        // In order to prevent infinite CARD INT occuring, below code is needed because of the architecture of HSMMC on s3c6410.
         if(dwIntStatus && pSlotZero->IsOnlySDIOInterrupt()) break;
    } while (dwIntStatus);
    Unlock();
}


DWORD
CSDHCBase::DetermineSlotCount(
                              )
{
    SETFNAME(_T("DetermineSlotCount"));

    DWORD cSlots = 0;

    // Read window information
    DDKWINDOWINFO wini = { sizeof(wini) };
    DWORD dwStatus = DDKReg_GetWindowInfo(m_regDevice, &wini);
    if (dwStatus != ERROR_SUCCESS) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Error getting window information\r\n"),
            pszFname));
        goto EXIT;
    }

    cSlots = wini.dwNumMemWindows;

    if (cSlots == 0) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s There were not any reported slots.\r\n"),
            pszFname));
        goto EXIT;
    }

EXIT:
    return cSlots;
}




DWORD 
CSDHCBase::DetermineFirstSlotWindow(
                                    PDDKWINDOWINFO pwini
                                    )
{
    PREFAST_DEBUGCHK(pwini);
    DEBUGCHK(pwini->dwNumMemWindows >= m_cSlots);
    DEBUGCHK(pwini->dwNumMemWindows > 0);

    DWORD dwSlotZeroWindow = 0;

    return dwSlotZeroWindow;
}


CEDEVICE_POWER_STATE
CSDHCBase::DetermineRequiredControllerPowerState(
    )
{
    CEDEVICE_POWER_STATE cps = D4;

    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PCSDHCSlotBase pSlot = GetSlot(dwSlot);
        cps = min(cps, pSlot->GetPowerState());
    }

    return cps;
}


SD_API_STATUS
CSDHCBase::SetControllerPowerState(
                                   CEDEVICE_POWER_STATE cpsNew
                                   )
{
    if (cpsNew != m_cpsCurrent) {
        switch (cpsNew) {
        case D0:
        case D4:
            KernelIoControl(IOCTL_HAL_DISABLE_WAKE, &m_dwSysIntr, 
                sizeof(m_dwSysIntr), NULL, 0, NULL);
            break;

        case D3:
            KernelIoControl(IOCTL_HAL_ENABLE_WAKE, &m_dwSysIntr, 
                sizeof(m_dwSysIntr), NULL, 0, NULL);
            break;
        }

        SetDevicePowerState(m_hBusAccess, cpsNew, NULL);
        m_cpsCurrent = cpsNew;
    }

    return SD_API_STATUS_SUCCESS;
}


#ifdef DEBUG
VOID 
CSDHCBase::Validate(
                    )
{
    DEBUGCHK(m_regDevice.IsOK());
    DEBUGCHK(m_hBusAccess);
    ValidateSlotCount();
    DEBUGCHK(m_pSlots);
    DEBUGCHK(m_pSlotInfos);
    DEBUGCHK(m_pHCDContext);
    DEBUGCHK(m_dwBusNumber != INVALID_BUS_NUMBER);
    DEBUGCHK(m_interfaceType != InterfaceTypeUndefined);
    DEBUGCHK(m_dwSysIntr != SYSINTR_UNDEFINED);
    DEBUGCHK(VALID_DX(m_cpsCurrent));

    if (m_fRegisteredWithBusDriver && !m_fDriverShutdown) {
        DEBUGCHK(m_htIST);
        DEBUGCHK(m_fHardwareInitialized);
        DEBUGCHK(m_fInterruptInitialized);
    }
}
#endif


// Get the creation proc address and call it
PCSDHCBase
CSDHCBase::CreateSDHCControllerObject(
    LPCTSTR pszActiveKey
    )
{
    PCSDHCBase pSDHC = NULL;
    HKEY hkDevice = OpenDeviceKey(pszActiveKey);

    if (hkDevice) {
        CReg regDevice(hkDevice, _T(""));
        DEBUGCHK(regDevice.IsOK());
        TCHAR szDll[MAX_PATH];

        if (regDevice.ValueSZ(DEVLOAD_DLLNAME_VALNAME, szDll, dim(szDll))) {
            szDll[dim(szDll) - 1] = 0; // Null-terminate
            
            TCHAR szProc[MAX_PATH];

            if (regDevice.ValueSZ(SDHC_CREATION_PROC_KEY, szProc, dim(szProc))) {
                szProc[dim(szProc) - 1] = 0; // Null-terminate
                
                HMODULE hMod = LoadLibrary(szDll);
                if (hMod) {
                    LPSDHC_CREATION_PROC pfnCreate = (LPSDHC_CREATION_PROC)
                        GetProcAddress(hMod, szProc);
                    if (pfnCreate) {
                        pSDHC = (*pfnCreate)();
                    }
                    
                    FreeLibrary(hMod);
                }
            }
        }

        RegCloseKey(hkDevice);
    }

    return pSDHC;
}


///////////////////////////////////////////////////////////////////////////////
//  SDHCInitialize - Initialize the the controller
//  Input:  pHCContext -  host controller context
//          
//  Output: 
//  Return: SD_API_STATUS
//  Notes:  
//          
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDHCBase::SDHCInitialize(PSDCARD_HC_CONTEXT pHCContext)
{
    DEBUGMSG(SDCARD_ZONE_INIT,(TEXT("SDHCInitialize++\n")));

    PREFAST_DEBUGCHK(pHCContext);
    PCSDHCBase pController = GET_PCONTROLLER_FROM_HCD(pHCContext);
    PREFAST_DEBUGCHK(pController);
    SD_API_STATUS status = pController->Start();

    DEBUGMSG(SDCARD_ZONE_INIT,(TEXT("SDHCInitialize--\n")));

    return status;
}


///////////////////////////////////////////////////////////////////////////////
//  SDHCDeinitialize - Deinitialize the SDHC Controller
//  Input:  pHCContext - HC context
//          
//  Output: 
//  Return: SD_API_STATUS
//  Notes:  
//          
//
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDHCBase::SDHCDeinitialize(PSDCARD_HC_CONTEXT pHCContext)
{
    DEBUGMSG(SDCARD_ZONE_INIT,(TEXT("SDHCDeinitialize++\n")));

    PREFAST_DEBUGCHK(pHCContext);
    PCSDHCBase pController = GET_PCONTROLLER_FROM_HCD(pHCContext);
    PREFAST_DEBUGCHK(pController);
    SD_API_STATUS status = pController->Stop();

    DEBUGMSG(SDCARD_ZONE_INIT,(TEXT("SDHCDeinitialize--\n")));

    return status;
}


///////////////////////////////////////////////////////////////////////////////
//  SDHCSDCancelIoHandler - io cancel handler 
//  Input:  pHostContext - host controller context
//          dwSlot - slot the request is going on
//          pRequest - the request to be cancelled
//          
//  Output: 
//  Return: TRUE if I/O was cancelled
//  Notes:  
//          the HC lock is taken before entering this cancel handler
//
///////////////////////////////////////////////////////////////////////////////
BOOLEAN 
CSDHCBase::SDHCCancelIoHandler(
                    PSDCARD_HC_CONTEXT  pHCContext,
                    DWORD               dwSlot,
                    PSD_BUS_REQUEST     pRequest
                    )
{
    PREFAST_DEBUGCHK(pHCContext);
    PCSDHCBase pController = GET_PCONTROLLER_FROM_HCD(pHCContext);
    PREFAST_DEBUGCHK(pController);
    return pController->CancelIoHandler(dwSlot, pRequest);
}


///////////////////////////////////////////////////////////////////////////////
//  SDHCBusRequestHandler - bus request handler 
//  Input:  pHostContext - host controller context
//          dwSlot - slot the request is going to
//          pRequest - the request
//          
//  Output: 
//  Return: SD_API_STATUS
//  Notes:  The request passed in is marked as uncancelable, this function
//          has the option of making the outstanding request cancelable    
//          returns status pending
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS 
CSDHCBase::SDHCBusRequestHandler(
                      PSDCARD_HC_CONTEXT pHCContext, 
                      DWORD              dwSlot, 
                      PSD_BUS_REQUEST    pRequest
                      ) 
{
    PREFAST_DEBUGCHK(pHCContext);
    PCSDHCBase pController = GET_PCONTROLLER_FROM_HCD(pHCContext);
    PREFAST_DEBUGCHK(pController);
    return pController->BusRequestHandler(dwSlot, pRequest);
}

///////////////////////////////////////////////////////////////////////////////
//  SDHCSlotOptionHandler - handler for slot option changes
//  Input:  pHostContext - host controller context
//          dwSlot       - the slot the change is being applied to
//          Option       - the option code
//          pData        - data associaSHC with the option
//  Output: 
//  Return: SD_API_STATUS
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS 
CSDHCBase::SDHCSlotOptionHandler(
                      PSDCARD_HC_CONTEXT    pHCContext,
                      DWORD                 dwSlot, 
                      SD_SLOT_OPTION_CODE   sdOption, 
                      PVOID                 pData,
                      ULONG                 ulOptionSize
                      )
{
    PCSDHCBase pController = GET_PCONTROLLER_FROM_HCD(pHCContext);
    PREFAST_DEBUGCHK(pController);
    return pController->SlotOptionHandler(dwSlot, sdOption, pData, ulOptionSize);
}


// DO NOT REMOVE --- END EXTERNALLY DEVELOPED SOURCE CODE ID --- DO NOT REMOVE

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本韩国欧美一区| 久久精品国产999大香线蕉| av在线播放成人| 中文字幕日韩一区| 91亚洲男人天堂| 亚洲444eee在线观看| 欧美久久久一区| 久久99国产精品久久99果冻传媒| 日韩欧美美女一区二区三区| 国产自产v一区二区三区c| 日本一区二区三区视频视频| 91麻豆6部合集magnet| 丝袜美腿成人在线| 久久综合九色综合欧美98| 大胆欧美人体老妇| 亚洲一区二区三区小说| 日韩亚洲欧美一区二区三区| 粉嫩高潮美女一区二区三区| 亚洲综合清纯丝袜自拍| 日韩欧美国产综合| 高清av一区二区| 亚洲一二三专区| 2020国产精品| 欧美中文字幕一区二区三区 | 亚洲裸体在线观看| 欧美精品色一区二区三区| 国产精品资源在线观看| 一区二区成人在线| 国产清纯白嫩初高生在线观看91 | 国产在线精品免费av| 国产精品免费视频观看| 欧美三日本三级三级在线播放| 亚洲九九爱视频| 亚洲影院理伦片| 欧美精品在线视频| 成人h精品动漫一区二区三区| 一区二区三区四区不卡在线| 精品成人一区二区三区四区| 在线免费观看日韩欧美| 国产精品自拍网站| 日本亚洲天堂网| 亚洲精品美腿丝袜| 中文字幕欧美日韩一区| 日韩一区二区在线观看视频播放 | 91亚洲精华国产精华精华液| 日产精品久久久久久久性色| 亚洲女同ⅹxx女同tv| 久久先锋资源网| 欧美一区二区国产| 欧美调教femdomvk| 国产91色综合久久免费分享| 麻豆国产精品视频| 五月婷婷色综合| 亚洲精品高清视频在线观看| 日日夜夜免费精品视频| 日韩精品在线网站| 欧美日韩国产经典色站一区二区三区 | 久久激情五月婷婷| 无码av免费一区二区三区试看| 国产精品久久久久久福利一牛影视 | 97超碰欧美中文字幕| 国产一区999| 国产在线麻豆精品观看| 日韩精品亚洲一区| 亚洲国产一区二区a毛片| 伊人夜夜躁av伊人久久| 国产精品国产成人国产三级| 日本一区免费视频| 国产日产亚洲精品系列| 久久色.com| 久久九九久久九九| 久久精品夜色噜噜亚洲a∨| 精品国产人成亚洲区| 日韩欧美国产一区二区三区 | 欧美久久久一区| 欧美欧美午夜aⅴ在线观看| 欧美性视频一区二区三区| 色婷婷综合五月| 在线亚洲人成电影网站色www| 91在线观看成人| 一本久道久久综合中文字幕| 91成人网在线| 欧美另类变人与禽xxxxx| 欧美日韩一区二区不卡| 欧美人与禽zozo性伦| 717成人午夜免费福利电影| 欧美精品在线一区二区三区| 91精品欧美久久久久久动漫 | 久久免费视频一区| 中文在线免费一区三区高中清不卡| 亚洲国产岛国毛片在线| 中文字幕视频一区| 亚洲国产cao| 免费成人你懂的| 国产黄色91视频| 色婷婷国产精品综合在线观看| 色哟哟国产精品| 欧美精品在欧美一区二区少妇| 日韩欧美电影一二三| 欧美极品aⅴ影院| 一区二区三区免费| 在线观看日韩av先锋影音电影院| 色综合视频一区二区三区高清| 在线欧美日韩国产| 欧美mv日韩mv| 亚洲日本在线看| 日本强好片久久久久久aaa| 国产精一品亚洲二区在线视频| 99re热视频这里只精品| 欧美精品在线观看一区二区| 久久噜噜亚洲综合| 夜色激情一区二区| 狠狠色狠狠色综合系列| 91丨porny丨蝌蚪视频| 在线电影一区二区三区| 国产日韩高清在线| 亚洲成人av一区二区三区| 国产精品羞羞答答xxdd| 欧美日韩一卡二卡| 欧美激情艳妇裸体舞| 婷婷国产在线综合| 成人性生交大片免费| 在线成人免费视频| 国产精品不卡在线观看| 麻豆91在线播放免费| 色综合久久久久| 久久久午夜精品| 日本欧美在线看| 色av成人天堂桃色av| 欧美va亚洲va香蕉在线| 欧美性大战久久| 日韩欧美一区二区在线视频| 国产精品国产三级国产普通话蜜臀| 午夜国产精品影院在线观看| 大陆成人av片| 精品成a人在线观看| 亚洲激情在线激情| 丁香婷婷深情五月亚洲| 日韩欧美国产高清| 亚洲第一福利一区| www.综合网.com| 久久久综合精品| 精品影院一区二区久久久| 91国偷自产一区二区使用方法| 国产欧美日本一区视频| 精品一区二区国语对白| 7777精品伊人久久久大香线蕉完整版 | 日韩一区二区三| 亚洲精品视频在线看| 不卡电影一区二区三区| 久久精品视频在线免费观看| 日韩av一级电影| 717成人午夜免费福利电影| 亚洲资源在线观看| 在线中文字幕一区| 亚洲精品自拍动漫在线| 色综合天天狠狠| 亚洲欧洲综合另类| 91网址在线看| 亚洲日本va午夜在线电影| 99久久777色| 亚洲特黄一级片| 色视频一区二区| 亚洲图片欧美色图| 欧美三区在线观看| 三级不卡在线观看| 日韩女优电影在线观看| 加勒比av一区二区| 国产亚洲午夜高清国产拍精品| 激情伊人五月天久久综合| 欧美精品一区视频| 国产精品 日产精品 欧美精品| 国产人成一区二区三区影院| 国产成人av福利| 国产精品久久久久影视| av一区二区不卡| 亚洲一区二区三区在线看| 欧美军同video69gay| 免费观看一级欧美片| 久久久一区二区三区捆绑**| 丰满白嫩尤物一区二区| 亚洲欧美韩国综合色| 欧美午夜电影一区| 蜜臀91精品一区二区三区| www国产精品av| 91香蕉视频污| 天堂蜜桃一区二区三区 | 欧美疯狂性受xxxxx喷水图片| 日韩电影在线一区二区三区| 精品成人一区二区三区四区| 不卡视频一二三| 午夜久久久久久久久| 欧美成人女星排名| 成人精品视频一区二区三区 | 亚洲国产精品久久久久婷婷884| 3751色影院一区二区三区| 国产在线观看免费一区| 成人免费在线观看入口| 欧美日本乱大交xxxxx| 国产乱理伦片在线观看夜一区|