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

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

?? phcd.hpp

?? ISP1161 USB Driver under WinCE for StrongARM processor implementation
?? HPP
?? 第 1 頁 / 共 3 頁
字號:
/*++
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.
Copyright (c) 1995, 1996, 1997, 1998  Microsoft Corporation

Module Name:  
    ohcd.hpp

Abstract:  
    
Notes: 
--*/
#ifndef _PHCD_HPP_
#define _PHCD_HPP_

#define PLAT_STRONGARM		

#define DEFAULT_PHCD_IST_PRIORITY 101 // UsbDriverThread
#define RELATIVE_PRIO_RESET     1     // ResetPort
#define RELATIVE_PRIO_STSCHG    1     // DeviceStatusChange
#define RELATIVE_PRIO_CRITICAL  1     // UsbDriverCriticalThread (really -5)

// Original design was to have a TIME_CRITICAL thread for processing large data
// transfers.  But, there are some tricky interactions between the normal IST and
// the TIME_CRITICAL one which haven't been fully tested, so leave this disabled
// for now.
#undef USE_CRITICAL_THREAD

// These structures MUST have exactly the same
// data types as the USB_* structues in usbtypes.h
typedef struct _PHCI_ENDPOINT {
    DWORD                                   dwCount;

    USB_ENDPOINT_DESCRIPTOR                 Descriptor;
    LPBYTE                                  lpbExtended;
} PHCI_ENDPOINT, * LPPHCI_ENDPOINT;

typedef struct _PHCI_INTERFACE {
    DWORD                                   dwCount;

    USB_INTERFACE_DESCRIPTOR                Descriptor;
    LPBYTE                                  lpbExtended;
    LPPHCI_ENDPOINT                         lpEndpoints;
} PHCI_INTERFACE, * LPPHCI_INTERFACE;

typedef struct _PHCI_CONFIGURATION {
    DWORD                                   dwCount;

    USB_CONFIGURATION_DESCRIPTOR            Descriptor;
    LPBYTE                                  lpbExtended;
    // Total number of interfaces (including alternates)
    DWORD                                   dwNumInterfaces;
    LPPHCI_INTERFACE                        lpInterfaces;
} PHCI_CONFIGURATION, * LPPHCI_CONFIGURATION;

typedef struct _PHCI_DEVICE {
    DWORD                                   dwCount;

    USB_DEVICE_DESCRIPTOR                   Descriptor;
    LPPHCI_CONFIGURATION                    lpConfigs;
    LPPHCI_CONFIGURATION                    lpActiveConfig;
} PHCI_DEVICE, * LPPHCI_DEVICE;


extern const WCHAR * gcPortNamesArray[2];
const UINT gcMaxNameSize = 32;

const UINT gcUsbEndptDescNumMask = 0x0F;
const UINT gcUsbEndptDescDirMask = 0x80;

const UINT gcAddr0MaxRetryValue = 10;

// This assumes at most a root hub with 3 ports (addr 0 used for attach)
// and no hubs.  Most devices will only have 2 endpoints.
const UINT gcInitialMaxNumDevices = 4;
const UINT gcInitialMaxNumEndpts = 2;
const UINT gcRootHubNum = 0;

const UINT gcMaxRootHubPorts = 15;

const UINT gcNumExtraGeneralTds = 32;

const UINT gcEndpoint0Addr = 0;
const UINT gcHubIntrEndptAddr = 1;

const UINT gcMaxClassesPerDevice = 25;

// When DMAing, you need to flush the cache first.  If the cache flush
// algorithm is sufficiently bad, it can become more expensive to flush
// the cache than to just copy all the data into/from a non-cached buffer.
// We've determined that copying is better for anything less than this
// number of bytes
const UINT gcMaxSizeCopyBetterThanFlush = 256;

// Delay to allow device power to stabilize (sec 11.6.3)
const UINT gcDevicePowerDelay = 100; // ms

const UINT gcMaxDevices = 127;  // maximum number of devices on USB bus
const UINT gcMaxHubChaining = 7; // maximum number of hubs than can be chained into one another

