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

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

?? 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;
};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费视频网站在线观看| 国产精品久久久久影视| 亚洲午夜国产一区99re久久| 色综合色狠狠综合色| 亚洲一区二区三区视频在线播放| 日本久久电影网| 亚洲成人激情综合网| 日韩一卡二卡三卡| 日韩成人一区二区| 精品日韩成人av| 成人激情视频网站| 亚洲一区视频在线| 欧美大片顶级少妇| 国产不卡视频一区二区三区| 最好看的中文字幕久久| 欧美日韩黄视频| 久久99精品国产麻豆婷婷| 国产三级精品视频| 色婷婷精品久久二区二区蜜臀av| 香蕉乱码成人久久天堂爱免费| 日韩三级中文字幕| 成人国产一区二区三区精品| 一区二区不卡在线播放| 欧美大片一区二区| 99久久精品国产观看| 日韩成人精品在线| 亚洲国产经典视频| 欧美精品 国产精品| 国产精品小仙女| 夜夜嗨av一区二区三区四季av| 日韩美女主播在线视频一区二区三区 | 狠狠狠色丁香婷婷综合久久五月| 中文字幕欧美三区| 91麻豆精品国产无毒不卡在线观看| 国产乱码精品1区2区3区| 亚洲资源在线观看| 国产亚洲欧美日韩俺去了| 色呦呦国产精品| 国产专区欧美精品| 亚洲福利一区二区三区| 亚洲国产高清aⅴ视频| 欧美一区二区三区视频免费播放| 成人高清视频在线| 蜜桃av一区二区| 亚洲美女淫视频| 日本一区二区三区久久久久久久久不 | 亚洲精品在线免费播放| 日本高清无吗v一区| 国产一区视频在线看| 亚洲午夜视频在线| 一色桃子久久精品亚洲| 精品国内二区三区| 69堂成人精品免费视频| 一本大道久久a久久精二百| 久久国产精品免费| 日本系列欧美系列| 亚洲在线中文字幕| 亚洲色图丝袜美腿| 国产午夜一区二区三区| 精品福利一区二区三区免费视频| 欧美日免费三级在线| 不卡av电影在线播放| 国产九色sp调教91| 狠狠色丁香久久婷婷综合丁香| 日本系列欧美系列| 丝袜亚洲另类欧美| 亚洲va在线va天堂| 亚洲视频精选在线| 国产精品欧美综合在线| 欧美经典一区二区| 日韩久久久久久| 91精品国产福利在线观看| 欧美三级在线视频| 欧美视频在线播放| 欧美色精品在线视频| 欧美特级限制片免费在线观看| 色天天综合久久久久综合片| 91麻豆国产精品久久| 色综合婷婷久久| 色噜噜狠狠成人网p站| 色综合久久中文字幕| 91久久一区二区| 在线看不卡av| 欧美日韩国产精选| 69堂精品视频| 欧美大黄免费观看| 精品国产91洋老外米糕| 久久久噜噜噜久久中文字幕色伊伊 | 2021中文字幕一区亚洲| 精品三级在线看| 国产丝袜美腿一区二区三区| 久久久久久久综合| 国产精品人妖ts系列视频| 亚洲色图在线播放| 性感美女极品91精品| 免费成人av资源网| 国产精品一二三区| 成人免费毛片a| 欧美影视一区在线| 91精品国产欧美一区二区18| 亚洲精品在线电影| 1区2区3区精品视频| 亚洲福利视频三区| 狠狠色丁香九九婷婷综合五月| 成人高清伦理免费影院在线观看| 91一区二区三区在线播放| 欧美三级日本三级少妇99| 日韩一级成人av| 国产精品麻豆欧美日韩ww| 亚洲美腿欧美偷拍| 日本女优在线视频一区二区| 国产精品一区三区| 色综合天天视频在线观看| 91精品国产综合久久精品图片| 久久久激情视频| 樱花草国产18久久久久| 美日韩黄色大片| 97精品电影院| 欧美成人r级一区二区三区| 国产精品久久久久婷婷| 美女视频一区二区| 99久久综合狠狠综合久久| 3d动漫精品啪啪一区二区竹菊| 中文一区二区在线观看 | 婷婷六月综合亚洲| 成人污视频在线观看| 欧美片网站yy| 国产精品日韩成人| 老司机午夜精品| 色婷婷综合久久久中文一区二区| 日韩精品一区二区三区在线播放 | 国产精品一区不卡| 欧美性极品少妇| 国产亚洲精品aa| 亚洲成人动漫一区| 94-欧美-setu| 久久久久综合网| 秋霞电影一区二区| 一本一道久久a久久精品综合蜜臀| 8x8x8国产精品| 一二三四社区欧美黄| 成人激情小说乱人伦| 欧美精品一区二区三区四区| 亚洲成人av中文| 一本一道波多野结衣一区二区| 久久久久久久久久久久久女国产乱 | 一本久久a久久免费精品不卡| 久久综合国产精品| 蜜桃在线一区二区三区| 91极品视觉盛宴| 1024国产精品| 盗摄精品av一区二区三区| 日韩精品一区二区三区视频播放| 亚洲国产美女搞黄色| 91美女精品福利| 亚洲欧美在线视频| 成人黄色av网站在线| 中文幕一区二区三区久久蜜桃| 国模冰冰炮一区二区| 精品国产乱码久久久久久久 | 亚洲一区二区欧美日韩| 一本久道久久综合中文字幕| 欧美国产1区2区| 国产一区二区看久久| 久久综合久久99| 久久 天天综合| 精品卡一卡二卡三卡四在线| 强制捆绑调教一区二区| 4438成人网| 精品在线一区二区三区| 欧美成人一区二区三区片免费| 麻豆精品在线视频| 日韩精品中文字幕在线一区| 久久精品国产亚洲a| 精品国产髙清在线看国产毛片| 免费精品99久久国产综合精品| 欧美一区二区在线看| 久久99精品网久久| 国产欧美一区二区三区沐欲| 成人中文字幕合集| 国产精品理论在线观看| 91精品1区2区| 日产精品久久久久久久性色| 日韩欧美国产综合一区| 国产丶欧美丶日本不卡视频| 国产精品私房写真福利视频| 色综合天天综合色综合av | 青青草原综合久久大伊人精品优势| 欧美男生操女生| 国产一区亚洲一区| 最新中文字幕一区二区三区 | 久久蜜桃香蕉精品一区二区三区| 国产成人亚洲综合色影视| 亚洲欧洲精品一区二区三区不卡| 91福利区一区二区三区| 免费成人性网站| 亚洲国产精品精华液ab| 色94色欧美sute亚洲线路一ni| 日韩精品电影一区亚洲| 久久色中文字幕|