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

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

?? atapiio.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//

#include <diskmain.h>

// ----------------------------------------------------------------------------
// Function: SendIOCommand
//     Issue I/O command
//
// Parameters:
//     pId -
//     dwNumberOfSectors -
//     bCmd -
// ----------------------------------------------------------------------------

BOOL
CDisk::SendIOCommand(
    DWORD dwStartSector,
    DWORD dwNumberOfSectors,
    BYTE bCmd
    )
{
    DEBUGMSG(ZONE_IO, (TEXT(
        "Atapi!CDisk::SendIOCommand> sector(%d), sectors left(%x), command(%x)\r\n"
        ), dwStartSector,dwNumberOfSectors,bCmd));

    if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_IOCOMMAND, &bCmd, sizeof(bCmd), 0, CELZONE_ALWAYSON, 0, FALSE);

    SelectDevice();

    if (WaitOnBusy(FALSE)) {
        DEBUGMSG(ZONE_IO, (TEXT(
            "Atapi!CDisk::SendIOCommand> Failed to send command; status(%x), error(%x)\r\n"
            ), GetAltStatus(),GetError()));
        return FALSE;
    }

    if (m_fUseLBA48) {
        ASSERT(dwNumberOfSectors <= MAX_SECT_PER_EXT_COMMAND);
        // to transfer 65536 sectors, set number of sectors to 0
        if (dwNumberOfSectors == MAX_SECT_PER_EXT_COMMAND) {
            dwNumberOfSectors = 0;
        }

        WriteSectorCount((BYTE)(dwNumberOfSectors >> 8));   // Sector Count 15:8
        WriteSectorCount((BYTE)(dwNumberOfSectors));        // Sector Count 7:0

        // CE supports only 32-bit LBA as of now.  Therefore, clear the upper 16 bits of LBA.
        WriteHighCount(0);    // LBA 47:40
        WriteLowCount(0);     // LBA 39:32
        WriteSectorNumber((BYTE)(dwStartSector >> 24));   // LBA 31:24
        WriteHighCount((BYTE)(dwStartSector >> 16));  // LBA 23:16
        WriteLowCount((BYTE)(dwStartSector >> 8));    // LBA 15:8
        WriteSectorNumber((BYTE)dwStartSector);           // LBA 7:0
        WriteDriveHeadReg( ATA_HEAD_LBA_MODE | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2));
    }
    else {
        ASSERT(dwNumberOfSectors <= MAX_SECT_PER_COMMAND);
        // to transfer 256 sectors, set number of sectors to 0
        if (dwNumberOfSectors == MAX_SECT_PER_COMMAND) {
            dwNumberOfSectors = 0;
        }

        WriteSectorCount((BYTE)dwNumberOfSectors);
        if (m_fLBAMode == TRUE) {
            ASSERT((dwStartSector >> 28) == 0);
            WriteSectorNumber( (BYTE)dwStartSector);
            WriteLowCount((BYTE)(dwStartSector >> 8));
            WriteHighCount((BYTE)(dwStartSector >> 16));
            WriteDriveHeadReg((BYTE)((dwStartSector >> 24) | ATA_HEAD_LBA_MODE) | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2));
        }
        else {
            DWORD dwSectors = m_DiskInfo.di_sectors;
            DWORD dwHeads = m_DiskInfo.di_heads;
            WriteSectorNumber((BYTE)((dwStartSector % dwSectors) + 1));
            WriteLowCount((BYTE) (dwStartSector /(dwSectors*dwHeads)));
            WriteHighCount((BYTE)((dwStartSector /(dwSectors*dwHeads)) >> 8));
            WriteDriveHeadReg((BYTE)(((dwStartSector/dwSectors)% dwHeads) | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2)));
        }
    }

    WriteCommand(bCmd);

    return (TRUE);
}

// ----------------------------------------------------------------------------
// Function: WaitOnBusy
//     Wait for BSY=0
//
// Parameters:
//     fBase -
// ----------------------------------------------------------------------------

BYTE
CDisk::WaitOnBusy(
    BOOL fBase
    )
{
    DWORD i, j;
    BYTE bStatus = 0;
    for (i = 0; i < m_dwWaitCheckIter; i++) {
        for (j = 0; j < m_dwWaitSampleTimes; j++)  {
            bStatus = fBase ? GetBaseStatus() : GetAltStatus();
            if (!(bStatus & ATA_STATUS_BUSY)) {
                return bStatus & (ATA_STATUS_ERROR |ATA_STATUS_BUSY);
            }
        }
       StallExecution(m_dwWaitStallTime);
    }
    return bStatus & (ATA_STATUS_ERROR |ATA_STATUS_BUSY);
}

// ----------------------------------------------------------------------------
// Function: WaitForDisc
//     Generic wait routine; wait for @bStatusType
//
// Parameters:
//     bStatusType -
//     dwTimeOut -
//     dwPeriod -
// ----------------------------------------------------------------------------

