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

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

?? sdbusdriver.cpp

?? S3C2443 WINCE6.0 BSP
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

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

// Class implementation of the Bus Driver  

#include "SDBusDriver.h"
#include <creg.hxx>
#include <devload.h>

#define GET_HC_NAME_FROM_SLOT(s) (s)->pHostController->HostControllerName


///////////////////////////////////////////////////////////////////////////////
//  CSDBusDriver - Destructor
//  Input:  
//  Output: 
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
CSDBusDriver::~CSDBusDriver()
{
    m_Initialized = FALSE;

    // Temporarily take the lock to be sure that no host controller is
    // registering itself. Now that m_Initialized is FALSE, that call
    // will no longer succeed.
    AcquireLock();
    ReleaseLock();

    PLIST_ENTRY pListEntry = m_HostControllerListHead.Flink;
    // Loop through the host controllers and remove them.
    while (pListEntry != &m_HostControllerListHead) {
        PSDBUS_HC_CONTEXT pHCContext = CONTAINING_RECORD(pListEntry, SDBUS_HC_CONTEXT, ListEntry);
        DoDeregisterHostController(pHCContext, FALSE);

        // Move to the next one
        pListEntry = m_HostControllerListHead.Flink;
    }

    // kill the event dispatcher
    if (NULL != m_pBusRequestCompleteDispatcher) {
        delete m_pBusRequestCompleteDispatcher;
        m_pBusRequestCompleteDispatcher = NULL;
    }

    if (NULL != m_SynchList) {
        SDDeleteMemList(m_SynchList);
        m_SynchList = NULL;
    }

    if (NULL != m_BusRequestList)  {  
        SDDeleteMemList(m_BusRequestList);
        m_BusRequestList = NULL;
    }

    DeleteCriticalSection(&m_BusDriverCriticalSection);

}

///////////////////////////////////////////////////////////////////////////////
//  CSDBusDriver - constructor
//  Input:  pszActiveKey - context from XXX_Init
//  Output: 
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
CSDBusDriver::CSDBusDriver(LPCTSTR pszActiveKey) :
m_sdBusEnum(pszActiveKey)
{
    DEBUGCHK(pszActiveKey);
    InitializeCriticalSection(&m_BusDriverCriticalSection);
    m_Initialized = FALSE;
    m_SynchList = NULL;
    m_BusRequestList = NULL;
    m_DispatchPriority = DEFAULT_THREAD_PRIORITY;
    m_pBusRequestCompleteDispatcher = NULL;
    InitializeListHead(&m_HostControllerListHead);
    SDInitializeQueue(&m_CompletedRequestQueue);
    m_BusRequestRetryCount = DEFAULT_BUS_REQUEST_RETRY_COUNT;

    HKEY hkDevice = OpenDeviceKey(pszActiveKey);
    if (hkDevice) {
        m_regDevice.Open(hkDevice, _T(""));
        RegCloseKey(hkDevice);
    }
}

///////////////////////////////////////////////////////////////////////////////
//  CSDBusDriver - Initialize Function for Bus driver object
//  Input:  
//  Output: 
//  Notes:  
//      returns api status error
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS CSDBusDriver::Initialize()
{
    DWORD           requestListDepth;   // request list depths      
    SD_API_STATUS   status;             // api status

    if (!m_sdBusEnum.Init()) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Initialize: Failed to initialize the bus enum class\n")));
        return SD_API_STATUS_INSUFFICIENT_RESOURCES;
    }

    if (!m_regDevice.IsOK()) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Initialize: Could not open device key\n")));
        return SD_API_STATUS_UNSUCCESSFUL;
    }

    // get the request depth key if it exists
    requestListDepth = m_regDevice.ValueDW(SDCARD_REQUEST_LIST_DEPTH_KEY, 
        SDCARD_DEFAULT_REQUEST_LIST_DEPTH);

    if (requestListDepth != SDCARD_DEFAULT_REQUEST_LIST_DEPTH) {
        DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDBusDriver: Initialize: Using request list depth of %d entries \n"),requestListDepth));
    }

    // get the thread priority key if it exists
    m_DispatchPriority = m_regDevice.ValueDW(SDCARD_THREAD_PRIORITY_KEY, 
        DEFAULT_THREAD_PRIORITY);

    if (m_DispatchPriority != DEFAULT_THREAD_PRIORITY) {
        DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDBusDriver: Initialize: Dispatch thread priority set to; %d \n"),m_DispatchPriority));
    }

    // get the request retry key if it exists
    m_BusRequestRetryCount = m_regDevice.ValueDW(SDCARD_REQUEST_RETRY_KEY, 
        DEFAULT_BUS_REQUEST_RETRY_COUNT);

    if (m_BusRequestRetryCount != DEFAULT_BUS_REQUEST_RETRY_COUNT) {
        DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDBusDriver: Initialize: Bus request retry count set to; %d \n"),m_BusRequestRetryCount));
    }

    // create the bus request memory list
    m_BusRequestList = SDCreateMemoryList('SDLT',
        requestListDepth,
        sizeof(SDBUS_BUS_REQUEST));
    if (NULL == m_BusRequestList)  {                      
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Initialize: Failed to allocate bus request list\n")));
        return SD_API_STATUS_INSUFFICIENT_RESOURCES;    
    }

    // create list of synchronous request stuctures
    m_SynchList = SDCreateMemoryList(SD_BUS_DRIVER_TAG, 
        requestListDepth, 
        sizeof(SD_SYNCH_REQUEST_INFO));
    if (NULL == m_SynchList) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Initialize: Failed to allocate synch list \n")));
        return SD_API_STATUS_INSUFFICIENT_RESOURCES;   
    }

    m_pBusRequestCompleteDispatcher = new CSDWorkItem(this, 
        (PSD_WORK_ITEM_FUNC)CSDBusDriver::BusRequestCompleteDispatch, 
        m_DispatchPriority,
        0,
        0,
        FALSE);    // create the work item without a message queue

    if (NULL == m_pBusRequestCompleteDispatcher) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Initialize: Failed to allocate event dispatcher \n")));
        return SD_API_STATUS_INSUFFICIENT_RESOURCES;
    }

    status = m_pBusRequestCompleteDispatcher->StartWorkItem();

    if (!SD_API_SUCCESS(status)){
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: Initialize: event dispatcher work item failed \n")));
        return SD_API_STATUS_INSUFFICIENT_RESOURCES;
    }

    // set initialized flag
    m_Initialized = TRUE;
    return SD_API_STATUS_SUCCESS;
}


