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

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

?? sdbusdriver.h

?? S3C2443 WINCE6.0 BSP
?? H
?? 第 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

// Bus driver definitions

#include "SDCardDDK.h"
#include <SDHCD.h>
#include "SDCardApi.h"
#include "SDWorkItem.h"
#include "SDEnum.h"
#include "SDBusRequest.h"
#include <CReg.hxx>

#ifndef _SDCARD_BUSDRIVER_DEFINED
#define _SDCARD_BUSDRIVER_DEFINED


// base registry key for the SDCARD driver
#define SDCARD_SDMEMORY_CLASS_REG_PATH  TEXT("\\Drivers\\SDCARD\\ClientDrivers\\Class\\SDMemory_Class")
#define SDCARD_MMC_CLASS_REG_PATH       TEXT("\\Drivers\\SDCARD\\ClientDrivers\\Class\\MMC_Class")
#define SDCARD_CUSTOM_DEVICE_REG_PATH   TEXT("\\Drivers\\SDCARD\\ClientDrivers\\Custom")
#define SDCARD_SDIO_CLASS_REG_PATH      TEXT("\\Drivers\\SDCARD\\ClientDrivers\\Class\\SDIO_Class")

#define SDCARD_THREAD_PRIORITY_KEY      TEXT("ThreadPriority")
#define SDCARD_REQUEST_LIST_DEPTH_KEY   TEXT("RequestListDepth")
#define SDCARD_REQUEST_RETRY_KEY        TEXT("RequestRetryCount")

#define SDCARD_CLOCK_RATE_OVERRIDE     TEXT("SDClockRateOverride")
#define SDCARD_INTERFACE_MODE_OVERRIDE TEXT("SDInterfaceOverride")
#define SDCARD_INTERFACE_OVERRIDE_1BIT 0
#define SDCARD_INTERFACE_OVERRIDE_4BIT 1


#define SDCARD_DEFAULT_REQUEST_LIST_DEPTH   32
#define DEFAULT_THREAD_PRIORITY             100
#define DEFAULT_MEMORY_TAGS                 6
#define DEFAULT_MESSAGE_ENTRIES             7
#define DEFAULT_REFCOUNT_WAIT               100
#define DEFAULT_MAX_WAIT_COUNT              20
#define DEFAULT_BUS_REQUEST_RETRY_COUNT     3
#define DEVICE_CLEANUP_POLLING_INTERVAL     100
#define POWER_RESUME_POLLING_INTERVAL       1000
#define POWER_RESUME_DELAY_INTERVAL         2000


// typdef for the current slot state
typedef enum SD_SLOT_STATE {
    SlotInactive = 0,    // slot is inactive
    SlotIdle,            // slot is idle (after power up)
    Ready,               // the slot is ready, the client driver now has control
    SlotDeviceEjected,   // the device is being ejected
    SlotInitFailed       // slot initialization failed
} *PSD_SLOT_STATE;


typedef struct SDBUS_HC_CONTEXT *PSDBUS_HC_CONTEXT;

// slot context , one per slot
typedef struct SDBUS_HC_SLOT_CONTEXT : SDCARD_HC_SLOT_INFO {
    PSDBUS_HC_CONTEXT           pHostController;   // the host controller this slot belongs to
    SD_DEVICE_HANDLE            hDevice;           // handle to the device occupying this slot
    SD_SLOT_STATE               SlotState;         // slot state
    DWORD                       SlotIndex;         // the slot index
    SD_REQUEST_QUEUE            RequestQueue;      // request queue for this slot
    PVOID                       pWorkItem;         // work item 
    DWORD                       Flags;             // flags
} *PSDBUS_HC_SLOT_CONTEXT;

// the following bits are for flags field in the slot context
#define SD_SLOT_FLAG_SDIO_INTERRUPTS_ENABLED   0x00000001

#define IS_SLOT_SDIO_INTERRUPT_ON(pSlot) ((pSlot)->Flags & SD_SLOT_FLAG_SDIO_INTERRUPTS_ENABLED)
#define FLAG_SD_SLOT_INTERRUPTS_ON(pSlot) ((pSlot)->Flags |= SD_SLOT_FLAG_SDIO_INTERRUPTS_ENABLED)
#define FLAG_SD_SLOT_INTERRUPTS_OFF(pSlot) ((pSlot)->Flags &= ~SD_SLOT_FLAG_SDIO_INTERRUPTS_ENABLED)


