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

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

?? testpdma.c

?? dma驅動開發程序
?? C
?? 第 1 頁 / 共 3 頁
字號:

#include <windows.h>
#include <stdio.h>

#define MAX_ERROR_BUFFER    256
#define MAX_DATA_BUFFER     128*1024
#define VALID_READ_SIZE     60*1024

#define FILL_MEMORY_BYTE    0x42

#define LARGE_BUFFER_SIZE       60*1024
#define MEDIUM_BUFFER_SIZE      30*1024
#define SMALL_BUFFER_SIZE       8*1024

#define MAX_CONCURRENT_IO   20
#define DEFAULT_IO_COUNT        10000

typedef struct _BUFFER_INFO {

    OVERLAPPED  Overlapped;     // The OVERLAPPED structure MUST be first in this
                                // structure or the completion port I/O will fail.

    LPVOID      DataBuffer;
    DWORD       Length;
    
} BUFFER_INFO, *PBUFFER_INFO;

#define     FLAG_VERBOSE_MODE   0x0001

#define     FLAG_TEST_SYNC      0x0010
#define     FLAG_TEST_ASYNC     0x0020
#define     FLAG_TESTS_ENABLED  0x00F0

#define     PCI_DEVICE_NAME     "pcidma"

#define     NOTHING

typedef struct _USER_PARMS {
    LONG        LoopCount;
    USHORT      Flags;
    UCHAR       DeviceNumber[MAX_PATH];
} USER_PARMS, *PUSER_PARMS;
      

DWORD
AsyncTests(
    IN LPCTSTR DeviceName,
    IN PUSER_PARMS UserParms
    );
    
VOID
DisplayUsage(
    IN PUCHAR ProgramName
    );
    
DWORD
DoAsyncIo(
    IN HANDLE FileHandle,
    IN PBUFFER_INFO BufferInfo,
    IN USHORT NumberOfBuffers,
    IN PUSER_PARMS UserParms
    );

DWORD
FillInDataStructures(
    IN PBUFFER_INFO BufferInfo,
    IN USHORT NumberOfBuffers,
    IN PUSER_PARMS UserParms
    );

DWORD
NonOverlappedTests(
    IN LPCTSTR DeviceName
    );

VOID
PrintError(
    IN DWORD ErrorCode
    );

DWORD
ReadTest(
    IN HANDLE FileHandle,
    IN LPVOID DataBuffer,
    IN DWORD BufferSize
    );

VOID
ReleaseBuffers(
    IN PBUFFER_INFO BufferInfo,
    IN USHORT NumberOfBuffers
    );

BOOLEAN
VerifyInputParameters(
    IN SHORT ArgC,
    IN PCHAR ArgV[],
    IN PUSER_PARMS UserParms
    );

                                 
DWORD
__cdecl
main(
    int argc,
    char *argv[]
    )
{
    DWORD errorCode;    

    UCHAR deviceName[MAX_PATH];

    USER_PARMS  userParms;
    
    ZeroMemory(&userParms, sizeof(USER_PARMS));
    
    //
    // Verify user input parameters.
    //

    if (!VerifyInputParameters((SHORT)argc,
                               argv,
                               &userParms
                               )) {
    
        return ERROR_INVALID_PARAMETER;    
    }
    
    //
    // Copy the device name into the name buffer.
    //

    strcpy(deviceName, "\\\\.\\");
    strcat(deviceName, PCI_DEVICE_NAME);
    strcat(deviceName, userParms.DeviceNumber);

    printf("Testing device: %s \n", deviceName);
    
    //
    // Process non-overlapped tests.
    //

    if (userParms.Flags & FLAG_TEST_SYNC) {
        
        printf("\n");
        printf("*********************\n");
        printf("* Synchronous tests *\n");
        printf("*********************\n");
        printf("\n");
        
        errorCode = NonOverlappedTests(deviceName);
    
        if (errorCode != NO_ERROR) {
        
            return errorCode;    
        }
    }

    //
    // Process overlapped tests.
    //

    if (userParms.Flags & FLAG_TEST_ASYNC) {
        
        printf("\n");
        printf("**********************\n");
        printf("* Asynchronous tests *\n");
        printf("**********************\n");
        printf("\n");
        
        errorCode = AsyncTests(deviceName,
                               &userParms
                               );
    
        //
        // Fall through...
        //
    }
    
    return errorCode;
        
}   // main



