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

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

?? cpipe.hpp

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? HPP
?? 第 1 頁 / 共 3 頁
字號:
//
// 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:  
//     CPipe.hpp
// 
// Abstract: Implements class for managing open pipes for UHCI
//
//                             CPipe (ADT)
//                           /             \
//                  CQueuedPipe (ADT)       CIsochronousPipe
//                /         |       \ 
//              /           |         \
//   CControlPipe    CInterruptPipe    CBulkPipe
// 
// Notes: 
// 

#ifndef __CPIPE_HPP__
#define __CPIPE_HPP__

#include <globals.hpp>
#include <cphysmem.hpp>
#include <pipeabs.hpp>

class CPipe;
class CIsochronousPipe;
class CQueuedPipe;
class CControlPipe;
class CInterruptPipe;
class CBulkPipe;
class CUHCIFrame;
class CUhcd;
struct _UHCD_TD;
struct _UHCD_QH;

//
// Frame List (Section 3.1 of UHCI spec)
//
// number of entries in the frame list - 1024 
#define FRAME_LIST_LENGTH                   DWORD(0x400)
#define FRAME_LIST_LENGTH_MASK              DWORD(0x3FF)
// each of the 1024 entries of the frame list is 32 bits
typedef ULONG FRAME_LIST_POINTER;
// this should come out to be 4Kb, and will be debug checked in the code
#define FRAME_LIST_SIZE_IN_BYTES            DWORD(FRAME_LIST_LENGTH * sizeof(FRAME_LIST_POINTER))
// UHCI spec section 3.1.1 defines the structure of the Frame List Pointer
#define FRAME_LIST_POINTER_MASK             DWORD(0xFFFFFFF0)
#define FRAME_LIST_POINTER_TERMINATE        DWORD(1 << 0)
#define FRAME_LIST_POINTER_VALID            DWORD(0 << 0)
#define FRAME_LIST_POINTER_QH               DWORD(1 << 1)
#define FRAME_LIST_POINTER_TD               DWORD(0 << 1)

//
// Transfer Descriptor for UHCI (Section 3.2 of UHCI spec)
//
typedef ULONG TD_LINK_POINTER_PHYSICAL_ADDRESS;
#define TD_LINK_POINTER_MASK                DWORD(0xFFFFFFF0)
#define TD_LINK_POINTER_TERMINATE           DWORD(1 << 0)
#define TD_LINK_POINTER_VALID               DWORD(0 << 0)
#define TD_LINK_POINTER_QH                  DWORD(1 << 1)
#define TD_LINK_POINTER_TD                  DWORD(0 << 1)
#define TD_LINK_POINTER_DEPTH_FIRST         DWORD(1 << 2)
#define TD_LINK_POINTER_BREADTH_FIRST       DWORD(0 << 2)
typedef ULONG TD_BUFFER_PHYSICAL_ADDRESS;
typedef ULONG TD_PHYSICAL_ADDRESS;