BOOL
CDisk::WaitForDisc(
    BYTE bStatusType,
    DWORD dwTimeOut,
    DWORD dwPeriod
    )
{
    BYTE bStatusRead = 0;

    if (dwPeriod == 0) {
        dwPeriod = dwTimeOut;
    }

    while( TRUE)  {
        bStatusRead = GetAltStatus();
        switch (bStatusType) {
            case WAIT_TYPE_BUSY:
                if (bStatusRead & ATA_STATUS_BUSY) {
                    DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_BUSY\r\n")));
                    goto ExitDone;
                }
                break;
            case WAIT_TYPE_NOT_BUSY:
                if (!(bStatusRead & ATA_STATUS_BUSY)) {
                    DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_NOT_BUSY\r\n")));
                    goto ExitDone;
                }
                break;
            case WAIT_TYPE_READY:
                if (bStatusRead & ATA_STATUS_READY) {
                    DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_READY\r\n")));
                    StallExecution(100);
                    goto ExitDone;
                }
                break;
            case WAIT_TYPE_DRQ:
                if (bStatusRead & ATA_STATUS_DATA_REQ) {
                    DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_DRQ\r\n")));
                    goto ExitDone;
                }
                break;
            case WAIT_TYPE_NOT_DRQ:
                if (!(bStatusRead & ATA_STATUS_DATA_REQ)) {
                    DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_NOT_DRQ\r\n")));
                    goto ExitDone;
                }
                break;
            case WAIT_TYPE_ERROR:
                if (bStatusRead & ATA_STATUS_ERROR) {
                    DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_ERROR\r\n")));
                    goto ExitDone;
                }
                break;
        }
        if ((int)dwTimeOut > 0) {
            StallExecution(dwPeriod);
            dwTimeOut -= dwPeriod;
        }
        else {
            DEBUGMSG(ZONE_ERROR, (TEXT(
                "Atapi!CDisk::WaitForDisc> timeout; bStatusType(%d); status(%02X)\r\n"
                ), bStatusType, bStatusRead));
            return ERROR_GEN_FAILURE;
        }
    }
ExitDone:
    return ERROR_SUCCESS;
}

// ----------------------------------------------------------------------------
// Function: WaitForDRQ
//     Wait for DRQ=1 (and device ready to transfer) or timeout
//
// Parameters:
//     None
// ----------------------------------------------------------------------------

BOOL
CDisk::WaitForDRQ(
    )
{
    DWORD i,j;
    BYTE bStatus = 0;

    if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_WAITDRQ, NULL, 0, 0, CELZONE_ALWAYSON, 0, FALSE);

    for (i = 0; i < m_dwWaitCheckIter; i++) {
        for (j = 0; j < m_dwWaitSampleTimes; j++) {
            bStatus = GetAltStatus() & (ATA_STATUS_BUSY|ATA_STATUS_DATA_REQ);
            if ((bStatus & ATA_STATUS_BUSY) == 0) {
                if (bStatus & ATA_STATUS_DATA_REQ){
                    if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);
                    return TRUE;
                }
            }
            StallExecution(m_dwWaitStallTime);
        }
        DEBUGMSG(ZONE_WARNING, (TEXT(
            "Atapi!CDisk::WaitForDRQ> status(%02X), error(%02X), reason(%02X)\r\n"
            ), GetAltStatus(), GetError(), GetReason()));
    }

    if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);

    return (bStatus == ATA_STATUS_DATA_REQ);
}