DWORD
AsyncTests(
    IN LPCTSTR DeviceName,
    PUSER_PARMS UserParms
    )
{
    DWORD           errorCode;

    HANDLE          fileHandle;
        
    BUFFER_INFO     bufferInfo[MAX_CONCURRENT_IO];
    
    //
    // Open the device.
    //

    fileHandle = CreateFile(DeviceName,
                            GENERIC_READ,
                            FILE_SHARE_READ | FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            FILE_FLAG_OVERLAPPED,
                            NULL
                            );

    if (fileHandle == INVALID_HANDLE_VALUE) {

        errorCode = GetLastError();
        
        printf("Unable to open device.  Error: %d \n", errorCode);

        PrintError(errorCode);
        
        return errorCode;
    }

    //
    // Fill in data structures.
    //
    
    errorCode = FillInDataStructures(bufferInfo,
                                     MAX_CONCURRENT_IO,
                                     UserParms
                                     );
    
    if (errorCode != NO_ERROR) {
        
        return errorCode;
    }

    //
    // Try some I/O.
    //

    DoAsyncIo(fileHandle,
              bufferInfo,
              MAX_CONCURRENT_IO, 
              UserParms
              );
              
    //
    // Close device handle.
    //

    CloseHandle(fileHandle);

    //
    // Release memory.
    //
    
    ReleaseBuffers(bufferInfo,
                   MAX_CONCURRENT_IO
                   );
                                        
    return NO_ERROR;
    
}   // AsyncTests



VOID
DisplayUsage(
    IN PUCHAR ProgramName
    )
{
    printf("\n");
    printf("Usage:  %s [-?] [[-a | -s] [-d##] [-t##] [-v]]  \n", ProgramName);
    printf("\n");
    printf("  Options: \n");
    printf("\n");
    printf("    -?    Displays this help screen \n");
    printf("    -a    Enable asynchronous tests \n");
    printf("    -d##  Device number, zero-based.  Zero is the default. \n");
    printf("    -s    Enable synchronous tests \n");
    printf("    -t##  Total number of Asynchronous I/Os to test (default = %d) \n",
             DEFAULT_IO_COUNT);
    printf("    -v    Verbose mode \n");
    printf("\n");
    printf("\n");
    printf("  All numbers are assumed decimal. \n");
    printf("\n");


}   // DisplayUsage