typedef struct _UHCD_TD * PUHCD_TD;
typedef struct _UHCD_TD {
    TD_LINK_POINTER_PHYSICAL_ADDRESS HW_paLink;     // DWORD1 - link used by host controller
                                                    // to find next TD/QH to process
    DWORD    ActualLength:11;         // DWORD2, 0 ..10 - actual amount of data transferred
                                      //                  encoded in (n-1) form
    DWORD    Reserved_1:6;            // DWORD2, 11..16
    DWORD    StatusField:6;           // DWORD2, 17..22 - used to indicate done transfer's status
    DWORD    Active:1;                // DWORD2, 23 - indicates whether transfer is active
    DWORD    InterruptOnComplete:1;   // DWORD2, 24 - indicates to send USB interrupt when finished
    DWORD    Isochronous:1;           // DWORD2, 25 - indicates Isochronous vs Queued transfer
    DWORD    LowSpeedControl:1;       // DWORD2, 26 - indicates transfer to low speed device
    DWORD    ErrorCounter:2;          // DWORD2, 27..28 - this field is decremented every time
                                      //                  there is an error on the transfer
    DWORD    ShortPacketDetect:1;     // DWORD2, 29 - indicates to allow ActualLength < MaxLength
    DWORD    ReservedMBZ:2;           // DWORD2, 30..31
    
    DWORD    PID:8;                   // DWORD3, 0..7 - indicates SETUP/IN/OUT transfer
    DWORD    Address:7;               // DWORD3, 8..14 - address of device to send transfer to
    DWORD    Endpoint:4;              // DWORD3, 15..18 - endpoint on device to send transfer to
    DWORD    DataToggle:1;            // DWORD3, 19 - used to send multipacket transfers
    DWORD    Reserved_2:1;            // DWORD3, 20
    DWORD    MaxLength:11;            // DWORD3, 21..31 - maximum data size to send/receive
    TD_BUFFER_PHYSICAL_ADDRESS      HW_paBuffer;    // DWORD4 - phys addr of data buffer

    // These 4 DWORDs are for software use
    PUHCD_TD                            vaPrevIsochTD;  // prev TD (only for Isoch)
    PUHCD_TD                            vaNextTD;       // next TD
    DWORD                               dwUNUSED1;      // unused for now
    DWORD                               dwUNUSED2;      // unused for now
} UHCD_TD;
// Status bits for StatusField in UHCD_TD
// Reserved bit is taken care of by Reserved_1 above
#define TD_STATUS_NO_ERROR                  DWORD(0)
#define TD_STATUS_BITSTUFF_ERROR            DWORD(1 << 0)
#define TD_STATUS_CRC_TIMEOUT_ERROR         DWORD(1 << 1)
#define TD_STATUS_NAK_RECEIVED              DWORD(1 << 2)
#define TD_STATUS_BABBLE_DETECTED           DWORD(1 << 3)
#define TD_STATUS_DATA_BUFFER_ERROR         DWORD(1 << 4)
#define TD_STATUS_STALLED                   DWORD(1 << 5)
#define TD_STATUS_EVERY_ERROR               DWORD(TD_STATUS_BITSTUFF_ERROR | TD_STATUS_CRC_TIMEOUT_ERROR | TD_STATUS_NAK_RECEIVED | TD_STATUS_BABBLE_DETECTED | TD_STATUS_DATA_BUFFER_ERROR | TD_STATUS_STALLED)
// For ErrorCounter field
#define TD_ERRORCOUNTER_NEVER_INTERRUPT              DWORD(0)
#define TD_ERRORCOUNTER_INTERRUPT_AFTER_ONE          DWORD(1)
#define TD_ERRORCOUNTER_INTERRUPT_AFTER_TWO          DWORD(2)
#define TD_ERRORCOUNTER_INTERRUPT_AFTER_THREE        DWORD(3)
// Active bit has its own field above
// TDs are 32 bytes long
#define TD_REQUIRED_SIZE_IN_BYTES           DWORD(32)
// TDs must be aligned on 16 byte boundaries
#define TD_ALIGNMENT_BOUNDARY               DWORD(16)
#define TD_ENDPOINT_MASK                    DWORD(0xF)
// constants for MaxLength field
#define TD_MAXLENGTH_MAX                    DWORD(0x4FF)
#define TD_MAXLENGTH_INVALID                DWORD(0x7FE)
#define TD_MAXLENGTH_NULL_BUFFER            DWORD(0x7FF)
// constants for ActualLength field (used for SW to maintain data integrity)
#define TD_ACTUALLENGTH_INVALID             TD_MAXLENGTH_INVALID
// constants for the PID (Packet Identifcation) field
// see UHCI spec 3.2.3
#define TD_IN_PID                           DWORD(0x69)
#define TD_OUT_PID                          DWORD(0xE1)
#define TD_SETUP_PID                        DWORD(0x2D)