// host controller context
typedef struct SDBUS_HC_CONTEXT : SDCARD_HC_CONTEXT {
    DWORD                    dwSig;                  // signature of structure
    LIST_ENTRY               ListEntry;              // hc list pointers
    DWORD                    dwHCNumber;             // hc number
    PVOID                    pSystemContext;         // system context
    DWORD                    NumberOfSlots;          // number of slots
    SDBUS_HC_SLOT_CONTEXT    SlotList[1];            // beginning of slot list array
} *PSDBUS_HC_CONTEXT;

#define SDHCGetSlotContext(pHc, Index)      &((pHc)->SlotList[Index])  


// the card registers
typedef struct SDCARD_CARD_REGISTERS {
    UCHAR   OCR[SD_OCR_REGISTER_SIZE];          // SD OCR
    UCHAR   IO_OCR[SD_IO_OCR_REGISTER_SIZE];    // IO OCR
    UCHAR   CID[SD_CID_REGISTER_SIZE];          // CID
    UCHAR   CSD[SD_CSD_REGISTER_SIZE];          // CSD
    UCHAR   SCR[SD_SCR_REGISTER_SIZE];          // SCR
} *PSDCARD_CARD_REGISTERS;


// typedef for work item callback
typedef VOID (*PSD_BUS_WORK_ITEM_FUNC) (PVOID);

// SDIO common information (shared by all I/O functions)
typedef struct SDIO_COMMON_INFORMATION {
    UCHAR                   CCCRRev;              // CCCE/SDIO Revision (common for all functions)   
    UCHAR                   SDSpec;               // SD Spec version register
    UCHAR                   CardCapability;       // card capability (common for all functions)
    DWORD                   CommonCISPointer;     // common CIS pointer for this function
    USHORT                  ManufacturerID;       // 16 bit manufacturer ID  (common) 
    USHORT                  CardID;               // 16 bit cardID     (common)
    PWCHAR                  pProductInformation;  // storage for the product information string (common)
    UCHAR                   CCCRShadowIntEnable;  // shadowed interrupt enable register (Parent Only)
    UCHAR                   CCCRShadowIOEnable;   // shadowed I/O enable register (Parent Only)
} *PSDIO_COMMON_INFORMATION;

// SDIO information for each I/O function
typedef struct SDIO_INFORMATION {
    UCHAR                    Function;             // function number
    UCHAR                    DeviceCode;           // device interface code for this function
    DWORD                    CISPointer;           // CIS pointer for this function
    DWORD                    CSAPointer;           // CSA pointer for this function
    PWCHAR                   pFunctionInformation; // storage for the function information string
    PSD_INTERRUPT_CALLBACK   pInterruptCallBack;   // for SDIO devices the interrupt callback
    PSDIO_COMMON_INFORMATION pCommonInformation;   // common information (parent only)
    BOOL                     fWUS;                 // Wake up supported?
} *PSDIO_INFORMATION;

// SD/SDIO/MMC specific information
typedef struct SDMMC_INFORMATION {
    ULONG   DataAccessWriteClocks;    // total clocks required for the write to finish  
    ULONG   DataAccessReadClocks;     // total access delay in clocks for the first byte transferred in a read
    BOOL    CardIsLocked;             // card is locked
} *PSDMMC_INFORMATION;

// SD Card information structure
typedef struct SDCARD_INFORMATION {
    SDIO_INFORMATION    SDIOInformation;    // SDIO information
    SDMMC_INFORMATION   SDMMCInformation;   // SD/SDIO/MMC information
} *PSDCARD_INFORMATION;

