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

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

?? sdhc.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//

// Copyright (c) 2002 BSQUARE Corporation.  All rights reserved.
// DO NOT REMOVE --- BEGIN EXTERNALLY DEVELOPED SOURCE CODE ID 40973--- DO NOT REMOVE

// SDHC controller driver implementation

#include "SDCardDDK.h"
#include "SDHC.h"


#ifndef SHIP_BUILD
#define STR_MODULE _T("CSDHCBase::")
#define SETFNAME(name) LPCTSTR pszFname = STR_MODULE name _T(":")
#else
#define SETFNAME(name)
#endif

#ifdef DEBUG
#define MAKE_OPTION_STRING(x) _T(#x)

const LPCTSTR CSDHCBase::sc_rgpszOptions[SDHCDSlotOptionCount] = {
    MAKE_OPTION_STRING(SDHCDSetSlotPower),
    MAKE_OPTION_STRING(SDHCDSetSlotInterface),
    MAKE_OPTION_STRING(SDHCDEnableSDIOInterrupts),
    MAKE_OPTION_STRING(SDHCDDisableSDIOInterrupts),
    MAKE_OPTION_STRING(SDHCDAckSDIOInterrupt),
    MAKE_OPTION_STRING(SDHCDGetWriteProtectStatus),
    MAKE_OPTION_STRING(SDHCDQueryBlockCapability),
    MAKE_OPTION_STRING(SDHCDSetClockStateDuringIdle),
    MAKE_OPTION_STRING(SDHCDSetSlotPowerState),
    MAKE_OPTION_STRING(SDHCDGetSlotPowerState),
    MAKE_OPTION_STRING(SDHCDWakeOnSDIOInterrupts),
    MAKE_OPTION_STRING(SDHCDGetSlotInfo),
    MAKE_OPTION_STRING(SDHCDSetSlotInterfaceEx),
    MAKE_OPTION_STRING(SDHCAllocateDMABuffer),
    MAKE_OPTION_STRING(SDHCFreeDMABuffer),
};
#endif

extern LPCTSTR HostControllerName;

CSDHCBase::CSDHCBase(
                     ) 
                     : m_regDevice()
{    
    m_hBusAccess = NULL;
    m_cSlots = 0;
    m_pSlots = NULL;
    m_pSlotInfos = NULL;
    m_pHCDContext = NULL;
    m_interfaceType = InterfaceTypeUndefined;
    m_dwBusNumber = INVALID_BUS_NUMBER;
    m_hISRHandler = NULL;
    m_dwSysIntr = SYSINTR_UNDEFINED;
    m_dwPriority = 0;
    m_hevInterrupt = NULL;
    m_htIST = NULL;
    m_cpsCurrent = D0;

    m_fHardwareInitialized = FALSE;
    m_fRegisteredWithBusDriver = FALSE;
    m_fDriverShutdown = FALSE;
    m_fInterruptInitialized = FALSE;
}


CSDHCBase::~CSDHCBase(
                      )
{
    // We call PreDeinit just in case we are not being destroyed by
    // a call to SHC_PreDeinit.
    PreDeinit();

    if (m_fHardwareInitialized) {
        DeinitializeHardware();
    }

    if (m_pHCDContext) {
        // Cleanup the host context
        SDHCDDeleteContext(m_pHCDContext);
    }

    if (m_pSlots) delete [] m_pSlots;
    if (m_pSlotInfos) LocalFree(m_pSlotInfos);
    if (m_hBusAccess) CloseBusAccessHandle(m_hBusAccess);
}