// ----------------------------------------------------------------------------
// Function: CheckIntrState
//     Return interrupt reason/status

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品欧美久久久久久动漫| 亚洲一区二区美女| 亚洲精品福利视频网站| 日本视频免费一区| 91原创在线视频| 精品久久久久久无| 三级一区在线视频先锋| 99在线精品一区二区三区| 欧美一级夜夜爽| 亚洲在线免费播放| 99国产精品久久久久| 精品久久人人做人人爰| 午夜精品福利一区二区三区av | 加勒比av一区二区| 欧美日韩一区二区三区在线| 欧美激情在线免费观看| 日本亚洲三级在线| 欧美日本乱大交xxxxx| 亚洲视频网在线直播| 国产白丝网站精品污在线入口| 在线91免费看| 偷拍亚洲欧洲综合| 在线看日本不卡| 亚洲免费观看在线观看| 成人av在线一区二区| 久久久另类综合| 国产精品亚洲成人| 国产色91在线| 国产91清纯白嫩初高中在线观看| www国产亚洲精品久久麻豆| 欧美aaaaaa午夜精品| 555www色欧美视频| 蜜臀va亚洲va欧美va天堂| 欧美酷刑日本凌虐凌虐| 五月天婷婷综合| 欧美精品自拍偷拍| 日韩1区2区日韩1区2区| 日韩片之四级片| 久久99精品久久久久婷婷| 精品国产亚洲一区二区三区在线观看| 免费精品99久久国产综合精品| 91精品国产手机| 国产在线播精品第三| 国产日产欧产精品推荐色| 播五月开心婷婷综合| 中文字幕欧美一区| 色天天综合色天天久久| 偷拍自拍另类欧美| 精品免费国产二区三区| 国产成人精品免费一区二区| 中文字幕中文乱码欧美一区二区 | 久久精品一区四区| 成人性生交大片| 一区二区三区丝袜| 欧美精品丝袜久久久中文字幕| 久久国产精品一区二区| 欧美韩日一区二区三区| 色成年激情久久综合| 亚洲不卡在线观看| 久久夜色精品国产噜噜av| jlzzjlzz亚洲女人18| 亚洲国产精品综合小说图片区| 日韩欧美一区二区免费| 成人禁用看黄a在线| 亚洲成人你懂的| 久久奇米777| 在线日韩一区二区| 精品一区二区在线视频| 亚洲欧美色综合| 欧美一激情一区二区三区| 国产成人综合在线观看| 亚洲va韩国va欧美va| 国产亚洲欧美中文| 在线观看一区日韩| 国产一区二区三区免费看| 怡红院av一区二区三区| 2017欧美狠狠色| 欧美性猛交xxxx乱大交退制版| 国产一区二区久久| 五月天亚洲精品| 国产精品久久久久久亚洲伦| 91麻豆精品国产91久久久久久| 成人激情视频网站| 老色鬼精品视频在线观看播放| 国产精品国产三级国产有无不卡| 欧美一区二区视频观看视频| 99久久精品国产精品久久| 久久国产日韩欧美精品| 亚洲电影第三页| 国产精品国产自产拍在线| 6080日韩午夜伦伦午夜伦| 91麻豆福利精品推荐| 国产精品中文字幕一区二区三区| 亚洲国产日日夜夜| 1区2区3区欧美| 国产欧美视频一区二区| 日韩欧美国产综合一区| 欧美午夜精品一区二区三区| 99这里只有久久精品视频| 国产成人精品午夜视频免费| 久久精品国产亚洲高清剧情介绍| 亚洲国产美女搞黄色| 亚洲欧洲色图综合| 国产农村妇女精品| 久久蜜桃av一区精品变态类天堂 | 日本美女一区二区| 亚洲国产va精品久久久不卡综合| |精品福利一区二区三区| 日本一区二区三区免费乱视频| 精品久久久久香蕉网| 精品伦理精品一区| 欧美一区二区大片| 制服.丝袜.亚洲.另类.中文| 欧美日韩国产综合久久| 欧美色视频一区| 欧美日韩一区二区在线观看视频 | 亚洲精品v日韩精品| 亚洲啪啪综合av一区二区三区| 自拍av一区二区三区| 国产午夜精品一区二区三区嫩草| 精品国产乱码久久久久久夜甘婷婷| 91精品国产综合久久国产大片| 欧美偷拍一区二区| 欧美日韩久久久一区| 欧美一区二区在线看| 欧美va亚洲va| 国产无人区一区二区三区| 中文字幕av不卡| 亚洲色图.com| 日韩福利视频网| 老司机精品视频线观看86| 国产一区二区三区四| www.激情成人| 欧美日韩在线播| 日韩精品专区在线影院重磅| 久久免费午夜影院| 中文字幕在线播放不卡一区| 亚洲另类春色国产| 日本不卡不码高清免费观看| 国产一区二三区好的| 成人性生交大片免费看中文| 色播五月激情综合网| 日韩午夜电影av| 中文字幕av一区二区三区免费看 | 欧美国产精品劲爆| 亚洲欧美自拍偷拍色图| 亚洲成人一区在线| 精品影院一区二区久久久| 国产成人福利片| 欧亚一区二区三区| 欧美mv和日韩mv的网站| 国产精品乱码一区二区三区软件| 一区二区三区波多野结衣在线观看| 日韩黄色小视频| www.欧美.com| 日韩免费电影一区| 日韩毛片在线免费观看| 青青草97国产精品免费观看| 成人蜜臀av电影| 欧美一卡二卡在线| 亚洲精品视频免费看| 久久精品国产亚洲a| 在线亚洲一区二区| 久久久不卡网国产精品二区| 一区二区三国产精华液| 国产精品夜夜爽| 欧美日韩国产系列| 国产精品久久久久久久久免费相片 | 亚洲视频图片小说| 激情综合色播五月| 欧美性极品少妇| 久久久久久97三级| 日产国产欧美视频一区精品 | 国产成人免费视频| 91精品国产色综合久久不卡电影| 中文字幕视频一区| 粉嫩高潮美女一区二区三区| 91麻豆精品国产91久久久使用方法| 日韩美女久久久| 成人动漫精品一区二区| 久久久久久久久久电影| 日本成人在线网站| 欧美美女直播网站| 夜夜夜精品看看| gogogo免费视频观看亚洲一| 久久奇米777| 国产又黄又大久久| 欧美www视频| 久久不见久久见中文字幕免费| 欧美日韩精品久久久| 一区二区三区日韩精品视频| 99在线热播精品免费| 国产精品久久毛片| 成人国产精品视频| 久久精品亚洲乱码伦伦中文 | 日本中文字幕一区| 欧美日韩专区在线| 亚洲成av人片一区二区三区| 在线影视一区二区三区| 亚洲免费在线视频|