// Queue Head for UHCI (Section 3.3 of UHCI spec)
typedef ULONG QUEUE_HEAD_LINK_POINTER_PHYSICAL_ADDRESS;
#define QUEUE_HEAD_LINK_POINTER_MASK         DWORD(0xFFFFFFF0)
#define QUEUE_HEAD_LINK_POINTER_TERMINATE    DWORD(1 << 0)
#define QUEUE_HEAD_LINK_POINTER_VALID        DWORD(0 << 0)
#define QUEUE_HEAD_LINK_POINTER_QH           DWORD(1 << 1)
// #define QUEUE_HEAD_LINK_POINTER_TD        DWORD(0 << 1) <- our QH's never point horizontally to TDs
typedef ULONG QUEUE_ELEMENT_LINK_POINTER_PHYSICAL_ADDRESS; 
#define QUEUE_ELEMENT_LINK_POINTER_MASK      DWORD(0xFFFFFFF0)
#define QUEUE_ELEMENT_LINK_POINTER_TERMINATE DWORD(1 << 0)
#define QUEUE_ELEMENT_LINK_POINTER_VALID     DWORD(0 << 0)
// #define QUEUE_ELEMENT_LINK_POINTER_QH     DWORD(1 << 1) <- our QH's never point vertically to QHs
#define QUEUE_ELEMENT_LINK_POINTER_TD        DWORD(0 << 1)

typedef struct _UHCD_QH * PUHCD_QH;
typedef struct _UHCD_QH {
    QUEUE_HEAD_LINK_POINTER_PHYSICAL_ADDRESS    HW_paHLink; // phys addr of next QH
    QUEUE_ELEMENT_LINK_POINTER_PHYSICAL_ADDRESS HW_paVLink; // phys addr of queued TD
    
    // queue heads must be aligned on 16 byte boundaries. We'll make
    // them 32 bytes long. These fields are for SW use only.

    PUHCD_QH                                    vaPrevQH;       // virt addr of prev QH
    PUHCD_QH                                    vaNextQH;       // virt addr of next QH
    PUHCD_TD                                    vaVertTD;       // virt addr of queued TD

    // dwInterruptTree is used for interrupt transfer QHs.
    // For m_interruptQHTree members, which are just placeholders and 
    // do not actually carry transfers, the Load field will describe
    // how much interrupt traffic follows the QH branch. For other 
    // QHs, the BranchIndex field will describe where in the tree the
    // QH is located

    union {
        DWORD                                   Load;
        DWORD                                   BranchIndex;
    }                                           dwInterruptTree;

    DWORD                                       dwUNUSED1;      // unused...
    DWORD                                       dwUNUSED2;      // unused...
} UHCD_QH;
// QHs must be aligned on 16 byte boundaries
#define QH_ALIGNMENT_BOUNDARY               DWORD(16)

// THIS ***MUST*** BE A POWER OF TWO!!! It is the maximum number of milliseconds
// that can go between polling for an interrupt on a device. We use this
// to set up the interrupt queue tree. This tree contains 2*MAX_INTERRUPT_INTERVAL - 1
// nodes, and allows us to specify intervals of 1, 2, 4, 8, ..., MAX_INTERRUPT_INTERVAL
#define UHCD_MAX_INTERRUPT_INTERVAL UCHAR(32)

// structure used for managing busy pipes
typedef struct _PIPE_LIST_ELEMENT {
    CPipe*                      pPipe;
    struct _PIPE_LIST_ELEMENT * pNext;
} PIPE_LIST_ELEMENT, *PPIPE_LIST_ELEMENT;