// Consts needed for bandwidth info.
const UINT gcControlOverheadBytes = 45;
const UINT gcInterruptOverheadBytes = 13;
const UINT gcIsochronousOverheadBytes = 9;
const UINT gcBulkOverheadBytes = 13;

const UINT gcLowSpeedBWMultiplier = 8;

const UINT gcFramesPerSecond = 1000;
const UINT gcTotalBWBytes = (12 * 1024 * 1024)/8;
const UINT gcTotalFrameBWBytes = gcTotalBWBytes / gcFramesPerSecond;

// control transfers reserve 10% of the bandwidth.
const UINT gcMaxUsableFrameBWBytes = 9 * gcTotalFrameBWBytes / 10;

inline UINT
AdjustForBitStuffing(UINT nData)
{
   // Calculate worst case bit stuffing overhead, as per USB spec
   return(nData*7/6);
}

// Consts for dealing with the interrupt structure
const UINT gcIntrNumStaticEds = 63;
const UINT gcIntrNumListHeads = 32;

const UINT gcIntrNumLevelsFor1ms = 5;
const UINT gcIntrNumLevelsFor2ms = 4;
const UINT gcIntrNumLevelsFor4ms = 3;
const UINT gcIntrNumLevelsFor8ms = 2;
const UINT gcIntrNumLevelsFor16ms = 1;
const UINT gcIntrNumLevelsFor32ms = 0;

const UINT gcIntrTotalNumLevels = gcIntrNumLevelsFor1ms + 1;

const DWORD gcStaticEdIdentifier = 0xFFFFFFF0;
const UINT gcInterval32ms = 32;

const UINT gcInitialConfigDescriptorSize = 4;
const UINT gcInitialDeviceDescriptorSize = 8;

const UCHAR gcEndptTypeControl      = 0x00;
const UCHAR gcEndptTypeIsochronous  = 0x01;
const UCHAR gcEndptTypeBulk         = 0x02;
const UCHAR gcEndptTypeInterrupt    = 0x03;


const UCHAR gcDevConfigStatusNone                           = 0x0;
const UCHAR gcDevConfigStatusUsingAddr0                     = 0x1;
const UCHAR gcDevConfigStatusGettingInitialDeviceDescriptor = 0x2;
const UCHAR gcDevConfigStatusSettingAddress                 = 0x3;
const UCHAR gcDevConfigStatusGettingDeviceDescriptor        = 0x4;
const UCHAR gcDevConfigStatusGettingInitialConfig           = 0x5;
const UCHAR gcDevConfigStatusGettingConfig                  = 0x6;
const UCHAR gcDevConfigStatusSettingConfig                  = 0x7;
const UCHAR gcDevConfigStatusDone                           = 0x8;
//const UCHAR gcDevConfigStatusConnectedToClass             = 0x9;
//const UCHAR gcDevConfigStatusRemoved                      = 0xA;

const UCHAR gcDevConfigStatusHubGettingDescriptor           = 0x10;
const UCHAR gcDevConfigStatusHubConfiguring                 = 0x11;
const UCHAR gcDevConfigStatusHubPoweringPorts               = 0x12;
const UCHAR gcDevConfigStatusHubReady                       = 0x13;
const UCHAR gcDevConfigStatusHubClearingChanges             = 0x14;
const UCHAR gcDevConfigStatusHubGettingPortStatus           = 0x15;
const UCHAR gcDevConfigStatusHubStartingPortReset           = 0x16;
const UCHAR gcDevConfigStatusHubResettingPort               = 0x17;
const UCHAR gcDevConfigStatusHubWaitingForPortReset         = 0x18;
const UCHAR gcDevConfigStatusHubWaitingForPortShutoff       = 0x19;
const UCHAR gcDevConfigStatusHubKillingPort                 = 0x1A;

const UCHAR gcDevConfigStatusHubWaitingForHubClearFlags     = 0x20;
const UCHAR gcDevConfigStatusHubClearingHubLocalPowerFlag   = 0x21;
const UCHAR gcDevConfigStatusHubClearingOverCurrentFlag     = 0x22;
const UCHAR gcDevConfigStatusHubWaitingForPowerGood         = 0x23;
const UCHAR gcDevConfigStatusHubWaitingForPortResetAck      = 0x24;