///////////////////////////////////////////////////////////////////////////////
//  GetSlotInfo - get slot information for all slots in the system
//  Input:  pBuffer - buffer to hold the slot information
//          Length  - length of the buffer
//  Output: 
//  Notes:  
//      returns the number of slots or zero on error
///////////////////////////////////////////////////////////////////////////////
DWORD CSDBusDriver::GetSlotInfo(PUCHAR pBuffer, DWORD Length) 
{
    LIST_ENTRY              *pListEntry;        // list entry
    PSDBUS_HC_CONTEXT      pHCContext;         // host controller context
    PSDBUS_HC_SLOT_CONTEXT  pSlot;              // slot context
    PSDCARD_DEVICE_CONTEXT  pDevice;            // the device in the slot
    ULONG                   slotIndex;          // slot index
    PBUS_DRIVER_SLOT_INFO   slotInfoArray;      // slot array
    int                     slotArrayIndex;     // index to slot array
    ULONG                   slotCount;          // running slot count
    WCHAR                   description[MAX_SD_DESCRIPTION_STRING];

    // get the head
    pListEntry = m_HostControllerListHead.Flink;
    // reset slot count
    slotCount = 0;
    // acquire the lock to protect the list
    AcquireLock();

    // loop through the host controllers and get the slot count
    while (pListEntry != &m_HostControllerListHead) {
        // get the context
        pHCContext = CONTAINING_RECORD(pListEntry, SDBUS_HC_CONTEXT, ListEntry);
        // increment the slot count
        slotCount += pHCContext->NumberOfSlots;

        // move to the next one
        pListEntry = pListEntry->Flink;
    }

    // see if the caller just wants the count
    if (pBuffer == NULL) {
        ReleaseLock();
        return slotCount;
    }

    // check the buffer
    if (Length != slotCount * (sizeof(BUS_DRIVER_SLOT_INFO))) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDBusDriver: GetSlotInfo : insufficient buffer  \n")));    

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩中文久久| 欧美三电影在线| 一区二区三区自拍| 欧美剧情电影在线观看完整版免费励志电影 | 中文久久乱码一区二区| 色综合久久久久久久| 免费人成在线不卡| 亚洲欧美在线另类| 日韩一区二区电影| 国产成人在线视频网址| 亚洲国产精品高清| 91精品国产免费久久综合| 成人高清免费观看| 美国毛片一区二区| 亚洲乱码国产乱码精品精98午夜| 91麻豆精品国产91久久久更新时间| 国产激情精品久久久第一区二区 | 久久久午夜电影| 成人国产精品免费观看视频| 三级欧美在线一区| 中文字幕一区三区| 精品第一国产综合精品aⅴ| 91黄色免费观看| 高清不卡在线观看av| 日韩综合小视频| 中文字幕中文字幕在线一区| 欧美tickling挠脚心丨vk| 欧美艳星brazzers| 成人黄色在线看| 国产精品综合视频| 日本美女一区二区三区视频| 亚洲黄色免费网站| 一区在线观看视频| 日韩色在线观看| 欧美精品精品一区| 日本国产一区二区| www.亚洲激情.com| 国产**成人网毛片九色| 激情深爱一区二区| 午夜欧美一区二区三区在线播放| 自拍偷拍欧美激情| 国产精品不卡在线观看| 国产欧美综合色| 久久亚洲综合av| 日韩你懂的电影在线观看| 欧美肥大bbwbbw高潮| 欧美撒尿777hd撒尿| av动漫一区二区| 成人中文字幕合集| 粉嫩13p一区二区三区| 国产福利电影一区二区三区| 另类小说图片综合网| 欧美96一区二区免费视频| 日韩成人av影视| 视频一区二区三区入口| 亚洲免费在线视频一区 二区| 中文字幕亚洲不卡| 国产精品美女久久福利网站| 欧美一区三区四区| 欧美一区二区观看视频| 日韩亚洲欧美综合| 精品理论电影在线观看| 久久综合久久综合久久| 久久久久综合网| 日韩一区二区三区观看| 欧美丝袜丝nylons| 欧美一区二区在线视频| 日韩精品专区在线影院观看| 久久综合久久99| 国产蜜臀av在线一区二区三区| 中文字幕成人av| 国产色91在线| 久久久久久久久蜜桃| 国产精品乱码一区二区三区软件| 国产精品大尺度| 亚洲国产精品久久久久秋霞影院| 五月综合激情网| 卡一卡二国产精品| 成人污污视频在线观看| 国产成人av电影| 色综合天天视频在线观看| 欧美亚洲国产bt| 精品少妇一区二区三区日产乱码| 精品成人在线观看| 亚洲国产精品传媒在线观看| 怡红院av一区二区三区| 日韩中文字幕一区二区三区| 狠狠色丁香久久婷婷综| av动漫一区二区| 欧美一区二区二区| 欧美国产乱子伦| 亚洲四区在线观看| 日韩和的一区二区| 成人激情av网| 91麻豆精品国产91久久久更新时间| 26uuu另类欧美亚洲曰本| 国产精品久久影院| 日韩精品三区四区| 不卡一区中文字幕| 欧美精品xxxxbbbb| 欧美国产乱子伦| 视频精品一区二区| 99国产欧美久久久精品| 日韩欧美资源站| 亚洲欧美一区二区三区国产精品 | 欧美三级视频在线观看| 久久久精品免费观看| 亚洲愉拍自拍另类高清精品| 韩国三级在线一区| 精品婷婷伊人一区三区三| 久久久亚洲午夜电影| √…a在线天堂一区| 另类调教123区| 91看片淫黄大片一级在线观看| 日韩视频在线永久播放| 日本一区免费视频| 亚洲精品国产无套在线观| 激情偷乱视频一区二区三区| 欧美三级午夜理伦三级中视频| 国产日韩av一区二区| 麻豆高清免费国产一区| 欧美卡1卡2卡| 天堂蜜桃91精品| 欧美四级电影网| 亚洲国产va精品久久久不卡综合 | 7777女厕盗摄久久久| 亚洲午夜影视影院在线观看| 色综合一个色综合亚洲| 亚洲欧美另类久久久精品2019| 成人av综合一区| 综合久久久久综合| a级高清视频欧美日韩| 国产精品成人免费在线| 91啪亚洲精品| 一区二区三区成人| 欧美亚洲禁片免费| 视频一区二区三区在线| 日韩一区二区不卡| 激情欧美一区二区| 国产日产精品一区| 波多野结衣中文字幕一区 | 亚洲免费av在线| 在线免费观看一区| 亚洲国产aⅴ成人精品无吗| 欧美日韩精品免费观看视频| 五月综合激情网| 欧美大片在线观看一区二区| 久久国产精品免费| 国产三级一区二区| www.激情成人| 亚洲综合无码一区二区| 欧美日韩精品三区| 国内成人自拍视频| 国产精品视频yy9299一区| 99精品国产99久久久久久白柏| 一级精品视频在线观看宜春院| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲黄色性网站| 欧美一区二区三区色| 精品午夜久久福利影院| 国产午夜精品一区二区| 91免费观看在线| 日本大胆欧美人术艺术动态| 久久久噜噜噜久久中文字幕色伊伊| 国产成人精品亚洲午夜麻豆| 中文字幕日韩一区| 51午夜精品国产| 国产精品一区二区在线播放 | 激情五月婷婷综合| 中文字幕视频一区| 欧美一区二区视频在线观看| 国产成人精品综合在线观看| 亚洲女同一区二区| 日韩欧美一级在线播放| 99久久99久久综合| 日本午夜一区二区| 欧美国产丝袜视频| 欧美日韩国产小视频在线观看| 国产在线精品免费av| 亚洲男人的天堂av| 久久综合久久综合亚洲| 日本道免费精品一区二区三区| 男女男精品视频| 亚洲人成网站在线| 欧美不卡一二三| 91麻豆视频网站| 精彩视频一区二区三区| 亚洲综合激情另类小说区| 久久网这里都是精品| 一本大道av伊人久久综合| 久久99久久99小草精品免视看| 最新中文字幕一区二区三区| 日韩小视频在线观看专区| 99精品视频在线播放观看| 看电影不卡的网站| 亚洲成a人片在线观看中文| 国产精品丝袜一区| 精品美女在线播放| 91麻豆精品国产91久久久资源速度| 成人中文字幕电影|