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

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

?? sdbus.hpp

?? 6410BSP3
?? HPP
字號:
//
// 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) 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.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
// 
// Module Name:  
//     Sdbus.hpp
// Abstract:  
//     Definition for the sd bus.
//
// 
// 
// Notes: 
// 
//
#pragma once

#include <CSync.h>
#include <CRefCon.h>
#include <defbus.h>
#include "sdworki.hpp"

class CSDBusRequest;
class CSDHost;
class CSDSlot;

// bus driver zones
#define SDBUS_ZONE_HCD                  SDCARD_ZONE_0
#define ENABLE_SDBUS_ZONE_HCD           ZONE_ENABLE_0
#define SDBUS_ZONE_DISPATCHER           SDCARD_ZONE_1
#define ENABLE_SDBUS_ZONE_DISPATCHER    ZONE_ENABLE_1
#define SDCARD_ZONE_SHUTDOWN            SDCARD_ZONE_2
#define ENABLE_SDBUS_ZONE_SHUTDOWN      ZONE_ENABLE_2
#define SDBUS_ZONE_POWER                SDCARD_ZONE_3
#define ENABLE_SDBUS_ZONE_POWER         ZONE_ENABLE_3
#define SDBUS_ZONE_DEVICE               SDCARD_ZONE_4
#define ENABLE_SDBUS_ZONE_DEVICE        ZONE_ENABLE_4
#define SDBUS_ZONE_REQUEST              SDCARD_ZONE_5
#define ENABLE_SDBUS_ZONE_REQUEST       ZONE_ENABLE_5
#define SDBUS_ZONE_BUFFER               SDCARD_ZONE_6
#define ENABLE_SDBUS_ZONE_BUFFER        ZONE_ENABLE_6
#define SDBUS_SOFT_BLOCK                SDCARD_ZONE_7
#define ENABLE_SDBUS_SOFT_BLOCK         ZONE_ENABLE_7

#define BUS_REQUEST_FREE_SPACE_TAG 0xdaada5cc


#define SDCARD_REQUEST_RETRY_KEY        TEXT("RequestRetryCount")
#define DEFAULT_BUS_REQUEST_RETRY_COUNT     3
#define SDCARD_THREAD_PRIORITY_KEY      TEXT("ThreadPriority")
#define DEFAULT_THREAD_PRIORITY             100
#define SDCARD_PASTPATH_THRESHOLD       TEXT("Threshold")
#define DEFAULT_PASTPATH_THRESHOLD      0x800   // 2k.

typedef struct _FREE_BUS_REQUEST_SPACE *PFREE_BUS_REQUEST_SPACE;
typedef struct _FREE_BUS_REQUEST_SPACE {
    PFREE_BUS_REQUEST_SPACE pNextFreeTransfer;
    DWORD dwFreeSpaceTag;
    DWORD dwSpaceSize;
    DWORD dwReserved;
} FREE_BUS_REQUEST_SPACE, *PFREE_BUS_REQUEST_SPACE;

#define BUS_VER_STR_2_0     (TEXT("VER 2.0"))
#define BUS_VER_FOR_HOST    BUS_VER_STR_2_0

#define SD_MAXIMUM_SLOT_PER_SDHOST 16 // This is limited 4 bit count in device handle.