BOOL
CSDHCBase::Init(
                LPCTSTR pszActiveKey
                )
{
    BOOL fRet = FALSE;
    SD_API_STATUS status;
    HKEY    hkDevice = NULL;

    hkDevice = OpenDeviceKey(pszActiveKey);
    if (!hkDevice || !m_regDevice.Open(hkDevice, _T(""))) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDHC: Failed to open device key\n")));
        goto EXIT;
    }

    // Get a handle to our parent bus.
    m_hBusAccess = CreateBusAccessHandle(pszActiveKey);
    if (m_hBusAccess == NULL) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDHC: Could not get handle to parent\n")));
        goto EXIT;
    }

    m_cSlots = DetermineSlotCount();
    if (!CheckSlotCount(m_cSlots)) {
        goto EXIT;
    }
    PREFAST_ASSERT(m_cSlots <= SDHC_MAX_SLOTS);

    m_pSlotInfos = (PSDHC_SLOT_INFO) LocalAlloc(LPTR, 
        sizeof(SDHC_SLOT_INFO) * m_cSlots);
    if (m_pSlotInfos == NULL) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDHC Failed to allocate slot info objects\n")));
        goto EXIT;
    }

    status = SDHCDAllocateContext(m_cSlots, &m_pHCDContext);
    if (!SD_API_SUCCESS(status)) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDHC Failed to allocate context : 0x%08X \n"),
            status));
        goto EXIT;
    }
    
    // Set our extension 
    m_pHCDContext->pHCSpecificContext = this;

    if (!InitializeHardware()) {
        goto EXIT;
    }

    // Allocate slot objects
    m_pSlots = AllocateSlotObjects(m_cSlots);
    if (m_pSlots == NULL) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDHC Failed to allocate slot objects\n")));
        goto EXIT;
    }

    // Initialize the slots
    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PSDHC_SLOT_INFO pSlotInfo = &m_pSlotInfos[dwSlot];
        PCSDHCSlotBase pSlot = GetSlot(dwSlot);

        if (!pSlot->Init(dwSlot, pSlotInfo->pucRegisters, m_pHCDContext, 
            m_dwSysIntr, m_hBusAccess, m_interfaceType, m_dwBusNumber, &m_regDevice)) {
                goto EXIT;
            }
    }

    // set the host controller name
    SDHCDSetHCName(m_pHCDContext, TEXT("HostControllerName"));

    // set init handler
    SDHCDSetControllerInitHandler(m_pHCDContext, CSDHCBase::SDHCInitialize);
    // set deinit handler    
    SDHCDSetControllerDeinitHandler(m_pHCDContext, CSDHCBase::SDHCDeinitialize);
    // set the Send packet handler
    SDHCDSetBusRequestHandler(m_pHCDContext, CSDHCBase::SDHCBusRequestHandler);   
    // set the cancel I/O handler
    SDHCDSetCancelIOHandler(m_pHCDContext, CSDHCBase::SDHCCancelIoHandler);   
    // set the slot option handler
    SDHCDSetSlotOptionHandler(m_pHCDContext, CSDHCBase::SDHCSlotOptionHandler);

    // These values must be set before calling SDHCDRegisterHostController()
    // because they are used during that call.
    m_dwPriority = m_regDevice.ValueDW(SDHC_PRIORITY_KEY, 
        SDHC_CARD_CONTROLLER_PRIORITY);

    // now register the host controller 
    status = SDHCDRegisterHostController(m_pHCDContext);

    if (!SD_API_SUCCESS(status)) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDHC Failed to register host controller: %0x08X \n"), 
            status));
        goto EXIT;
    }

    m_fRegisteredWithBusDriver = TRUE;
    fRet = TRUE;

EXIT:
    if (hkDevice) RegCloseKey(hkDevice);

    return fRet;
}


SD_API_STATUS
CSDHCBase::Start()
{
    SD_API_STATUS status = SD_API_STATUS_INSUFFICIENT_RESOURCES;

    m_fDriverShutdown = FALSE;

    // allocate the interrupt event
    m_hevInterrupt = CreateEvent(NULL, FALSE, FALSE,NULL);

    if (NULL == m_hevInterrupt) {
        goto EXIT;
    }

    // initialize the interrupt event
    if (!InterruptInitialize (m_dwSysIntr, m_hevInterrupt, NULL, 0)) {
        goto EXIT;
    }

    m_fInterruptInitialized = TRUE;

    // create the interrupt thread for controller interrupts
    m_htIST = CreateThread(NULL, 0, ISTStub, this, 0, NULL);
    if (NULL == m_htIST) {
        goto EXIT;
    }

    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PCSDHCSlotBase pSlot = GetSlot(dwSlot);
        status = pSlot->Start();

        if (!SD_API_SUCCESS(status)) {
            goto EXIT;
        }
    }

    // wake up the interrupt thread to check the slot
    ::SetInterruptEvent(m_dwSysIntr);

    status = SD_API_STATUS_SUCCESS;

EXIT:
    if (!SD_API_SUCCESS(status)) {
        // Clean up
        Stop();
    }

    return status;
}


