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

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

?? cdio.cpp

?? WinCE5.0BSP for Renesas SH7770
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

    WriteSectorCount(0);
    
    WriteSectorNumber(0);


    // Set the byte tranfer count       
    if (wCount) {
        WriteLowCount((BYTE)(0xff & wCount));
        WriteHighCount((BYTE)(0xff & (wCount >> 8)));    
    } else {
        WriteLowCount(0xFE);
        WriteHighCount(0xFF);    
    }

    
    // 
    // Set PIO or DMA Mode as specified in bFlags. 0 = PIO, 1 = DMA
    //
    WriteFeature(fDMA ? 0x1 : 0x0);

    WaitForDisc( WAIT_TYPE_NOT_BUSY, 20);

    // Write ATAPI into  command register

    SelectDevice();
    
    WriteCommand(ATAPI_CMD_COMMAND); 

    WaitForDisc( WAIT_TYPE_NOT_BUSY, 20);
    //
    // Check how device is reporting CPU attention: DRQ or INTRQ?
    // INTRQ within 10 ms!!!
    //  
    if (m_fInterruptSupported && IsDRQTypeIRQ())
    {   
        //  ATA_INTR_CMD is expected
        //
        if (!WaitForInterrupt(m_dwDiskIoTimeOut))
        {
            DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiSendCommand - Wait for ATA_INTR_CMD Interrupt (DevId %x) \r\n"), m_dwDeviceId));
            return FALSE;  
        }   
    }
    // 
    // Device will assert DRQ  within (50us or 3ms) if no interrupt id used
    // Wait for not BSY and DRQ
            

    if (!WaitForDRQ())
    {
        DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPISHX:AtapiSendCommand 1 - ATAWaitForDisc failed with: %x (DevId %x)\r\n"), GetError(), m_dwDeviceId));
        return FALSE;
        
    }
        
    // Write the ATAPI Command Packet.

    WriteWordBuffer( (LPWORD)pCmdPkt,GetPacketSize()/sizeof(WORD));

    return TRUE;
}


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