inline SD_CARD_INTERFACE ConvertFromEx(SD_CARD_INTERFACE_EX sdInterfaceEx)
{
#ifdef _MMC_SPEC_42_
  /**
   * Description : to set SD_INTERFACE_MMC_8BIT to SDHC
   */
  SD_INTERFACE_MODE temp;
  
  if ( sdInterfaceEx.InterfaceModeEx.bit.hsmmc8Bit !=0 ){
    temp = SD_INTERFACE_MMC_8BIT;
  }else if ( sdInterfaceEx.InterfaceModeEx.bit.sd4Bit !=0 ){
    temp = SD_INTERFACE_SD_4BIT;
}  else{
    temp = SD_INTERFACE_SD_MMC_1BIT;
}

  SD_CARD_INTERFACE sdCardInterface = {
    temp,
#else
    SD_CARD_INTERFACE sdCardInterface = {
      sdInterfaceEx.InterfaceModeEx.bit.sd4Bit!=0?SD_INTERFACE_SD_4BIT: SD_INTERFACE_SD_MMC_1BIT,
#endif
      sdInterfaceEx.ClockRate,
      sdInterfaceEx.InterfaceModeEx.bit.sdWriteProtected!=0
    };
    return sdCardInterface;
  }

// Debug Function.
extern "C" {
VOID SDOutputBuffer(__out_bcount(BufferSize) PVOID pBuffer, ULONG BufferSize) ;
BOOLEAN SDPerformSafeCopy(__out_bcount(Length)    PVOID pDestination,  __in_bcount(Length) const VOID *pSource,ULONG Length);
DWORD SDProcessException(LPEXCEPTION_POINTERS pException) ;
VOID SDCardDebugOutput(TCHAR *pDebugText, ...);
}
class CSDHost:public SDCARD_HC_CONTEXT, public CRefObject {
    friend class CSDDevice;
    friend class CSDSlot;
public:
    CSDHost(DWORD dwNumSlot);
    virtual ~CSDHost();
    virtual BOOL Init();
    virtual BOOL Attach();
    virtual BOOL Detach();
    BOOL    IsAttached() { return m_fHostAttached; };
// SD Host Index.
public:
    DWORD   GetIndex() {    return m_dwSdHostIndex;  };
    DWORD   SetIndex (DWORD dwIndex)  { return (m_dwSdHostIndex= dwIndex);  };
    DWORD   GetSlotCount() { return m_dwNumOfSlot; };
    CSDSlot * GetSlot(DWORD dwSlot) { return (((dwSlot < SD_MAXIMUM_SLOT_PER_SDHOST) && (dwSlot<m_dwNumOfSlot))? m_SlotArray[dwSlot]: NULL); } 
    SD_API_STATUS   BusRequestHandler(DWORD dwSlot, PSD_BUS_REQUEST pSdBusRequest)  {
        return pBusRequestHandler((PSDCARD_HC_CONTEXT)this,dwSlot,pSdBusRequest);
        
    }; // bus request handler
    SD_API_STATUS   SlotOptionHandler(DWORD dwSlot, SD_SLOT_OPTION_CODE sdSlotOption, PVOID pvParam, ULONG uSize) { // slot option handler
        return pSlotOptionHandler((PSDCARD_HC_CONTEXT)this,dwSlot,sdSlotOption,pvParam,uSize);
    }
    BOOL            CancelIOHandler(DWORD dwSlot, PSD_BUS_REQUEST psdBusRequest) {   // cancel request handler
        return pCancelIOHandler((PSDCARD_HC_CONTEXT)this,dwSlot,psdBusRequest);
    }
    SD_API_STATUS   InitHandler () { return pInitHandler((PSDCARD_HC_CONTEXT)this); };      // init handler       
    SD_API_STATUS   DeinitHandler() { return pDeinitHandler((PSDCARD_HC_CONTEXT)this); };     // deinit handler
    SD_API_STATUS   ChangeCardPowerHandler(DWORD dwSlot, INT iPower) { ; // Pointer to power control handler
        return pChangeCardPowerHandler((PSDCARD_HC_CONTEXT)this,dwSlot,iPower);
    }
    VOID            SDHCAccessLock() {
        EnterCriticalSection(&HCCritSection);
    }
    VOID            SDHCAccessUnlock() {
        LeaveCriticalSection(&HCCritSection);
    }
    
protected:
    DWORD   m_dwSdHostIndex;
    BOOL    m_fIntialized;
    BOOL    m_fHostAttached;
    SD_API_STATUS   SlotSetupInterface(DWORD dwSlot, PSD_CARD_INTERFACE_EX psdCardInterfaceEx );
    static  SD_API_STATUS DefaultChangeCardPower(PSDCARD_HC_CONTEXT pHCCardContext,DWORD Slot,INT CurrentDelta);
// SD Slot.
private:
    const DWORD   m_dwNumOfSlot;
    CSDSlot * m_SlotArray[ SD_MAXIMUM_SLOT_PER_SDHOST ];
    
};

#define SD_MAXIMUM_SDHOST 16
#define SD_SUB_BUSNAME_VALNAME     TEXT("SubBusName")     // device's name on the parent bus
#define SD_SUB_BUSNAME_VALTYPE     REG_SZ
#define SD_SUB_BUSNAME_DEFAULT     TEXT("SDBus")

class CSDHostContainer :public DefaultBusDriver, protected CStaticContainer <CSDHost, SD_MAXIMUM_SDHOST > {
public:
    CSDHostContainer(LPCTSTR pszActiveKey);
    ~CSDHostContainer();
    virtual BOOL Init();
    virtual DWORD GetBusNamePrefix(LPTSTR pszReturnBusName, DWORD cchReturnBusName);
    virtual BOOL IOControl(DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut);
    virtual BOOL SDC_IOControl(DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut);
// Help Function
    static DWORD    GetRetryCount()  { return g_pSdContainer!=NULL? g_pSdContainer->m_BusRequestRetryCount: 0; };
protected:
    virtual DWORD   GetSlotInfo(PBUS_DRIVER_SLOT_INFO pslotInfoArray, DWORD Length) ;
    virtual SD_API_STATUS GetSlotPowerControlInfo(DWORD slotIndexWanted,PSLOT_POWER_DATA pPCdata) ;
    virtual SD_API_STATUS GetFunctionPowerControlInfo(DWORD slotIndexWanted, DWORD FunctionIndexWanted, PFUNCTION_POWER_DATA pFPCdata) ;
    virtual SD_API_STATUS SetSlotPowerControl(DWORD slotIndexWanted, BOOL  fEnablePowerControl);
    virtual BOOL    SlotCardSelectDeselect(DWORD SlotIndexWanted, SD_SLOT_EVENT Event) ;
    
private:
    TCHAR   m_szSubBusNamePrefix[DEVNAME_LEN];
    CRegistryEdit m_deviceKey;

    PFREE_BUS_REQUEST_SPACE m_pFreeBusRequestSpace;
    DWORD   m_dwMinSize;
    DWORD   m_BusRequestRetryCount;
    PVOID AllocateBusRequestImp(size_t stSize);
    void  FreeBusRequestImp(CSDBusRequest *pBusRequest);
    void  DeleteAllTransferSpace();
public:
    LPCTSTR GetSubBusNamePrefix();
    
    static PVOID AllocateBusRequest(size_t stSize);
    static void  FreeBusRequest(CSDBusRequest *pBusRequest);
    static CSDHostContainer * GetHostContainer () { return g_pSdContainer; };
    static DWORD RegValueDWORD(LPTSTR lpRegName,DWORD dwDefault);
    static PVOID DriverInit(LPCTSTR pszActiveKey);
    static VOID DriverDeInit(PVOID pContent);
    static CRegistryEdit& GetDeviceKey()  {
        PREFAST_ASSERT(g_pSdContainer!=NULL);
        return g_pSdContainer->m_deviceKey;
    }
    static CSDHost * GetSDHost(DWORD dwIndex) {
        PREFAST_ASSERT(g_pSdContainer!=NULL);
        return g_pSdContainer->ObjectIndex(dwIndex);
    }
    static CSDHost * GetSDHost(CSDHost * pUnknowHost);
    static CSDDevice * GetDeviceByDevice(HANDLE hDevice);
    static CSDDevice * GetDeviceByRequest(HANDLE hDevice);
private:
    BOOL GetHCandSlotbySlotIndex(CSDHost ** ppHost,CSDSlot**ppSlot,DWORD dwIndex );
public:
    static CSDHost * InsertSDHost(CSDHost * psdHost ) {
        PREFAST_ASSERT(g_pSdContainer!=NULL);
        DWORD dwIndex;
        if (psdHost) {
            CStaticContainer * pHostContainer = g_pSdContainer;
            pHostContainer->Lock();
            psdHost = pHostContainer->InsertObjectAtEmpty(&dwIndex,psdHost);
            if (psdHost)
                psdHost->SetIndex(dwIndex);
            pHostContainer->Unlock();
            return psdHost;
        }
        else
            return NULL;
            
    }
    static CSDHost * RemoveSDHostBy(DWORD dwIndex) {
        PREFAST_ASSERT(g_pSdContainer!=NULL);
        return g_pSdContainer->RemoveObjectBy(dwIndex);
    }
    static CSDHost * RemoveSDHostBy(CSDHost * pSd) {
        PREFAST_ASSERT(g_pSdContainer!=NULL);
        return g_pSdContainer->RemoveObjectBy(pSd);
    }
// Host HC Interface.
    static SD_API_STATUS SDHCDAllocateContext__X(DWORD  NumberOfSlots,  PSDCARD_HC_CONTEXT *ppExternalHCContext);
    static SD_API_STATUS SDHCDRegisterHostController__X(PSDCARD_HC_CONTEXT pExternalHCContext);
    static SD_API_STATUS SDHCDDeregisterHostController__X(PSDCARD_HC_CONTEXT pExternalHCContext);
    static VOID SDHCDDeleteContext__X(PSDCARD_HC_CONTEXT pExternalHCContext);
    static VOID SDHCDPowerUpDown__X(PSDCARD_HC_CONTEXT  pExternalHCContext,BOOL PowerUp,BOOL SlotKeepPower, DWORD SlotIndex);
    static VOID SDHCDIndicateBusRequestComplete__X(PSDCARD_HC_CONTEXT pExternalHCContext,PSD_BUS_REQUEST pRequest, SD_API_STATUS Status);
    static PSD_BUS_REQUEST SDHCDGetAndLockCurrentRequest__X(PSDCARD_HC_CONTEXT pExternalHCContext, DWORD SlotIndex);
    static VOID SDHCDUnlockRequest__X(PSDCARD_HC_CONTEXT  pExternalHCContext,PSD_BUS_REQUEST pRequest);
    static VOID SDHCDIndicateSlotStateChange__X(PSDCARD_HC_CONTEXT pExternalHCContext, DWORD SlotNumber, SD_SLOT_EVENT Event);

private:
    static CSDHostContainer * g_pSdContainer;
};


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃精品视频在线观看| 91精品在线观看入口| 日韩一区二区免费在线观看| 精品久久久久久久久久久久久久久久久 | 国产亚洲午夜高清国产拍精品| 成人av先锋影音| 欧美一级高清大全免费观看| 中文字幕的久久| 国产99精品视频| 精品国产伦一区二区三区免费 | 成人免费不卡视频| 欧美一区二区三区视频免费| 亚洲色图视频免费播放| 国产精品一级黄| 日韩精品一区二区三区三区免费| 欧美一级黄色大片| 国产成人精品亚洲日本在线桃色| 久久av中文字幕片| 欧美喷水一区二区| 亚洲午夜精品在线| 色综合激情久久| 中文字幕在线不卡一区| 成人性生交大片免费看中文| 精品国产免费人成在线观看| 免费高清在线一区| 欧美日韩亚洲综合在线| 激情成人综合网| 日韩欧美一区二区不卡| 视频一区二区中文字幕| 欧美三级电影一区| 五月婷婷欧美视频| 欧美日韩高清不卡| 三级不卡在线观看| 日韩欧美www| 韩国理伦片一区二区三区在线播放| 成人免费三级在线| 国产精品狼人久久影院观看方式| 日韩中文字幕不卡| 91精选在线观看| 国内精品自线一区二区三区视频| 不卡的av中国片| 亚洲欧美电影院| 精品视频一区二区三区免费| 夜夜爽夜夜爽精品视频| 欧美日韩免费一区二区三区视频| 久久精品在这里| 成人小视频在线观看| 视频一区视频二区在线观看| 在线成人免费视频| 强制捆绑调教一区二区| 国产欧美视频一区二区| av不卡免费电影| 亚洲成a人v欧美综合天堂下载| www.欧美色图| 亚洲国产中文字幕| 这里是久久伊人| 国产成人av福利| 捆绑紧缚一区二区三区视频| 精品国产91乱码一区二区三区 | 国产精品久久久久aaaa樱花| av电影天堂一区二区在线| 亚洲国产日韩a在线播放| 91麻豆精品国产| 成人高清视频在线观看| 亚洲一区二区三区小说| 欧美刺激脚交jootjob| 7777女厕盗摄久久久| 国产成人综合在线播放| 亚洲一区二区三区四区不卡| 精品免费日韩av| 色狠狠桃花综合| 国产一级精品在线| 亚洲第一激情av| 国产精品免费免费| 91精品国产综合久久蜜臀| 波多野结衣亚洲| 精品一区二区三区免费视频| 首页国产欧美久久| 中文字幕日韩一区二区| 日韩三级伦理片妻子的秘密按摩| 日韩精品一二三| 国产精品久99| 久久久久亚洲综合| 91麻豆精品国产91久久久久久 | 日韩美女视频一区二区| 日韩欧美一区二区不卡| 欧洲日韩一区二区三区| 国产98色在线|日韩| 久久国产精品无码网站| 一区二区三区精品| 国产精品久久久久久久久免费桃花 | 精品久久久久久无| 99久久免费精品| 国内精品在线播放| 美女视频一区二区三区| 亚洲成在线观看| 亚洲老妇xxxxxx| 亚洲免费资源在线播放| 国产精品久久夜| 国产日韩av一区二区| 久久综合九色综合欧美就去吻| 国产精品白丝jk白祙喷水网站| 午夜欧美电影在线观看| 欧美精彩视频一区二区三区| 日韩欧美成人一区| 欧美一级黄色大片| 欧美一区二区视频免费观看| 欧美亚洲日本一区| 色88888久久久久久影院按摩| 天天做天天摸天天爽国产一区| 欧美一级国产精品| 欧美一区二区视频在线观看2022| 韩国精品一区二区| 国产剧情在线观看一区二区| 99在线精品免费| 国产99精品在线观看| 成人午夜视频免费看| 成人午夜精品在线| 高清久久久久久| 91年精品国产| 欧美在线观看视频在线| 欧美视频自拍偷拍| 欧美一区二区视频在线观看| 欧美电影免费观看高清完整版| 成人app网站| thepron国产精品| 欧美成va人片在线观看| 精品福利一区二区三区免费视频| 色婷婷av一区二区三区之一色屋| 天堂一区二区在线免费观看| 午夜精品在线视频一区| 天天操天天干天天综合网| 午夜精品一区二区三区免费视频| 日韩欧美的一区| 久久久久久久久久久久久夜| 久久久久九九视频| 国产精品乱码一区二三区小蝌蚪| 日韩美一区二区三区| 精品国产sm最大网站免费看| 国产午夜精品在线观看| 国产综合色精品一区二区三区| 国产精品素人视频| 一区二区三区中文字幕电影| 亚洲综合网站在线观看| 精品在线免费视频| 99久久久久久| 日韩欧美国产综合一区| 中文字幕巨乱亚洲| 午夜精品久久一牛影视| 国产一区二区美女诱惑| 日本精品视频一区二区三区| 精品捆绑美女sm三区| 韩国精品主播一区二区在线观看| 午夜欧美电影在线观看| 国产成人午夜视频| 欧美视频一区二区| 国产日韩欧美精品电影三级在线| 日韩欧美高清dvd碟片| 亚洲欧洲三级电影| 日本视频免费一区| 色婷婷综合久色| 欧美成人精品1314www| 亚洲已满18点击进入久久| 国产在线一区观看| 欧美精品久久久久久久多人混战 | 欧美日韩国产电影| 精品捆绑美女sm三区| 亚洲综合色区另类av| 国产精品亚洲第一区在线暖暖韩国| 久久97超碰国产精品超碰| 91福利小视频| 国产精品亲子伦对白| 老司机一区二区| 欧美日韩在线播| 亚洲伦理在线精品| 日本乱码高清不卡字幕| 欧美国产激情一区二区三区蜜月| 国产精品美日韩| 国产精品1024久久| 欧美变态tickling挠脚心| 天堂影院一区二区| 欧美亚洲动漫精品| 一区二区三区影院| 成人动漫一区二区三区| 久久免费午夜影院| 激情综合亚洲精品| 精品国产伦理网| 极品少妇xxxx精品少妇| 中文字幕一区在线观看视频| 人禽交欧美网站| 91精品国产色综合久久久蜜香臀| 欧美不卡激情三级在线观看| 青青草伊人久久| 欧美猛男男办公室激情| 亚洲午夜日本在线观看| 91精彩视频在线观看| 一区二区三区四区精品在线视频| 日韩在线一二三区| 欧美日韩国产综合一区二区 | 成人免费在线视频|