DWORD
DoAsyncIo(
    IN HANDLE FileHandle,
    IN PBUFFER_INFO BufferInfo,
    IN USHORT NumberOfBuffers,
    IN PUSER_PARMS UserParms
    )
{
    PBUFFER_INFO tempBufferInfo;
    
    HANDLE  completionPort;
    
    LONG    pendingCount = 0;
    LONG    totalCount = 0;
    
    DWORD   errorCode;
    DWORD   bytesReturned;
    DWORD   keyCompletion;
    
    LPOVERLAPPED  ovCompletion;
                                            
    USHORT i;
    
    BOOLEAN verboseMode;
    
    verboseMode = UserParms->Flags & FLAG_VERBOSE_MODE;
    
    //
    // Create the completion port.
    //
    
    completionPort = CreateIoCompletionPort(FileHandle,
                                            NULL,
                                            0,
                                            1
                                            );
                                    
    if (INVALID_HANDLE_VALUE == completionPort) {
        
        errorCode = GetLastError();
        
        printf("CreateIoCompletionPort failed %d \n", errorCode);
        
        PrintError(errorCode);
        
        return errorCode;
    }
    
    //
    // Fire off the first set of reads.
    //
    
    tempBufferInfo = BufferInfo;
    
    for (i = 0; i < NumberOfBuffers; i++) {
    
        if (!ReadFile(FileHandle,
                      tempBufferInfo->DataBuffer,
                      tempBufferInfo->Length,
                      &bytesReturned,
                      &tempBufferInfo->Overlapped
                      )) {
        
            errorCode = GetLastError();

            if (errorCode == ERROR_IO_PENDING) {
                
                if (verboseMode) {
                    printf("Pending I/O # %d \n", tempBufferInfo->Overlapped.Offset);
                }
                                
                pendingCount++;
                
            } else {
            
                printf("ReadFile for buffer %d failed \n", i);
            }
        
        } else {
        
            printf("ReadFile completed for buffer %d \n", i);
        }
    
        //
        // Point to next buffer.
        //
    
        tempBufferInfo++;
    }

    printf("Start: %d reads pending \n", pendingCount);
    
    //
    // Add the pending count to the total count.
    //
    
    totalCount = pendingCount;

    printf("Entering main pending loop... \n");

    if (UserParms->LoopCount < MAX_CONCURRENT_IO) {
        
        UserParms->LoopCount = DEFAULT_IO_COUNT;
    }
    
    while (totalCount < UserParms->LoopCount) {
        
        //
        // Wait for an I/O to complete.
        //
        
        if (!GetQueuedCompletionStatus(completionPort,
                                       &bytesReturned,
                                       &keyCompletion,
                                       &ovCompletion,
                                       INFINITE
                                       )) {
            

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费不卡视频| 国产精品一区在线观看你懂的| 视频一区国产视频| 国产在线不卡一区| 欧美日韩专区在线| 中文字幕一区日韩精品欧美| 国产综合色视频| 欧美日韩国产精选| 亚洲精品午夜久久久| 国产美女一区二区| 日韩三级精品电影久久久 | 亚洲第一狼人社区| 99视频有精品| 欧美激情中文不卡| 久久99九九99精品| 欧美变态tickling挠脚心| 视频一区视频二区中文| 91国偷自产一区二区三区观看 | 91精品国产免费| 成人app在线观看| 久久先锋影音av鲁色资源 | 国产精品亚洲专一区二区三区| 免费久久99精品国产| 国产精品久久久久久久久快鸭 | 91精品黄色片免费大全| 亚洲精品日产精品乱码不卡| 不卡的看片网站| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美性生活大片视频| 亚洲美女一区二区三区| 99久久精品久久久久久清纯| 国产精品成人免费在线| 91性感美女视频| 亚洲制服丝袜av| 欧美日韩亚洲综合| 日韩二区三区在线观看| 日韩一区二区高清| 麻豆国产一区二区| 精品国产1区二区| 国产精品77777竹菊影视小说| 久久久久久电影| 成人高清视频免费观看| 亚洲三级在线观看| 欧美巨大另类极品videosbest| 日韩黄色一级片| 欧美电视剧在线观看完整版| 国产久卡久卡久卡久卡视频精品| 久久久久久久久久久99999| 国产成a人亚洲精品| 亚洲精品亚洲人成人网 | 自拍偷拍国产精品| 欧美日韩专区在线| 精品一区二区三区视频在线观看| 久久亚洲综合色| 99热在这里有精品免费| 亚洲成人在线免费| 久久亚洲影视婷婷| 972aa.com艺术欧美| 秋霞午夜鲁丝一区二区老狼| 26uuu成人网一区二区三区| av色综合久久天堂av综合| 亚洲二区视频在线| 久久久精品影视| 在线视频一区二区三| 久久精品久久精品| 亚洲欧美电影院| 精品日韩av一区二区| 91视频国产资源| 国模大尺度一区二区三区| 综合亚洲深深色噜噜狠狠网站| 精品卡一卡二卡三卡四在线| 成人一区二区三区视频| 日韩激情一二三区| 久久先锋影音av鲁色资源| 色狠狠av一区二区三区| 韩国av一区二区三区在线观看 | 日韩精品中午字幕| 成人福利视频在线看| 久久蜜臀精品av| 亚洲天堂精品视频| aaa亚洲精品一二三区| 日本在线不卡视频| 亚洲精品亚洲人成人网| 国产清纯美女被跳蛋高潮一区二区久久w| 色悠悠久久综合| 波多野结衣在线一区| 午夜影院久久久| 亚洲免费观看视频| 日本一区二区综合亚洲| 欧美成人欧美edvon| 欧美日韩一本到| 91蜜桃网址入口| 成人一级片网址| 国产精品自拍一区| 麻豆91免费看| 日韩av不卡一区二区| 亚洲成人av福利| 亚洲香肠在线观看| 一区二区中文视频| 国产精品网站导航| 国产午夜精品美女毛片视频| 欧美电影免费提供在线观看| 日韩免费电影一区| 欧美一级免费观看| 宅男噜噜噜66一区二区66| 欧美日韩国产中文| 欧美日韩精品一二三区| 欧美日韩成人在线| 欧美午夜精品久久久久久超碰| 在线视频一区二区免费| 在线观看日韩一区| 欧美日韩精品一区二区三区 | 日韩欧美国产电影| 日韩欧美国产麻豆| 久久色.com| 国产日本欧洲亚洲| 中文字幕国产一区| 亚洲男女毛片无遮挡| 18成人在线视频| 亚洲国产综合视频在线观看| 亚洲在线成人精品| 日韩中文字幕麻豆| 美女脱光内衣内裤视频久久网站| 久久国产精品99久久人人澡| 国产高清视频一区| 成人h动漫精品一区二| 不卡的av电影| 欧美三级一区二区| 日韩视频在线永久播放| 欧美国产精品劲爆| 亚洲伦在线观看| 亚洲成人av在线电影| 精品一区二区三区影院在线午夜| 国产精品一区二区三区乱码| 9人人澡人人爽人人精品| 欧美在线视频不卡| 日韩欧美自拍偷拍| 成人欧美一区二区三区视频网页| 亚洲综合在线视频| 久久精品噜噜噜成人av农村| 豆国产96在线|亚洲| 欧美午夜影院一区| 精品国产乱码久久久久久影片| 中文字幕va一区二区三区| 亚洲一二三区不卡| 国产一级精品在线| 欧美日韩中文精品| 久久久久99精品一区| 亚洲综合一区在线| 国产一区二区91| 欧美日韩精品欧美日韩精品一综合| 欧美www视频| 亚洲伦理在线免费看| 国内精品在线播放| 91免费版pro下载短视频| 精品国产制服丝袜高跟| 一区二区三区产品免费精品久久75| 国内精品久久久久影院薰衣草 | 精品福利av导航| 亚洲久草在线视频| 国产一区二区成人久久免费影院| 欧美色窝79yyyycom| 国产无一区二区| 日本亚洲电影天堂| 欧美中文字幕久久| 国产蜜臀97一区二区三区| 粉嫩aⅴ一区二区三区四区五区| 欧美中文字幕一区二区三区| 国产女主播在线一区二区| 免费人成在线不卡| 在线一区二区观看| 国产精品乱人伦| 黄色成人免费在线| 在线不卡的av| 一区二区三区精品久久久| 风间由美中文字幕在线看视频国产欧美| 在线播放视频一区| 亚洲一区影音先锋| 91小视频在线免费看| 欧美激情综合五月色丁香| 国产一区二区三区在线观看免费 | 中文字幕成人av| 国模娜娜一区二区三区| 日韩视频一区二区在线观看| 性久久久久久久久久久久| 欧美在线观看视频一区二区| 日韩一区在线播放| 99国产精品久久| 亚洲天堂网中文字| 粉嫩av亚洲一区二区图片| 国产亚洲精品免费| 国产精品亚洲综合一区在线观看| 精品国产乱码久久久久久夜甘婷婷| 日韩和欧美一区二区三区| 7777精品伊人久久久大香线蕉 | 亚洲一线二线三线视频| 在线日韩国产精品| 亚洲在线视频一区| 欧美老年两性高潮| 手机精品视频在线观看|