BOOL CSHXDiskAndCD::AtapiReceiveData(PSGX_BUF pSgBuf, DWORD dwSgCount,LPDWORD pdwBytesRead)
{
    DWORD       dwSgLeft = dwSgCount;
    DWORD       dwTransferCount = 0;
    PSGX_BUF    pCurrentSegment = NULL;
    DWORD       dwReadCount = 0;
    DWORD       dwThisCount = 0;
    BYTE        *pCurrentBuffer = NULL;
    DWORD       dwLen = 0;

    DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Entered SgCount=%ld.\r\n"), dwSgCount));

    if (ERROR_SUCCESS != WaitForDisc( WAIT_TYPE_READY, 5000, 100)) 
        return FALSE;

    pCurrentSegment = pSgBuf;

    // Illegal arguments
    if (!pCurrentSegment && dwSgCount > 0) {
        DEBUGMSG(ZONE_ERROR, (TEXT(
            "Atapi!CSHXDiskAndCD::AtapiReceiveData> pSgBuf null\r\n"
            )));
        return ERROR_INVALID_PARAMETER;
    }

    // The TEST UNIT READY command processor will call this with a null scatter/gather
    // buffer and a null scatter/gather buffer count--which is valid.  We only
    // want to map the caller buffer if the buffer and count are non-null.
    if (pCurrentSegment && dwSgCount > 0) {
        // map address and check for security violation
        pCurrentBuffer = (LPBYTE)MapCallerPtr((LPVOID)pCurrentSegment->sb_buf, pCurrentSegment->sb_len);
        if (pCurrentSegment->sb_buf != NULL && pCurrentBuffer == NULL) {
            // security violation
            DEBUGMSG(ZONE_ERROR, (TEXT(
                "Atapi!CSHXDiskAndCD::AtapiReceiveData> Failed to map pointer to caller\r\n"
                )));
            return ERROR_INVALID_PARAMETER;
        }
        dwLen = pCurrentSegment->sb_len;
    }

    m_wNextByte = 0xFFFF; // There is no byte left from the previous transaction.
    
    for(;;) {   
        if (m_fInterruptSupported) {   
            // 
            //  Waiting for ATA_INTR_READ or ATA_INTR_WRITE  or ATA_INTR_READY
            //
            if (!WaitForInterrupt(m_dwDiskIoTimeOut)) {
                DEBUGMSG(ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Wait for ATA_INTR_READ failed (DevId %x) \r\n"), m_dwDeviceId));
                return FALSE;
            }
            WORD wState = CheckIntrState();
            //
            // Return Error if not IO Interrupt
            //
            if ((wState ==  ATA_INTR_ERROR) || (GetAltStatus() & ATA_STATUS_ERROR))
            {   
                DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Wait for ATA_INTR_READ failed (DevId %x) \r\n"), m_dwDeviceId));
                return FALSE;
            
            }
            if (wState ==  ATA_INTR_READY)
            {
                DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Exiting with Interrupt Ready signal Device=%ld\r\n"), m_dwDeviceId));
                return TRUE;
            }
        
            
        };
        //
        // Wait until device is ready for  data transfer.
        //
        if (!WaitForDRQ()) 
        {
            DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData Failed at WaitForDRQ Status=%02X Error=%02X Deivce=%ld\r\n"), GetAltStatus(), GetError(), m_dwDeviceId));
            return(FALSE);
        }
    
        //
        //  Read Transfer Counter set by Device.
        //
        dwTransferCount = GetCount();

        DEBUGMSG (ZONE_CDROM | ZONE_IO, (TEXT(">>>Read Transfer Count : %x  SG=%x \r\n"),dwTransferCount,dwSgLeft));

        while ((dwSgLeft>0) && (dwTransferCount>0))
        {   
            dwThisCount = min(dwTransferCount, dwLen);
            
            if (pCurrentBuffer) {
                ReadBuffer(pCurrentBuffer,dwThisCount);
                dwTransferCount -= dwThisCount;
                dwReadCount += dwThisCount;
            }
            pCurrentBuffer += dwThisCount;
            dwLen -= dwThisCount;

            if (dwLen == 0) {
                // Go to the next SG
                dwSgLeft--;           
                pCurrentSegment++;
                if (pCurrentSegment) {
                    dwLen = pCurrentSegment->sb_len;
                    // map address and check for security violation
                    pCurrentBuffer = (LPBYTE)MapCallerPtr((LPVOID)pCurrentSegment->sb_buf, pCurrentSegment->sb_len);
                    if (pCurrentSegment->sb_buf != NULL && pCurrentBuffer == NULL) {
                        // security violation
                        DEBUGMSG(ZONE_ERROR, (TEXT(
                            "Atapi!CSHXDiskAndCD::AtapiReceiveData> Failed to map pointer to caller\r\n"
                            )));
                        return ERROR_ACCESS_DENIED;
                    }
                }
            }

        } // End of while loop
    
        // Discard the rest of data if left.

        while (dwTransferCount > 0) 
        {
            (void) ReadWord();
            dwTransferCount-=2 ;          
        }
        if (pdwBytesRead)
            *pdwBytesRead = dwReadCount;
        if (!dwSgLeft)
            break;
    }
    return TRUE;
} 

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
BOOL CSHXDiskAndCD::AtapiSendData(PSGX_BUF pSgBuf, DWORD dwSgCount,LPDWORD pdwBytesWrite)
{
    DWORD       dwSgLeft = dwSgCount;
    DWORD       dwTransferCount;
    PSGX_BUF     pCurrentSegment;
    DWORD       dwWriteCount = 0;
    DWORD       dwThisCount;
    BYTE        *pCurrentBuffer=NULL;

    DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Entered SgCount=%ld.\r\n"), dwSgCount));

    pCurrentSegment = pSgBuf;

    m_wNextByte = 0xFFFF; // There is no byte left from the previous transaction.
    
    for(;;) {   
        if (m_fInterruptSupported) {   
            // 
            //  Waiting for ATA_INTR_READ or ATA_INTR_WRITE  or ATA_INTR_READY
            //
            if (!WaitForInterrupt(m_dwDiskIoTimeOut)) {
                DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("ATAPI:AtapiReceiveData - Wait for ATA_INTR_READ failed (DevId %x) \r\n"), m_dwDeviceId));
                return FALSE;
            }
            WORD wState = CheckIntrState();
            //
            // Return Error if not IO Interrupt
            //
            if (wState ==  ATA_INTR_ERROR)
            {   
                DEBUGMSG( ZONE_IO | ZONE_ERROR | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Wait for ATA_INTR_READ failed (DevId %x) \r\n"), m_dwDeviceId));
                return FALSE;
            
            }
            if (wState ==  ATA_INTR_READY)
            {
                DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Exiting with Interrupt Ready signal Device=%ld\r\n"), m_dwDeviceId));
                return TRUE;
            }
        };
        //
        // Wait until device is ready for  data transfer.
        //
        if (!WaitForDRQ()) 
        {
            DEBUGMSG( ZONE_IO | ZONE_ERROR | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData Failed at WaitForDRQ Status=%02X Error=%02X Deivce=%ld\r\n"), GetAltStatus(), GetError(), m_dwDeviceId));
            return(FALSE);
        }
    
        //
        //  Read Transfer Counter set by Device.
        //
        dwTransferCount = GetCount();

        DEBUGMSG (ZONE_CDROM | ZONE_IO, (TEXT(">>>Read Transfer Count : %x  SG=%x \r\n"),dwTransferCount,dwSgLeft));

        while ((dwSgLeft>0) && (dwTransferCount>0))
        {   
            dwThisCount = min(dwTransferCount, pCurrentSegment->sb_len);
            
            if (pCurrentSegment->sb_buf) {
                // map address and check for security violation
                pCurrentBuffer = (LPBYTE)MapCallerPtr((LPVOID)pCurrentSegment->sb_buf, pCurrentSegment->sb_len);
                if (pCurrentSegment->sb_buf != NULL && pCurrentBuffer == NULL) {
                    // security violation
                    DEBUGMSG(ZONE_ERROR, (TEXT(
                        "Atapi!CSHXDiskAndCD::AtapiSendData> Failed to map pointer to caller\r\n"
                        )));
                    return ERROR_ACCESS_DENIED;
                }
            }
        
            if (pCurrentBuffer)
            {
                WriteBuffer(pCurrentBuffer,dwThisCount);
                dwTransferCount -= dwThisCount;
                dwWriteCount += dwThisCount;
            }
            pCurrentSegment->sb_len -=dwThisCount;
            pCurrentSegment->sb_buf +=dwThisCount;

            if (pCurrentSegment->sb_len == 0)
            {
                // Go to the next SG
                dwSgLeft--;           
                pCurrentSegment++;
            }

        } // End of while loop
    
        if (pdwBytesWrite)
            *pdwBytesWrite = dwWriteCount;
        if (!dwSgLeft)
            break;
    }
    return TRUE;
} 


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

BOOL CSHXDiskAndCD::AtapiIsUnitReady(PIOREQ pIOReq)
{
    ATAPI_COMMAND_PACKET    CmdPkt;
    DWORD dwRet;
    BOOL fRet = TRUE;
    if (!IsRemoveableDevice())
        return(TRUE);
    memset(&CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_TEST_READY;
    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData( NULL, 0, &dwRet)) {
            fRet = FALSE;
        }
    } else {
         fRet = FALSE;
    }
    if ( pIOReq && pIOReq->pInBuf)
    {
        ((CDROM_TESTUNITREADY *)pIOReq->pInBuf)->bUnitReady = fRet;
    }    
    if ( pIOReq && pIOReq->pOutBuf)
    {
        ((CDROM_TESTUNITREADY *)pIOReq->pOutBuf)->bUnitReady = fRet;
    }    
    if (!fRet) {
        DEBUGMSG(ZONE_CDROM, (TEXT("ATAPI:AtapiIsUnitReady Status=%02X Error=%02X Reason=%02X\r\n"), GetAltStatus(), GetError(), GetReason()));
    }       

    return fRet;
}