// the device context definition returned as the SD_DEVICE_HANDLE
typedef struct SDCARD_DEVICE_CONTEXT {
    // pGetDeviceFunctions is deprecated, but needs to stay as a
    // pointer type for legacy reasons.
    PVOID                   pvReserved;           // reserved (DO NOT CHANGE THIS LOCATION)
    HINSTANCE               hDriver;              // handle to the device driver DLL (DO NOT CHANGE THIS LOCATION)
    DWORD                   dwSig;                // signature of structure
    PSDBUS_HC_SLOT_CONTEXT  pSlot;                // the slot this device is on
    LONG                    ReferenceCount;       // this object's reference count
    TCHAR                   ClientName[MAX_SDCARD_CLIENT_NAME]; // client name
    DWORD                   ClientFlags;          // flags set by the client driver
    SDCARD_DEVICE_TYPE      DeviceType;           // device type
    CSdDeviceFolder        *pDeviceFolder;        // device folder
    PVOID                   pDeviceContext;       // device specific context
    PSD_SLOT_EVENT_CALLBACK pSlotEventCallBack;   // slot event callback
    SD_CARD_RCA             RelativeAddress;      // card's relative address
    SDCARD_CARD_REGISTERS   CachedRegisters;      // cached registers
    DWORD                   OperatingVoltage;     // current operating voltage
    PVOID                   pSystemContext;       // system context
    SDCARD_INFORMATION      SDCardInfo;           // information for SD Card (based on type)
    CRITICAL_SECTION        DeviceCritSection;    // device instance critical section for interlocking between functions
    SD_CARD_INTERFACE       CardInterface;        // card's current interface
    SDCARD_DEVICE_CONTEXT  *pNext;                // next device in chain for multifunction devices
    SDCARD_DEVICE_CONTEXT  *pParentDevice;        // parent device (for synchronization)
} *PSDCARD_DEVICE_CONTEXT;

// Signature of SDCARD_DEVICE_CONTEXT structure
#define VALID_DEVICE_CONTEXT_SIG 'cDdS' // SdDc

BOOL ValidateClientHandle(PSDCARD_DEVICE_CONTEXT pDevice);


// synchronous request information
typedef struct SD_SYNCH_REQUEST_INFO {
    HANDLE                 hWaitEvent;         // wait object
    PSD_COMMAND_RESPONSE   pResponse;          // response buffer pointer from caller
    SD_COMMAND_RESPONSE    TempResponse;       // temp response buffer 
    SD_API_STATUS          Status;             // completion status
} *PSD_SYNCH_REQUEST_INFO;

// helpful macros
#define CLIENT_HANDLES_RETRY(pDevice)   ((pDevice)->ClientFlags & SD_CLIENT_HANDLES_RETRY)
#define SDDCGetClientDeviceFromHandle(handle) ((PSDCARD_DEVICE_CONTEXT)(handle))
#define SDDCGetClientName(pDevice)            (pDevice)->ClientName
#define SDDCAcquireDeviceLock(pDevice)         EnterCriticalSection(&((pDevice)->DeviceCritSection));
#define SDDCReleaseDeviceLock(pDevice)         LeaveCriticalSection(&((pDevice)->DeviceCritSection));
#define SDDCIncrementRefCount(pDevice)     InterlockedIncrement(&((pDevice)->ReferenceCount));
#define SDDCDecrementRefCount(pDevice)     \
{ \
    DEBUG_CHECK(((pDevice)->ReferenceCount != 0),(TEXT("Reference Count decremented past zero!"))); \
    InterlockedDecrement(&((pDevice)->ReferenceCount)); \
}

#define IS_DEVICE_MULTIFUNCTION(pDevice) \
    (((pDevice)->pParentDevice != (pDevice)) || (NULL != (pDevice)->pNext))

#define SDDCGetRefCount(pDevice) (pDevice)->ReferenceCount

// bus request System Flags
#define SD_BUS_REQUEST_BUSY                 0x00000100      // bus request is in the HC
#define SD_BUS_REQUEST_NON_CANCELABLE       0x00000200      // bus request is non-cancelable
#define SD_BUS_REQUEST_COMPLETING           0x00000400      // bus request is being processed in dispatcher
#define SYSTEM_FLAGS_RETRY_COUNT_MASK       0x000000FF


#define SD_REQUEST_MARK_BUSY(p) ((p)->SystemFlags |= SD_BUS_REQUEST_BUSY)
#define IS_SD_REQUEST_BUSY(p)   ((p)->SystemFlags & SD_BUS_REQUEST_BUSY)

#define SD_REQUEST_MARK_NON_CANCELABLE(p) ((p)->SystemFlags |= SD_BUS_REQUEST_NON_CANCELABLE)
#define SD_REQUEST_MARK_CANCELABLE(p)     ((p)->SystemFlags &= ~SD_BUS_REQUEST_NON_CANCELABLE)
#define IS_SD_REQUEST_CANCELABLE(p)       (!((p)->SystemFlags & SD_BUS_REQUEST_NON_CANCELABLE))