const UCHAR gcDevConfigStatusHubGettingPoweredStatus        = 0x25;
//const UCHAR gcDevConfigStatusHubResettingPort               = 0x26;
//const UCHAR gcDevConfigStatusHubWaitingForResetIssue        = 0x27;
//const UCAHR gcDevConfigStatusHubWaitingForDisableAndReset   = 0x28;
//const UCAHR gcDevConfigStatusHubWaitingForDisable           = 0x29;

const UCHAR gcDevConfigStatusInvalid                        = 0xFF;

// This is not a class transfer so this flag is not used.
const ULONG gcBufTypeUnused    = 0x00;

// We're using and internal buffer and copying user data to/from it.
const ULONG gcBufTypeCopied     = 0x01;
// It's an Isoch transfer and we're using the special class provided
// physical address.  
const ULONG gcBufTypeAlt        = 0x02;

class CPhcd;

struct STransfer
{
    //this pointer changed only by critical thread until last two TD
    //where less critical thread changes it
    PBYTE       lpbClientBuffer;
    DWORD       dwClientBufferPerms;   // ProcPerms for accessing client buf

    LPVOID      lpCompletionParameter;
    LPTRANSFER_NOTIFY_ROUTINE lpCompletionStartAddress;

    LPVOID      lpCancelParameter;
    LPTRANSFER_NOTIFY_ROUTINE lpCancelStartAddress;

    LPCVOID     lpvCancelId;

    PBOOL       pfComplete;
    PDWORD      pdwBytesTransfered;
    PDWORD      pdwError;

    PDWORD      adwIsochErrors;
    PDWORD      adwIsochLengths;

    LPBYTE      pSetupBuffer;

    UINT        cbBuffer1;
    LPBYTE      pDataBuffer1;
    ULONG       paDataBuffer1;

    UINT        cbBuffer2;
    LPBYTE      pDataBuffer2;
    ULONG       paDataBuffer2;

    PDWORD      aCopyLengths;
    // this pointer is changed ONLY by the critical thread
    PDWORD      pCopyLength;
#ifdef USE_CRITICAL_THREAD
    UINT        cCriticalTds;
#endif
    UINT        cNormalTds;

    BOOL        fCanceled;
    BOOL        fActiveCanceled;

    UINT        fIn;
    UINT        fCompress;
    UINT        bufType;

    ULONG       paLastTD;

    STransfer * pNext;

};


struct SEndpoint
{
    SEndpointDescriptor * pEd;

    CRITICAL_SECTION csSTransferListLock;
#ifdef USE_CRITICAL_THREAD
    CRITICAL_SECTION csCriticalThreadCancel;
#endif
    STransfer *pTransferHead;

    BOOL  fHalted;

    USHORT maxPacket;
    UCHAR endptArrayNum;
    UCHAR endptType;
    DWORD dwIsochNextFreeFrame;


	BOOL fPhcdToggleBit; //Code added by Zou Ying to support data toggling. 
};

struct SHubPort
{
    UCHAR addr;
    UCHAR hubConfigStatus;
    UCHAR flags;
    DWORD dwPowerGoodTime;
};

struct SDevice
{
    CRITICAL_SECTION csAccessingEndpointArray;
    SEndpoint * * ppEndpts;
    // For our memory allocation routines, we need some BOOLs to handle aborting
    // transfers blocked waiting for memory.
    BOOL * pfEndptAbortTransfers; 

    UCHAR configStatus;
    UCHAR configRetries;// For tracking retries during configuration
    UCHAR maxEndpts;
    UCHAR bIsLowSpeed;  //should be a BOOL, but UINTs are too big
    UCHAR hubNum;
    UCHAR port;
    UCHAR address;
//  UCHAR numInterfaces; //available in usbDevice
    UCHAR hubNumPorts;
    DWORD hubPowerOnToPowerGood;
    SHubPort * pHubPorts;
//    DWORD * pnHubPortPowerDraw;
    BOOL  fBusPoweredHub;
    BOOL  fRemovable;