//---------------------------------------------------------------------------
//
//      function: AtaGetSenseInfo
//
//      synopsis: Issue a request sense command to get additional error data
//
//              ENTRY
//
//              EXIT
//
//                      Failure
//                              Returns an extended error code.
//
//-----------------------------------------------------------------------------

BOOL CSHXDiskAndCD::AtapiGetSenseInfo(CD_SENSE_DATA *pSenseData)
{
    ATAPI_COMMAND_PACKET    CmdPkt;
    SGX_BUF SgBuf;
    DWORD dwRet;
    
    memset(&CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_REQUEST_SENSE;
    CmdPkt.Byte_4 = (BYTE)sizeof(CD_SENSE_DATA);
    
    SgBuf.sb_len = sizeof(CD_SENSE_DATA);
    SgBuf.sb_buf = (PBYTE) pSenseData;
    
    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("AtaGetSenseInfo Failed!!!\r\n")));
            return FALSE;
        }
    } else {
         return FALSE;
    }
    // Issue the request sense command
        
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("Sense Info\r\n")));
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("   Error Code = 0x%2.2X, Segment Number = %d, Sense Key = 0x%2.2X\r\n"), pSenseData->sd_ErrCode, pSenseData->sd_SegNum, pSenseData->sd_ILI_Key));
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("   Information = 0x%2.2X 0x%2.2X 0x%2.2X 0x%2.2X\r\n"), pSenseData->sd_Info[0], pSenseData->sd_Info[1], pSenseData->sd_Info[2], pSenseData->sd_Info[3]));
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("   Additional Sense Length = %d\r\n"), pSenseData->sd_Length));
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("   Command Specific Information = 0x%2.2X 0x%2.2X 0x%2.2X 0x%2.2X\r\n"),pSenseData->sd_CmdInfo[0], pSenseData->sd_CmdInfo[1], pSenseData->sd_CmdInfo[2], pSenseData->sd_CmdInfo[3]));
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("   ASC = 0x%2.2X, ASCQ = 0x%2.2X, FRUC = 0x%2.2X\r\n"), pSenseData->sd_SenseCode, pSenseData->sd_Qualifier, pSenseData->sd_UnitCode));
    DEBUGMSG( ZONE_CDROM | ZONE_IO, (TEXT("   Sense Key Specfic = 0x%2.2X 0x%2.2X 0x%2.2X\r\n"), pSenseData->sd_Key1, pSenseData->sd_Key2, pSenseData->sd_Key3));
    
    return TRUE;
}