struct STransfer {
    // These are the IssueTransfer parameters
    UCHAR                     address;
    LPTRANSFER_NOTIFY_ROUTINE lpfnCallback;
    LPVOID                    lpvCallbackParameter;
    DWORD                     dwFlags;
    LPCVOID                   lpvControlHeader;
    DWORD                     paControlHeader;
    DWORD                     dwStartingFrame;
    DWORD                     dwFrames;
    LPCDWORD                  aLengths;
    DWORD                     dwBufferSize;     
    LPVOID                    lpvClientBuffer;
    ULONG                     paClientBuffer;
    LPCVOID                   lpvCancelId;
    LPDWORD                   adwIsochErrors;
    LPDWORD                   adwIsochLengths;
    LPBOOL                    lpfComplete;
    LPDWORD                   lpdwBytesTransferred;
    LPDWORD                   lpdwError;
    // additional parameters/data
    PUCHAR                    vaTDList;         // TD list for the transfer
    USHORT                    numTDsInList;     // # TDs in pTDListHead list
    PUCHAR                    vaActualBuffer;   // virt addr of buffer used by TD list
    ULONG                     paActualBuffer;   // phys addr of buffer used by TD list
    DWORD                     dwCurrentPermissions;
    struct STransfer *        lpNextTransfer;
};
void     InitializeTD( OUT PUHCD_TD const pTD,
                              IN const TD_LINK_POINTER_PHYSICAL_ADDRESS HW_paLink,
                              IN const PUHCD_TD vaNextTD,
                              IN const UCHAR InterruptOnComplete,
                              IN const UCHAR Isochronous,
                              IN const BOOL  LowSpeedControl,
                              IN const DWORD PID,
                              IN const UCHAR Address,
                              IN const UCHAR Endpoint,
                              IN const USHORT DataToggle,
                              IN const DWORD MaxLength,
                              IN const TD_BUFFER_PHYSICAL_ADDRESS HW_paBuffer,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线播放网址| 中文字幕精品—区二区四季| 在线视频你懂得一区二区三区| 久久久久久毛片| 国产成人免费视频网站高清观看视频| 久久久青草青青国产亚洲免观| 国产剧情一区在线| 国产精品久久久久久久第一福利 | 国产成人免费网站| 中文字幕在线观看不卡视频| 91蜜桃视频在线| 亚洲va天堂va国产va久| 欧美精品第1页| 精品系列免费在线观看| 国产精品丝袜91| 一本久道中文字幕精品亚洲嫩| 亚洲成av人片在线| 久久免费看少妇高潮| av在线一区二区三区| 亚洲午夜久久久久久久久电影网| 91精品国产色综合久久| 国产成人在线免费| 一区二区三区四区亚洲| 日韩一区二区三区四区五区六区| 国产毛片精品国产一区二区三区| 亚洲视频小说图片| 日韩免费看的电影| 91视视频在线观看入口直接观看www | 香蕉成人伊视频在线观看| 欧美变态凌虐bdsm| 91免费观看在线| 日韩在线一二三区| 日韩美女啊v在线免费观看| 在线观看91av| 91免费视频网址| 狠狠网亚洲精品| 亚洲男同1069视频| 久久先锋资源网| 欧美日韩三级一区二区| 国产91丝袜在线18| 日韩av在线播放中文字幕| 中文字幕av资源一区| 91精品国产综合久久久久久久久久| 成人小视频在线观看| 日韩av午夜在线观看| 亚洲天堂2014| 国产三级精品视频| 日韩一区二区三区观看| 91福利在线导航| 成人免费看片app下载| 另类小说图片综合网| 亚洲国产一区二区视频| 中文子幕无线码一区tr| 久久午夜国产精品| 555夜色666亚洲国产免| 欧美亚洲一区二区在线| 99久久免费精品高清特色大片| 激情另类小说区图片区视频区| 亚洲成人tv网| 洋洋av久久久久久久一区| 中文字幕亚洲欧美在线不卡| 久久亚洲春色中文字幕久久久| 欧美一区二区三区精品| 欧美日韩免费电影| 欧美日韩中文字幕一区二区| 一本久道久久综合中文字幕| 99久久伊人久久99| 成人丝袜18视频在线观看| 国产一区二区三区视频在线播放| 青青草原综合久久大伊人精品 | 岛国精品在线播放| 国产高清无密码一区二区三区| 久久精品国产99| 欧美a级理论片| 日本一区中文字幕| 日韩成人一级大片| 日本中文字幕一区二区有限公司| 亚洲一卡二卡三卡四卡无卡久久| 尤物在线观看一区| 洋洋av久久久久久久一区| 亚洲欧美日韩精品久久久久| 中文字幕一区二区三区四区不卡| 国产精品久久99| 国产精品国产精品国产专区不蜜| 中文字幕亚洲视频| 亚洲伦理在线精品| 亚洲va欧美va人人爽| 日韩电影网1区2区| 蜜桃传媒麻豆第一区在线观看| 日本aⅴ精品一区二区三区 | 国产激情91久久精品导航| 国产精品一线二线三线精华| 国产精品77777竹菊影视小说| 国产suv一区二区三区88区| 成人动漫一区二区| 在线免费观看日韩欧美| 欧美日本在线视频| 精品国产一区二区三区久久影院 | 6080午夜不卡| 久久亚洲一级片| 18成人在线观看| 日韩中文字幕1| 狠狠色狠狠色综合系列| 国产成人自拍网| 91久久免费观看| 欧美一级一区二区| 中文子幕无线码一区tr| 亚洲综合激情另类小说区| 奇米综合一区二区三区精品视频| 国产在线播放一区二区三区| 99re视频精品| 日韩一区二区电影网| 国产精品欧美综合在线| 亚洲成av人片| 国产精品综合久久| 欧美亚男人的天堂| 久久午夜国产精品| 亚洲成av人片在线| 成人一级片网址| 91精品啪在线观看国产60岁| 欧美激情综合在线| 午夜精品久久久久| 懂色av一区二区三区免费看| 精品视频在线看| 国产视频一区在线播放| 亚洲一二三四久久| 国产精品888| 欧美精品高清视频| 亚洲视频免费看| 国产一区二区三区免费| 欧美日韩成人一区二区| 国产精品久久久久aaaa樱花| 美腿丝袜一区二区三区| 在线免费不卡视频| 国产欧美一区二区在线| 蜜桃在线一区二区三区| 欧美中文字幕一区| 国产精品久久久久桃色tv| 激情综合色综合久久综合| 欧美日韩一区二区三区四区| 中文字幕一区二区三区在线不卡| 精品一区二区日韩| 欧美视频第二页| 亚洲私人影院在线观看| 粉嫩一区二区三区在线看| 日韩欧美高清dvd碟片| 首页亚洲欧美制服丝腿| 日本高清不卡一区| 日韩毛片在线免费观看| 成人精品小蝌蚪| 久久九九全国免费| 极品少妇xxxx精品少妇| 91精品国产综合久久香蕉的特点| 一区二区三区国产精品| 91在线精品一区二区三区| 欧美国产日本韩| 国产成人精品亚洲日本在线桃色| 日韩丝袜情趣美女图片| 日韩激情一二三区| 欧美福利一区二区| 午夜视频久久久久久| 欧美伦理视频网站| 亚洲v中文字幕| 欧美精选午夜久久久乱码6080| 亚洲国产视频a| 欧美日韩中文精品| 日韩avvvv在线播放| 欧美区视频在线观看| 视频一区二区中文字幕| 3751色影院一区二区三区| 午夜不卡av免费| 欧美精品久久99| 美女在线一区二区| 2021久久国产精品不只是精品| 国产一区二区三区黄视频| 久久久久国产精品麻豆ai换脸| 国产成人在线免费观看| 中文字幕一区二区三区视频| 99久久久无码国产精品| 国产.欧美.日韩| 亚洲国产成人在线| 99re8在线精品视频免费播放| 亚洲男人的天堂在线观看| 在线免费av一区| 日本免费新一区视频| 精品国产凹凸成av人导航| 丁香六月综合激情| 亚洲免费观看高清完整| 欧美精品色综合| 紧缚奴在线一区二区三区| 国产精品你懂的在线| 欧美制服丝袜第一页| 麻豆精品一区二区综合av| 国产亚洲一区字幕| 在线欧美日韩国产| 久久成人免费电影| 亚洲视频一区在线| 欧美一三区三区四区免费在线看| 国产精品自拍三区| 亚洲在线观看免费|