SD_API_STATUS
CSDHCBase::Stop()
{
    // Mark for shutdown
    m_fDriverShutdown = TRUE;

    if (m_fInterruptInitialized) {
        KernelIoControl(IOCTL_HAL_DISABLE_WAKE, &m_dwSysIntr, sizeof(m_dwSysIntr),
            NULL, 0, NULL);

        InterruptDisable(m_dwSysIntr);
    }

    // Clean up controller IST
    if (m_htIST) {
        // Wake up the IST
        SetEvent(m_hevInterrupt);
        WaitForSingleObject(m_htIST, INFINITE); 
        CloseHandle(m_htIST);
        m_htIST = NULL;
    }

    // free controller interrupt event
    if (m_hevInterrupt) {
        CloseHandle(m_hevInterrupt);
        m_hevInterrupt = NULL;
    }

    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PCSDHCSlotBase pSlot = GetSlot(dwSlot);
        pSlot->Stop();
    }

    return SD_API_STATUS_SUCCESS;
}


SD_API_STATUS 
CSDHCBase::SlotOptionHandler(
                             DWORD                 dwSlot, 
                             SD_SLOT_OPTION_CODE   sdOption, 
                             PVOID                 pData,
                             DWORD                 cbData
                             )
{
    SD_API_STATUS   status = SD_API_STATUS_SUCCESS;
    BOOL            fCallSlotsHandler = TRUE;

    Lock();
    Validate();
    PCSDHCSlotBase pSlot = GetSlot(dwSlot);

    DEBUGCHK(sdOption < dim(sc_rgpszOptions));
    DEBUGCHK(sc_rgpszOptions[sdOption] != NULL);
    DEBUGMSG(SDCARD_ZONE_INFO, (_T("CSDHCBase::SlotOptionHandler(%u, %s)\n"),
        dwSlot, sc_rgpszOptions[sdOption]));

    switch (sdOption) {
    case SDHCDSetSlotPower: {
        if (cbData != sizeof(DWORD)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }

    case SDHCDSetSlotInterface: {
        if (cbData != sizeof(SD_CARD_INTERFACE)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }

    case SDHCDEnableSDIOInterrupts:
    case SDHCDDisableSDIOInterrupts:
    case SDHCDAckSDIOInterrupt:
        if (pData || cbData != 0) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;

    case SDHCDGetWriteProtectStatus: {
        if (cbData != sizeof(SD_CARD_INTERFACE)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }

    case SDHCDQueryBlockCapability: {
        if (cbData != sizeof(SD_HOST_BLOCK_CAPABILITY)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成在人线在线播放| 色综合天天天天做夜夜夜夜做| 国产suv精品一区二区6| 91国产免费看| 国产精品久久三区| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲电影一级黄| av电影天堂一区二区在线观看| 日韩一级大片在线| 一区二区三区色| 成人免费观看视频| 2017欧美狠狠色| 人人超碰91尤物精品国产| 91免费观看国产| 国产精品视频在线看| 国产精品一区二区三区网站| 日韩一区二区三区高清免费看看| 亚洲一区二区欧美日韩 | 色综合天天在线| 国产女同性恋一区二区| 激情文学综合插| 日韩一区二区三| 午夜激情久久久| 欧美在线不卡视频| 伊人一区二区三区| 色狠狠一区二区三区香蕉| 国产精品网曝门| www.激情成人| 亚洲天堂中文字幕| 色综合欧美在线视频区| 亚洲免费在线电影| 日本道精品一区二区三区| 亚洲男人的天堂在线aⅴ视频| 不卡视频一二三四| 亚洲欧美区自拍先锋| 一本久道久久综合中文字幕 | 久久久久国产免费免费| 国产剧情av麻豆香蕉精品| 久久久精品国产免大香伊 | 免费成人在线观看| 精品免费视频一区二区| 国产精品中文字幕日韩精品| 中文字幕第一区| 91丨porny丨最新| 亚洲成人免费在线| 91麻豆精品国产91久久久资源速度| 午夜不卡av免费| 日韩视频一区二区在线观看| 一区二区三区在线观看视频 | 日韩一区二区中文字幕| 国内国产精品久久| 国产精品视频在线看| 91成人免费在线| 天天影视色香欲综合网老头| 欧美成va人片在线观看| 不卡的av中国片| 香蕉加勒比综合久久| 欧美一区二区免费| 成人激情动漫在线观看| 亚洲一区二区三区四区五区中文| 日韩午夜精品视频| av亚洲精华国产精华精| 男女男精品视频网| 欧美国产日韩在线观看| 精品视频免费在线| 久久不见久久见免费视频7| 一色桃子久久精品亚洲| 欧美一级久久久| 91亚洲精华国产精华精华液| 日韩和的一区二区| 国产精品国产三级国产a| 91精品国产综合久久久久久漫画| 国产不卡一区视频| 日本不卡一区二区三区高清视频| 欧美国产97人人爽人人喊| 欧美精品日日鲁夜夜添| 成人在线综合网站| 日本不卡一区二区三区| 亚洲美女淫视频| 国产日韩精品一区| 91精品国产综合久久精品图片| voyeur盗摄精品| 久久精品久久久精品美女| 亚洲一区在线观看免费 | 国产91丝袜在线18| 日韩成人av影视| 亚洲精品国产第一综合99久久 | 日韩亚洲欧美一区二区三区| 91首页免费视频| 成人亚洲一区二区一| 精品一区二区在线免费观看| 亚洲一线二线三线久久久| 中文字幕一区二区三| 久久精品一二三| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美精品久久一区| 欧美日韩日日摸| 在线一区二区三区| 91网站视频在线观看| 国产98色在线|日韩| 国产一区二区三区电影在线观看| 欧美aaaaa成人免费观看视频| 亚洲一区二三区| 亚洲一区二区黄色| 亚洲一级二级三级在线免费观看| 亚洲区小说区图片区qvod| 综合久久久久久| 亚洲欧洲性图库| 国产精品不卡一区| 中文字幕一区二区三区色视频| 国产精品区一区二区三区| 国产清纯在线一区二区www| 国产欧美日韩中文久久| 国产欧美综合在线观看第十页| 2017欧美狠狠色| 欧美经典一区二区| 国产精品久线在线观看| 亚洲欧美日韩精品久久久久| **性色生活片久久毛片| 一区二区高清免费观看影视大全| 亚洲精品乱码久久久久久| 亚洲免费观看高清在线观看| 亚洲欧美日韩国产手机在线| 亚洲综合一区二区精品导航| 亚洲成av人综合在线观看| 日韩精品成人一区二区在线| 日本午夜一本久久久综合| 狠狠色狠狠色综合| 国内精品国产成人国产三级粉色| 国产99久久久久久免费看农村| 成人免费观看av| 欧美性欧美巨大黑白大战| 欧美男男青年gay1069videost| 日韩欧美一二区| 国产欧美一区二区三区沐欲| 亚洲免费视频成人| 全部av―极品视觉盛宴亚洲| 狠狠色丁香久久婷婷综合_中 | 麻豆精品一区二区三区| 国产九色sp调教91| 99精品久久99久久久久| 精品视频在线视频| 久久久另类综合| 一区二区激情视频| 久久99精品久久久| 99精品欧美一区二区蜜桃免费| 欧美日韩国产a| 久久精品免费在线观看| 亚洲午夜免费电影| 国产精品99久久久久久久女警 | 午夜成人免费电影| 国产精品一线二线三线精华| 欧美午夜精品一区二区蜜桃| 2021国产精品久久精品| 亚洲一区在线观看网站| 国精品**一区二区三区在线蜜桃| 色婷婷久久一区二区三区麻豆| 日韩欧美国产综合一区 | 美女www一区二区| 色综合亚洲欧洲| 精品国产sm最大网站| 亚洲一卡二卡三卡四卡无卡久久| 久久精品国产免费看久久精品| 99re在线精品| 国产婷婷一区二区| 天堂在线一区二区| 在线一区二区三区| 日本一区二区三区四区| 老司机精品视频线观看86| 欧美综合视频在线观看| 欧美国产成人精品| 另类小说一区二区三区| 欧美三级电影精品| 国产精品高潮呻吟久久| 国产在线视频一区二区| 欧美精品久久99| 亚洲午夜在线视频| 99麻豆久久久国产精品免费优播| 久久中文娱乐网| 美国欧美日韩国产在线播放| 欧美丝袜自拍制服另类| 亚洲图片你懂的| 99精品一区二区三区| 欧美经典一区二区三区| 国产精品中文欧美| 精品少妇一区二区三区视频免付费 | 久久国产欧美日韩精品| 91精品国产综合久久精品麻豆 | 国产成人av一区二区| 欧美大片拔萝卜| 久久疯狂做爰流白浆xx| 日韩欧美一区二区视频| 蜜桃91丨九色丨蝌蚪91桃色| 欧美片网站yy| 青青草国产成人av片免费| 在线电影欧美成精品| 日韩国产欧美视频| 91精品国产综合久久久久久久| 日本少妇一区二区| 欧美tk—视频vk|