//
//  This function send INQUIRY command to Atapi Device and  
//  process reply  corresponding reply.
//

BOOL CSHXDiskAndCD::AtapiIssueInquiry(INQUIRY_DATA *pInqData)
{
    ATAPI_COMMAND_PACKET    CmdPkt;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re亚洲国产精品| 亚洲免费三区一区二区| 欧美一区二区三区白人| 色琪琪一区二区三区亚洲区| 成人美女视频在线看| 国产成人免费视频网站| 国产不卡视频在线播放| 成人在线综合网| 成人激情校园春色| 99久久99久久久精品齐齐| 色综合久久久久网| 欧美性色综合网| 欧美精品久久99| 日韩亚洲欧美一区| 精品国产一区久久| 中文字幕成人在线观看| 国产精品水嫩水嫩| 亚洲黄网站在线观看| 一区二区三区 在线观看视频| 亚洲夂夂婷婷色拍ww47| 午夜欧美电影在线观看| 日本不卡免费在线视频| 国产露脸91国语对白| 成人综合婷婷国产精品久久 | 日韩电影在线看| 麻豆精品一二三| 国产成人av影院| 日本高清不卡在线观看| 8v天堂国产在线一区二区| 日韩女优av电影| 国产精品久久久久久一区二区三区 | 麻豆国产精品777777在线| 国产乱码字幕精品高清av| 成人av在线播放网址| 欧美在线一二三四区| 精品少妇一区二区三区视频免付费| 26uuu色噜噜精品一区二区| 国产嫩草影院久久久久| 一区二区三区高清在线| 欧美a级一区二区| www.综合网.com| 欧美军同video69gay| 久久伊人中文字幕| 综合婷婷亚洲小说| 欧美体内she精高潮| 精品精品国产高清a毛片牛牛| 日本韩国视频一区二区| 欧美一区二区三区免费在线看| 久久久精品蜜桃| 一区二区三区日本| 精品一区二区三区免费视频| 99九九99九九九视频精品| 6080日韩午夜伦伦午夜伦| 国产女人水真多18毛片18精品视频| 亚洲狠狠爱一区二区三区| 国产精品综合视频| 欧美体内she精视频| 久久久久久久综合色一本| 亚洲一区二区精品视频| 国产精品538一区二区在线| 欧美日韩中文字幕一区| 欧美国产激情一区二区三区蜜月| 五月天亚洲婷婷| 成人97人人超碰人人99| 精品国产一区二区在线观看| 一区二区三区不卡视频| 成人午夜免费电影| 欧美电影免费观看高清完整版| 夜夜嗨av一区二区三区中文字幕| 国产精品一级片在线观看| 欧美老女人第四色| 亚洲精品视频一区| 成人午夜在线播放| 精品福利一区二区三区免费视频| 亚洲国产毛片aaaaa无费看 | 丁香五精品蜜臀久久久久99网站| 91精品国产入口在线| 亚洲麻豆国产自偷在线| 盗摄精品av一区二区三区| 精品久久久久久亚洲综合网| 亚洲高清在线精品| 色老综合老女人久久久| 国产精品大尺度| 国产高清久久久| 久久午夜羞羞影院免费观看| 日本三级亚洲精品| 欧美精品自拍偷拍| 亚洲国产精品久久人人爱蜜臀| 9色porny自拍视频一区二区| 国产欧美1区2区3区| 国产精品亚洲综合一区在线观看| 91精品国产免费久久综合| 亚洲国产视频网站| 91福利精品视频| 亚洲精品视频一区| 色94色欧美sute亚洲线路一久| 中文字幕一区二区三区不卡在线| 粉嫩高潮美女一区二区三区| 久久综合国产精品| 韩国成人精品a∨在线观看| 日韩精品专区在线影院重磅| 免费一级欧美片在线观看| 日韩亚洲欧美中文三级| 久久爱另类一区二区小说| 欧美一区二区三区免费在线看| 日韩电影在线免费看| 欧美一区二区三区在线| 日韩av高清在线观看| 日韩欧美亚洲国产另类| 精品一区二区三区免费| 久久久久久电影| 国产成人午夜99999| 欧美国产精品劲爆| 一本在线高清不卡dvd| 一区二区在线观看免费 | 久久久久久久久久久99999| 精品无人区卡一卡二卡三乱码免费卡| 日韩一级高清毛片| 国产在线精品一区二区不卡了 | 中文字幕一区二区三区不卡 | 日本一区二区三级电影在线观看| 国产剧情一区二区三区| 国产精品久久网站| 色伊人久久综合中文字幕| 亚洲国产美国国产综合一区二区| 欧美精品v日韩精品v韩国精品v| 美女久久久精品| 久久久99精品免费观看不卡| www.亚洲人| 亚洲一区在线免费观看| 日韩欧美在线网站| 成人精品国产免费网站| 亚洲精品乱码久久久久久久久| 欧美精品久久一区二区三区| 激情av综合网| 亚洲美女电影在线| 欧美一区二区在线免费播放| 国产精品一区二区视频| 亚洲天堂av老司机| 欧美一区二区网站| 国产大陆a不卡| 亚洲乱码一区二区三区在线观看| 欧美日韩精品一区二区| 极品美女销魂一区二区三区| 国产精品乱人伦中文| 欧美高清视频在线高清观看mv色露露十八| 美女免费视频一区二区| 亚洲视频中文字幕| 日韩欧美国产高清| 色悠久久久久综合欧美99| 男男视频亚洲欧美| 国产精品成人一区二区艾草| 欧美日韩一区二区三区在线| 国产丶欧美丶日本不卡视频| 亚洲五码中文字幕| 亚洲国产成人私人影院tom| 欧美系列亚洲系列| 国产激情视频一区二区三区欧美| 一区二区三区色| 久久亚洲精精品中文字幕早川悠里 | 韩国av一区二区| 亚洲愉拍自拍另类高清精品| 欧美精品一区二区三区高清aⅴ| 91麻豆国产在线观看| 紧缚捆绑精品一区二区| 亚洲线精品一区二区三区| 日本一二三四高清不卡| 欧美一级爆毛片| 色94色欧美sute亚洲线路二 | 91在线观看下载| 精品午夜一区二区三区在线观看| 一区二区三区精品视频| 欧美激情一区二区三区在线| 制服丝袜一区二区三区| 91欧美激情一区二区三区成人| 国产在线观看一区二区| 日本欧美在线观看| 一区二区三区美女视频| 国产精品久久免费看| 精品91自产拍在线观看一区| 欧美久久免费观看| 一本色道久久加勒比精品| 国产a视频精品免费观看| 麻豆精品一区二区| 午夜av一区二区| 亚洲卡通动漫在线| 中文字幕欧美区| 精品国产免费人成在线观看| 欧美精品成人一区二区三区四区| 一本色道久久综合亚洲aⅴ蜜桃| 国产69精品久久777的优势| 麻豆精品国产传媒mv男同| 亚洲超碰精品一区二区| 亚洲黄色小视频| 亚洲精品ww久久久久久p站| 国产精品天干天干在线综合| 久久精品亚洲精品国产欧美| 精品国精品自拍自在线| 26uuu色噜噜精品一区| 精品国产成人系列|