    UINT iCurrentConfig;
    PHCI_DEVICE ohciDevice;

    // REVIEW t-paulk this Critical Section isn't used in the code????
    // It isn't used, but I'm not removing it for Cedar SP2
    CRITICAL_SECTION csAttachementDetachement;
    BOOL fAttached;
    BOOL fDetached;

    LPVOID lpvDetachId;
};

struct SPhysAddr
{
    PBYTE virtAddr;
    ULONG physAddr;

    UINT cIsochOffsets;
    UINT length;
    SPhysAddr *pNext;
};


struct SEdInfo
{
    SEndpoint * pEndpt;
    SEndpointDescriptor * pEd;
    UCHAR endptType;
    USHORT uFrame;

    SEdInfo *pNext;
};

struct STdInfo
{
    SDevice * pDev;
    SEndpoint * pEndpt;
    BOOL    fResetPipe;

    LPCVOID     lpvCancelId;

    USHORT uFrame;

    STdInfo *pNext;
};

struct SThreadParams
{
    CPhcd * pPhcd;
    SDevice * pDev;
    BOOL    fAttach;  // TRUE = attach, FALSE = detach
    DWORD   dwDelay;
    SThreadParams * pNext;
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产a毛片| 在线观看网站黄不卡| 亚洲成在人线在线播放| 国产精品久久毛片a| 久久亚洲综合色| 精品国产露脸精彩对白| 欧美一级在线视频| 日韩西西人体444www| 欧美人妇做爰xxxⅹ性高电影| 色一情一乱一乱一91av| 色88888久久久久久影院野外| 成人av在线影院| 99精品热视频| 日本高清视频一区二区| 在线区一区二视频| 91精品91久久久中77777| 日本久久一区二区| 一本大道综合伊人精品热热| 色综合中文综合网| 亚洲人成影院在线观看| 国产精品麻豆网站| 中文字幕在线一区二区三区| 亚洲欧美综合网| 亚洲图片一区二区| 日本色综合中文字幕| 免费成人av资源网| 国内久久精品视频| 国产乱色国产精品免费视频| 99视频精品全部免费在线| 色哟哟在线观看一区二区三区| 欧美中文字幕一二三区视频| 欧美三级午夜理伦三级中视频| 欧美一区二区三区性视频| 欧美白人最猛性xxxxx69交| 久久精品一区蜜桃臀影院| 中文字幕av在线一区二区三区| ...xxx性欧美| 日韩高清不卡一区二区三区| 国产做a爰片久久毛片| 成人国产亚洲欧美成人综合网| 欧日韩精品视频| 精品国产凹凸成av人网站| 国产精品亲子乱子伦xxxx裸| 亚洲一区在线观看免费| 蜜桃久久久久久| 99综合影院在线| 日韩一区二区免费高清| 久久精品欧美一区二区三区不卡| 亚洲老妇xxxxxx| 国产在线一区观看| 欧美综合亚洲图片综合区| 精品国产伦一区二区三区观看方式 | 在线不卡的av| 国产精品青草综合久久久久99| 视频一区视频二区在线观看| 成人久久视频在线观看| 91精品国产一区二区| 中文字幕免费观看一区| 日韩成人一区二区| 91丨porny丨户外露出| 26uuu另类欧美| 日本欧美大码aⅴ在线播放| aaa亚洲精品| 国产亚洲欧洲一区高清在线观看| 亚洲国产精品久久久男人的天堂| 粉嫩久久99精品久久久久久夜| 欧美精品18+| 亚洲精品乱码久久久久久黑人| 成人小视频免费在线观看| 日韩精品中文字幕在线一区| 亚洲成人午夜电影| 91啦中文在线观看| 中文字幕国产一区| 国产成人免费视| 精品国产网站在线观看| 日本va欧美va欧美va精品| 在线视频国内自拍亚洲视频| 国产精品二区一区二区aⅴ污介绍| 国产麻豆精品久久一二三| 日韩一区二区精品在线观看| 午夜亚洲福利老司机| 欧美日韩国产中文| 亚洲永久免费视频| 欧美日韩精品高清| 五月天激情综合| 欧美午夜免费电影| 亚洲国产aⅴ天堂久久| 91蜜桃在线免费视频| 国产精品久久精品日日| 波多野洁衣一区| 国产精品乱人伦| 91麻豆国产精品久久| 国产精品久久久久久久久图文区| 国产99久久久久| 国产精品女同一区二区三区| 成人avav影音| 亚洲码国产岛国毛片在线| 日本乱人伦aⅴ精品| 亚洲成人免费在线| 欧美一区二区黄| 久久99久久99小草精品免视看| 精品欧美乱码久久久久久 | 26uuu欧美日本| 国产成人精品一区二区三区四区| 国产偷国产偷亚洲高清人白洁| 粉嫩aⅴ一区二区三区四区| 中文字幕在线观看一区二区| 色婷婷精品大在线视频 | 日韩中文字幕区一区有砖一区| 欧美一区二区女人| 国产成人h网站| 亚洲精品五月天| 欧美精品在线视频| 国产一区二区三区蝌蚪| 日韩一区在线看| 91精品麻豆日日躁夜夜躁| 国内成人自拍视频| 亚洲欧美日韩国产成人精品影院| 在线播放中文一区| 成人一区二区三区视频| 午夜精品福利在线| 久久影音资源网| 欧美自拍偷拍午夜视频| 国产在线视频不卡二| 亚洲激情图片一区| 国产亚洲自拍一区| 欧美视频在线一区二区三区| 国产在线视视频有精品| 亚洲最新视频在线观看| 久久色在线观看| 欧美老肥妇做.爰bbww| 国产精品456| 麻豆一区二区99久久久久| 玉米视频成人免费看| 久久九九影视网| 7777精品伊人久久久大香线蕉的 | 成人avav影音| 极品美女销魂一区二区三区免费| 亚洲男人天堂一区| 久久久精品免费网站| 91精品黄色片免费大全| 91麻豆视频网站| 国产一区不卡精品| 免费一级欧美片在线观看| 一区二区在线观看视频在线观看| 精品99一区二区| 欧美三电影在线| 99精品欧美一区二区三区综合在线| 麻豆一区二区三区| 午夜av一区二区| 洋洋成人永久网站入口| 亚洲欧洲av一区二区三区久久| 久久久午夜精品理论片中文字幕| 日韩精品一区二区三区蜜臀| 欧美日韩高清一区| 欧美三电影在线| 欧洲精品一区二区三区在线观看| 99久久久国产精品| 不卡大黄网站免费看| 国产成人精品亚洲777人妖| 国产在线不卡一卡二卡三卡四卡| 亚洲午夜国产一区99re久久| 一区二区免费视频| 亚洲一区免费在线观看| 亚洲国产精品一区二区久久| 一区二区在线观看免费视频播放| 国产精品乱码妇女bbbb| 欧美韩国日本综合| 国产精品欧美一区二区三区| 国产清纯白嫩初高生在线观看91 | 国产精品一色哟哟哟| 韩国精品久久久| 国产在线不卡一区| 国产不卡视频在线播放| 国产福利一区二区三区视频 | 国产日本欧美一区二区| 国产欧美日产一区| 国产精品美女久久久久av爽李琼 | 色综合久久九月婷婷色综合| 91国产免费观看| 欧美日韩大陆在线| 精品女同一区二区| 日本一区二区视频在线| 中文字幕日本不卡| 亚洲高清免费一级二级三级| 日本成人中文字幕| 国产最新精品精品你懂的| 成人一区二区三区中文字幕| 日本道色综合久久| 91精品婷婷国产综合久久 | 国产一区二区在线观看免费| 成人激情视频网站| 91黄色激情网站| 日韩三级电影网址| 国产性做久久久久久| 综合婷婷亚洲小说| 青青草精品视频| 成人福利在线看| 欧美夫妻性生活| 国产精品视频看|