#define SD_REQUEST_MARK_COMPLETING(p) ((p)->SystemFlags |= SD_BUS_REQUEST_COMPLETING)
#define IS_REQUEST_COMPLETING(p)      ((p)->SystemFlags & SD_BUS_REQUEST_COMPLETING)

// macros for manipulating the retry count
#define SDRequestGetRetryCount(pRequest) \
    ((pRequest)->SystemFlags & SYSTEM_FLAGS_RETRY_COUNT_MASK)

#define SDRequestSetRetryCount(pRequest, Value) \
{ \
    (pRequest)->SystemFlags &= ~SYSTEM_FLAGS_RETRY_COUNT_MASK;          \
    (pRequest)->SystemFlags |= (Value & SYSTEM_FLAGS_RETRY_COUNT_MASK); \
}

#define SDDecrementRetryCount(pRequest) \
{ \
    ULONG retryCount; \
    retryCount = SDRequestGetRetryCount(pRequest); \
    DEBUGCHK(retryCount != 0); \
    retryCount--; \
    SDRequestSetRetryCount(pRequest, retryCount); \
}


// macro to check for the slot to be ready
_inline SD_API_STATUS CheckSlotReady(PSDBUS_HC_SLOT_CONTEXT pSlot) {

    if ((SlotIdle != pSlot->SlotState) && (Ready != pSlot->SlotState)) {
        if (SlotDeviceEjected == pSlot->SlotState) {
            DEBUGMSG(SDCARD_ZONE_WARN, (TEXT("SDCard: Device in Slot:%d is about to be removed. Rejecting Request \n"), pSlot->SlotIndex));    
            return SD_API_STATUS_DEVICE_REMOVED;
        } else {
            DEBUG_CHECK(FALSE,(TEXT("SubmitBusRequest: Slot is not ready. Current slot state is %d \n"),pSlot->SlotState ));
            return SD_API_STATUS_UNSUCCESSFUL;
        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香婷综合久久| 国产69精品一区二区亚洲孕妇| 免费一级欧美片在线观看| 国产在线国偷精品产拍免费yy | 国产肉丝袜一区二区| 亚洲精品视频观看| 国产精品亚洲一区二区三区在线| 欧美综合天天夜夜久久| 国产色产综合产在线视频| 亚洲国产一区二区在线播放| 成人网页在线观看| 日韩精品在线看片z| 无吗不卡中文字幕| 91视频在线看| 中文在线一区二区| 国产一区二区三区不卡在线观看| 欧美视频在线观看一区| 亚洲免费观看在线观看| 国产剧情一区二区三区| 91精品国产综合久久国产大片| 国产精品成人一区二区艾草 | 精品理论电影在线| 午夜精品影院在线观看| 色哟哟亚洲精品| 国产精品免费视频网站| 国产九色sp调教91| 精品第一国产综合精品aⅴ| 婷婷亚洲久悠悠色悠在线播放| 成人少妇影院yyyy| 久久久久久久久久看片| 香蕉影视欧美成人| 欧美亚洲自拍偷拍| 亚洲国产精品麻豆| 99久久综合精品| 国产亚洲欧美在线| 懂色中文一区二区在线播放| 2023国产精品| 国产麻豆成人传媒免费观看| 欧美大白屁股肥臀xxxxxx| 男人的j进女人的j一区| 日韩欧美在线不卡| 激情综合网av| 久久精品夜夜夜夜久久| kk眼镜猥琐国模调教系列一区二区| 久久久久久毛片| 国产 欧美在线| 椎名由奈av一区二区三区| 色婷婷国产精品综合在线观看| 一区二区三区在线影院| 欧美欧美欧美欧美| 老鸭窝一区二区久久精品| 久久伊99综合婷婷久久伊| 国产精品一区二区免费不卡| 国产精品素人一区二区| 色欧美乱欧美15图片| 首页国产丝袜综合| 久久精子c满五个校花| 91欧美激情一区二区三区成人| 夜夜揉揉日日人人青青一国产精品| 欧美午夜精品一区二区三区| 美女网站色91| 国产精品免费久久久久| 欧美日韩中文字幕一区二区| 麻豆精品国产传媒mv男同| 国产三级精品三级在线专区| av午夜一区麻豆| 日本伊人色综合网| 欧美国产亚洲另类动漫| 欧美性色欧美a在线播放| 毛片av中文字幕一区二区| 国产精品污www在线观看| 在线免费观看一区| 韩国v欧美v日本v亚洲v| 亚洲欧美日韩久久| 日韩欧美亚洲国产精品字幕久久久 | 亚洲日本乱码在线观看| 欧美一区二区免费观在线| 成人午夜激情视频| 奇米888四色在线精品| 亚洲视频 欧洲视频| 日韩美女视频在线| 欧美优质美女网站| 国产电影精品久久禁18| 亚洲chinese男男1069| 中文字幕第一页久久| 91精品国产一区二区三区| 97精品电影院| 国产久卡久卡久卡久卡视频精品| 亚洲图片欧美视频| 中文字幕一区二区三中文字幕| 91精品欧美一区二区三区综合在| 97精品视频在线观看自产线路二| 精品影院一区二区久久久| 亚洲v中文字幕| 国产精品国产三级国产普通话蜜臀 | 麻豆高清免费国产一区| 一区二区三区成人在线视频| 久久久国产午夜精品| 91麻豆精品国产无毒不卡在线观看| av一区二区三区四区| 国产精品123| 国产一区视频在线看| 日本系列欧美系列| 婷婷亚洲久悠悠色悠在线播放 | 麻豆91精品视频| 日精品一区二区三区| 亚洲一区在线看| 亚洲人成小说网站色在线| 国产精品欧美一区喷水| 欧美mv日韩mv国产网站| 日韩免费高清电影| 欧美一卡在线观看| 色综合色狠狠天天综合色| 丁香婷婷综合激情五月色| 国产乱码精品一区二区三区忘忧草 | 精品欧美乱码久久久久久| 日韩一区二区三区av| 在线不卡一区二区| 欧美一区二区三区在线电影| 欧美日韩国产首页| 欧美顶级少妇做爰| 欧美卡1卡2卡| 日韩三级视频中文字幕| 日韩视频一区二区在线观看| 欧美videos大乳护士334| 337p日本欧洲亚洲大胆色噜噜| 久久色.com| 国产丝袜欧美中文另类| 国产精品美女久久久久aⅴ国产馆| 国产午夜亚洲精品不卡| 国产精品传媒入口麻豆| 一区二区视频在线| 日韩国产在线观看一区| 青青草一区二区三区| 韩国精品主播一区二区在线观看| 韩国av一区二区三区在线观看| 精品一区二区成人精品| 国产成人免费视频网站| 色偷偷久久人人79超碰人人澡| 欧美在线啊v一区| 亚洲精品在线电影| 最新日韩av在线| 日本亚洲视频在线| 成人听书哪个软件好| 欧美日韩一区二区电影| 精品国产乱码久久久久久影片| 日本一区二区综合亚洲| 亚洲欧美一区二区三区国产精品| 亚洲国产精品天堂| 国产精品一品视频| 在线影院国内精品| 日韩免费高清av| 亚洲视频在线观看三级| 麻豆国产精品一区二区三区| 国产成a人无v码亚洲福利| 欧美日本在线播放| 国产精品麻豆网站| 日韩—二三区免费观看av| jvid福利写真一区二区三区| 欧美一区三区二区| 亚洲欧美综合网| 美脚の诱脚舐め脚责91| 日本精品一区二区三区高清| 欧美一区中文字幕| 亚洲最色的网站| 国产v综合v亚洲欧| 日韩欧美中文字幕公布| 夜夜嗨av一区二区三区四季av| 激情综合色播五月| 欧美日韩mp4| 亚洲视频资源在线| 国产麻豆一精品一av一免费| 欧美三级电影网| 成人欧美一区二区三区视频网页| 美女诱惑一区二区| 欧美性一二三区| 综合在线观看色| 国产乱子伦视频一区二区三区| 欧美美女一区二区在线观看| 亚洲天堂2014| 成人午夜激情影院| 精品动漫一区二区三区在线观看| 亚洲成人免费电影| 一本色道久久加勒比精品| 中文字幕不卡三区| 国产精品18久久久久久久久| 欧美成人一区二区三区在线观看| 亚洲v中文字幕| 欧美四级电影在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产一区二区调教| 欧美不卡视频一区| 麻豆国产精品777777在线| 欧美日本免费一区二区三区| 一区二区三区在线视频观看58| 99久久伊人久久99| 成人欧美一区二区三区在线播放| 国产91在线观看丝袜| 精品久久久久久综合日本欧美| 日本午夜一本久久久综合|