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

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

?? diskio.c

?? WinCE下的ATADISK驅動
?? C
?? 第 1 頁 / 共 4 頁
字號:
            if (pDisk->d_f16Bit) {
                if (nextbyte != 0xFFFF) {
                    // Update the first byte.
                    *pBuf++ = (BYTE) nextbyte;
                    i--; 
                    nextbyte = 0xFFFF;
                }
                if ((DWORD)pBuf & 1) {
                    //
                    // If the user's buffer is not 16 bit aligned then use the
                    // 16 bit aligned buffer to read the sector from the card.
                    //
                    while (i > 1) {
                        unisc.us = ATA_READ_USHORT(pDisk->d_Flags, (PUSHORT)pData16);
                        *pBuf++= unisc.uc[0];
                        *pBuf++= unisc.uc[1];
                        i -= 2;
                    }
                } else {
                    while (i > 1) {
                        *(WORD *)pBuf = ATA_READ_USHORT(pDisk->d_Flags, (PUSHORT)pData16);
                        i -= 2;
                        pBuf +=2;
                    }
                }
                if (i == 1) {
                    unisc.us = ATA_READ_USHORT(pDisk->d_Flags, (PUSHORT)pData16);
                    *pBuf++=   unisc.uc[0];
                    nextbyte = (WORD)unisc.uc[1];    // Save byte for the next SG if 
                }
            } else {
                while (i) {
                    *pBuf++ = ATA_READ_UCHAR(pDisk->d_Flags, (PUCHAR)pData);
                    i--;
                }
            }
        } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
            DEBUGMSG(ZONE_IO|ZONE_ERROR, (TEXT("ATADISK:ATARead - exception 2\r\n")));
            error = ERROR_READ_FAULT;
        }
        if (error != ERROR_SUCCESS) {
            return error;
        }

        if (bytes_this_int == 0) {
            if (sectno < endsect) {
                continue;       // next sector
            }
        }

        //
        // Use the next scatter/gather buffer
        //
        num_sg--;
        if (num_sg == 0) {
            break;
        }
        pSg++;

        // Map address and check for security violation
        pBuf = (LPBYTE)MapCallerPtr((LPVOID)pSg->sb_buf, pSg->sb_len);
        if (pSg->sb_buf != NULL && pBuf == NULL) {
            // Security violation
            DEBUGMSG(ZONE_ERROR, (TEXT(
                "ATARead>Failed to map pointer to caller\r\n"
                )));
            return ERROR_ACCESS_DENIED;
        }

        bytes_this_sg = pSg->sb_len;
        if (bytes_this_int) {
            goto ar_continue_sector;
        }

    }   // while 
    return 0;
}    // ATARead


//
// ATAWrite
//
DWORD
ATAWrite(
    PDISK pDisk,
    PSG_REQ pSgr
    )
{
    DWORD i;
    DWORD num_sg;
    DWORD bytes_this_int;
    DWORD bytes_this_sg;
    PSG_BUF pSg;
    volatile USHORT *pData16;
    PUCHAR pBuf;
    volatile UCHAR *pData;
    DWORD sectno;
    DWORD nextsec; 
    DWORD endsect;
    DWORD error;
    WORD  nextbyte=0xFFFF;

    union {
        WORD us;
        BYTE  uc[2];
    }unisc;

    num_sg = pSgr->sr_num_sg;
    pSg = &(pSgr->sr_sglist[0]);
    bytes_this_sg = pSg->sb_len;
    bytes_this_int = pDisk->d_DiskInfo.di_bytes_per_sect;

    // Map address and check for security violation
    pBuf = (LPBYTE)MapCallerPtr((LPVOID)pSg->sb_buf, pSg->sb_len);
    if (pSg->sb_buf != NULL && pBuf == NULL) {
        // Security violation
        DEBUGMSG(ZONE_ERROR, (TEXT(
            "ATAWrite>Failed to map pointer to caller\r\n"
            )));
        return ERROR_ACCESS_DENIED;
    }

    pData = (volatile UCHAR*)pData16 = pDisk->d_pATAReg;
    sectno = pSgr->sr_start;
    endsect = sectno + pSgr->sr_num_sec;
    error = ERROR_SUCCESS;
    nextsec = 0;

    //
    // This loop writes data from multiple scatter/gather buffers to multiple
    // sectors.
    //
    while (num_sg) {
        DEBUGMSG(ZONE_IO, 
            (TEXT("ATADISK:ATAWrite - writing sector %d\r\n"), sectno));

        if (!nextsec) {
            nextsec = MIN(MAX_SECT_CNT, endsect - sectno);
            try {
                error = ATASetSector(pDisk, sectno, nextsec, ATA_CMD_WRITE);
            } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
                DEBUGMSG(ZONE_IO|ZONE_ERROR, (TEXT("ATADISK:ATAWrite - exception 1\r\n")));
                error = ERROR_WRITE_FAULT;
            }
            if (error != ERROR_SUCCESS) {
                return error;
            }
        }
        
        error = ATAWaitForDisk(pDisk, WAIT_TIME_NORMAL, WAIT_TYPE_DRQ_NOERR);
        if (error != ERROR_SUCCESS) {
            return error;
        }
        sectno++;
        nextsec--;
        bytes_this_int = pDisk->d_DiskInfo.di_bytes_per_sect;

aw_continue_sector:
        i = (bytes_this_sg < bytes_this_int) ? bytes_this_sg : bytes_this_int;
        bytes_this_sg -= i;
        bytes_this_int -= i;

        try {
            if (pDisk->d_f16Bit) {
                if (nextbyte != 0xFFFF) {
                    // Update the first byte
                    unisc.uc[0] = (BYTE) nextbyte;
                    unisc.uc[1] = *pBuf++;
                    i--; 
                    nextbyte = 0xFFFF;
                    ATA_WRITE_USHORT(pDisk->d_Flags, (PUSHORT)pData16, unisc.us);
                }
                if ((DWORD)pBuf & 1) {
                    //
                    // If the user's buffer is not 16 bit aligned then use the
                    // 16 bit aligned buffer to write the sector to the card.
                    //
                    while (i > 1) {
                        unisc.uc[0] = *pBuf++;
                        unisc.uc[1] = *pBuf++;
                        ATA_WRITE_USHORT(pDisk->d_Flags, (PUSHORT)pData16, unisc.us);
                        i -= 2;
                    }
                } else {
                    while (i > 1) {
                        ATA_WRITE_USHORT(pDisk->d_Flags, (PUSHORT)pData16, *(WORD *)pBuf);
                        i -= 2;
                        pBuf +=2;
                    }
                }
                if (i == 1) {
                    nextbyte = *(WORD *)pBuf;  // Save byte for the next SG if 
                    pBuf += 2;
                }
            } else {
                while (i) {
                    ATA_WRITE_UCHAR(pDisk->d_Flags, (PUCHAR)pData, *pBuf);
                    i--;
                    pBuf++;
                }
            }
        } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
            DEBUGMSG(ZONE_IO|ZONE_ERROR, (TEXT("ATADISK:ATAWrite - exception 2\r\n")));
            error = ERROR_WRITE_FAULT;
        }
        if (error != ERROR_SUCCESS) {
            return error;
        }

        if (bytes_this_int == 0) {
            if (sectno < endsect) {
                continue;       // next sector
            }
        }

        //
        // Use the next scatter/gather buffer
        //
        num_sg--;
        if (num_sg == 0) {
            break;
        }
        pSg++;

        // Map address and check for security violation
        pBuf = (LPBYTE)MapCallerPtr((LPVOID)pSg->sb_buf, pSg->sb_len);
        if (pSg->sb_buf != NULL && pBuf == NULL) {
            // Security violation
            DEBUGMSG(ZONE_ERROR, (TEXT(
                "ATAWrite>Failed to map pointer to caller\r\n"
                )));
            return ERROR_ACCESS_DENIED;
        }

        bytes_this_sg = pSg->sb_len;
        if (bytes_this_int) {
            goto aw_continue_sector;
        }
    }   // while

    //
    // Finish writing to last sector if the last buffer was not a sector multiple.
    //
    if (pDisk->d_f16Bit) {
        bytes_this_int = (bytes_this_int + 1) /2;
        while (bytes_this_int) {
            ATA_WRITE_USHORT(pDisk->d_Flags, (PUSHORT)pData16, 0xDDDD);
            //*pData16 = 0xDDDD;
            bytes_this_int--;
        }
    } else {
        while (bytes_this_int) {
            ATA_WRITE_UCHAR(pDisk->d_Flags, (PUCHAR)pData, 0xDD);
            //*pData = 0xDD;
            bytes_this_int--;
        }
    }

    return ATAWaitForDisk(pDisk, WAIT_TIME_NORMAL, WAIT_TYPE_READY);
}   // ATAWrite



//
// DoDiskIO - fulfill I/O requests
//
DWORD
DoDiskIO(
    PDISK pDisk,
    DWORD Opcode,
    PSG_REQ pSgr
    )
{
    DWORD status;
    unsigned int i;

    DEBUGMSG(ZONE_IO, (TEXT("ATDISK:DoDiskIO entered\r\n")));

    pSgr->sr_status = ERROR_IO_PENDING;

    if (pSgr->sr_num_sg > MAX_SG_BUF || pSgr->sr_num_sg <= 0) {
        status = ERROR_INVALID_PARAMETER;
        goto ddi_exit;
    }

    for (i = 0; i < pSgr->sr_num_sg; i++) {
        if (pSgr->sr_sglist[i].sb_len <= 0 ||
            pSgr->sr_sglist[i].sb_buf == NULL) {
            status = ERROR_INVALID_PARAMETER;
            goto ddi_exit;
        }
    }

    //
    // Make sure request doesn't exceed the disk size or ask for 0 sectors.
    //
    if (pSgr->sr_num_sec == 0) {
        status = ERROR_INVALID_PARAMETER;
        goto ddi_exit;
    }
    if ((pSgr->sr_start + pSgr->sr_num_sec) > pDisk->d_DiskInfo.di_total_sectors) {
        status = ERROR_SECTOR_NOT_FOUND;
        goto ddi_exit;
    }

    EnterCriticalSection(&pDisk->d_DiskCardCrit);
    while(pDisk->lPwrOff) {
        HANDLE hEvent = pDisk->hPwrEvent;
        LeaveCriticalSection(&pDisk->d_DiskCardCrit);
        WaitForSingleObject( pDisk->hPwrEvent, INFINITE);
        if (pDisk->lPwrOff == -1) {
            goto ddi_exit;
        }    
        EnterCriticalSection(&pDisk->d_DiskCardCrit);
        ATAInitController(pDisk);
    }

    DEBUGMSG(ZONE_IO, 
        (TEXT("ATADISK:DoDiskIO - working on request @ 0x%x from sector %d to %d\r\n"),
        pSgr, pSgr->sr_start, pSgr->sr_start + pSgr->sr_num_sec - 1));

    if (Opcode == DISK_IOCTL_READ) {
        status = ATARead(pDisk, pSgr);
    } else {
        status = ATAWrite(pDisk, pSgr);
    }

    LeaveCriticalSection(&(pDisk->d_DiskCardCrit));

ddi_exit:
    DEBUGMSG(ZONE_IO, (TEXT("ATDISK:DoDiskIO done - status=%d\r\n"), status));
    if (pDisk->lPwrOff == -1) {
        status = ERROR_DEVICE_NOT_AVAILABLE;
    }    
    pSgr->sr_status = status;
    return status;
}   // DoDiskIO



VOID
PcmciaIntr(
    DWORD Context
    )
{
    DWORD error;
    UCHAR ATAStatus;
    UCHAR AltStatus;
#ifdef DEBUG
    TCHAR szStatus[70];
#endif
    PDISK pDisk = (PDISK)Context;
    if (IsValidDisk(pDisk) == FALSE) {
        DEBUGMSG(ZONE_IO|ZONE_PCMCIA,
            (TEXT("ATADISK: PcmciaIntr - Invalid PDISK\r\n")));
        return;
    }

    error = ERROR_SUCCESS;
    ATAStatus = AltStatus = 0;

    //
    // Acknowledge the interrupt by reading the status register
    //
    try {
        ATAStatus = ATA_READ_UCHAR(pDisk->d_Flags, (UCHAR*)pDisk->d_pATAReg + ATA_REG_STATUS);
        AltStatus = ATA_READ_UCHAR(pDisk->d_Flags, (UCHAR*)pDisk->d_pATARegAlt + ATA_REG_ALT_STATUS);
    } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        DEBUGMSG(ZONE_IO|ZONE_ERROR, (TEXT("ATADISK:PcmciaIntr - exception!\r\n")));
        error = ERROR_GEN_FAILURE;
    }
    if (error != ERROR_SUCCESS) {
        return;
    }

    if (ATAStatus != AltStatus) {
        DEBUGMSG(ZONE_IO|ZONE_PCMCIA,
            (TEXT("ATADISK:PcmciaIntr - ATAStatus(0x%x) != AltStatus(0x%x)\r\n"),
            ATAStatus, AltStatus));
    }

    if (ATAStatus != pDisk->d_DiskStatus) {
        pDisk->d_DiskStatus = ATAStatus;

#ifdef DEBUG
    if (ZONE_IO) {
        szStatus[0] = 0;
        //
        // Display ATA status register
        //
        if (ATAStatus & ATA_STATUS_ERROR) {
            _tcscat(szStatus, TEXT("ERROR "));
        }
        if (ATAStatus & ATA_STATUS_CORRECTED_ERROR) {
            _tcscat(szStatus, TEXT("CORRECTED_ERROR "));
        }
        if (ATAStatus & ATA_STATUS_DATA_REQ) {
            _tcscat(szStatus, TEXT("DATA_REQ "));
        }
        if (ATAStatus & ATA_STATUS_SEEK_DONE) {
            _tcscat(szStatus, TEXT("SEEK_DONE "));
        }
        if (ATAStatus & ATA_STATUS_WRITE_FAULT) {
            _tcscat(szStatus, TEXT("WRITE_FAULT "));
        }
        if (ATAStatus & ATA_STATUS_READY) {
            _tcscat(szStatus, TEXT("READY "));
        }
        if (ATAStatus & ATA_STATUS_BUSY) {
            _tcscat(szStatus, TEXT("BUSY "));
        }
        DEBUGMSG(ZONE_IO, (TEXT("ATADISK:PcmciaIntr - ATA Status = %s\r\n"),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美裸体bbwbbwbbw| 蜜臀av一级做a爰片久久| 精品国产乱码久久久久久牛牛| 91在线小视频| 成人18视频在线播放| 成人免费视频视频在线观看免费 | 精品一区二区三区久久久| 亚洲一区二区在线观看视频 | 久久精品久久综合| 蜜臀av一区二区在线观看| 美腿丝袜亚洲一区| 久久99国产精品久久99果冻传媒| 精品一区二区三区在线播放| 国产一区二区美女| 99久久国产综合色|国产精品| 93久久精品日日躁夜夜躁欧美| 色综合久久中文综合久久97| 欧美婷婷六月丁香综合色| 欧美精品黑人性xxxx| 欧美精品一区二区高清在线观看| 久久综合狠狠综合久久激情| 中文字幕av一区二区三区高| **欧美大码日韩| 日本v片在线高清不卡在线观看| 久久99在线观看| 99热99精品| 欧美一区二区三区思思人| 精品日韩一区二区三区免费视频| 国产精品视频一二三区| 亚洲五码中文字幕| 国产精品99久久久| 欧美吻胸吃奶大尺度电影| 欧美一区二区网站| 亚洲欧洲成人精品av97| 三级精品在线观看| 99精品一区二区| 2欧美一区二区三区在线观看视频| 国产精品福利在线播放| 日韩成人av影视| 91老师片黄在线观看| 精品国产乱码久久久久久牛牛 | 国产精品美女久久久久久久网站| 依依成人精品视频| 国产成人欧美日韩在线电影| 欧美片网站yy| 亚洲精选视频在线| 国产麻豆精品theporn| 91麻豆精品国产91久久久更新时间 | 亚洲午夜羞羞片| 成人看片黄a免费看在线| 91精品婷婷国产综合久久竹菊| 国产欧美日韩另类一区| 免费成人在线视频观看| 欧洲精品一区二区三区在线观看| 久久久久久久性| 美女视频黄 久久| 在线观看视频一区二区 | 欧美午夜理伦三级在线观看| 欧美国产视频在线| 麻豆国产精品官网| 欧美乱熟臀69xxxxxx| 樱桃视频在线观看一区| 波多野结衣中文字幕一区| 久久伊人中文字幕| 久久狠狠亚洲综合| 日韩欧美精品在线| 捆绑变态av一区二区三区| 欧美亚洲国产一区在线观看网站| 一区二区三区在线视频观看| 国产成人av网站| 久久久不卡网国产精品一区| 国产综合久久久久久鬼色| 日韩一级黄色片| 奇米一区二区三区av| 欧美丰满高潮xxxx喷水动漫| 亚洲一二三四区| 欧美亚洲国产一区二区三区 | 免费观看在线色综合| 欧美放荡的少妇| 视频在线观看国产精品| 在线成人午夜影院| 日韩精品欧美成人高清一区二区| 欧美精选一区二区| 奇米精品一区二区三区四区 | 国产福利精品导航| 久久午夜电影网| 国产suv精品一区二区6| 欧美韩日一区二区三区四区| 成人国产精品免费观看视频| 亚洲女爱视频在线| 欧美日韩激情在线| 麻豆国产一区二区| 国产精品久久毛片av大全日韩| youjizz久久| 亚洲高清一区二区三区| 日韩一级片在线观看| 精品在线观看视频| 国产精品久久综合| 欧美日韩激情一区二区三区| 日本视频中文字幕一区二区三区| 久久嫩草精品久久久精品一| 99re这里只有精品6| 亚洲国产视频直播| 久久亚洲二区三区| 91福利视频网站| 国产精品一区二区在线观看不卡 | 久久日一线二线三线suv| 成人在线一区二区三区| 亚洲成av人片在www色猫咪| 日韩久久久久久| 99久久综合99久久综合网站| 天堂成人国产精品一区| 国产欧美日本一区视频| 欧美日韩电影在线播放| 成人永久免费视频| 日本aⅴ亚洲精品中文乱码| 国产欧美综合色| 欧美一区二区视频在线观看2022 | 亚洲欧美成aⅴ人在线观看| 欧美日韩精品一区视频| 欧美高清你懂得| 国产东北露脸精品视频| 视频一区欧美日韩| 亚洲婷婷综合久久一本伊一区| 8v天堂国产在线一区二区| 成人免费视频caoporn| 日韩国产欧美三级| 亚洲国产一区二区在线播放| 中文无字幕一区二区三区| 欧美成人一区二区三区片免费 | 日韩限制级电影在线观看| 9i在线看片成人免费| 国产一区久久久| 美女视频一区二区| 性感美女极品91精品| 综合亚洲深深色噜噜狠狠网站| 精品久久久久久久人人人人传媒| 欧美日韩黄视频| 色欧美片视频在线观看| 99精品视频在线观看免费| 国产精品一级在线| 国内精品伊人久久久久av影院| 日本亚洲电影天堂| 日韩激情一区二区| 偷拍亚洲欧洲综合| 五月婷婷久久综合| 午夜久久久影院| 亚洲国产成人精品视频| 亚洲一区二区3| 亚洲一区二区在线免费观看视频| 亚洲欧美日韩小说| 亚洲精品视频一区二区| 亚洲欧美国产毛片在线| 亚洲精品va在线观看| 亚洲综合一二三区| 亚洲一区二区三区视频在线 | 99久久精品国产一区| av亚洲精华国产精华精| 91伊人久久大香线蕉| 91亚洲国产成人精品一区二三| voyeur盗摄精品| xfplay精品久久| 国产日韩亚洲欧美综合| 国产精品热久久久久夜色精品三区| 国产欧美一区二区精品性色超碰| 国产欧美日韩卡一| 亚洲欧美日韩国产中文在线| 亚洲综合偷拍欧美一区色| 午夜精品成人在线视频| 日本欧美韩国一区三区| 国产精品一品视频| 色婷婷综合久久久中文一区二区| 色噜噜狠狠一区二区三区果冻| 欧美视频在线播放| 欧美电视剧免费全集观看| 久久夜色精品一区| 亚洲免费观看高清在线观看| 丝袜诱惑制服诱惑色一区在线观看| 免费国产亚洲视频| 94-欧美-setu| 欧美成人一区二区三区片免费 | 91亚洲永久精品| 欧美日韩色一区| 久久久美女毛片| 亚洲精品国产高清久久伦理二区| 热久久免费视频| 成人看片黄a免费看在线| 欧美日韩在线电影| 久久亚洲精华国产精华液| 一区二区三区日韩精品视频| 捆绑紧缚一区二区三区视频| 色婷婷综合视频在线观看| 欧美变态tickling挠脚心| 成人免费在线视频观看| 蜜臀久久99精品久久久画质超高清| 国v精品久久久网| 欧美日韩成人激情| 中文字幕在线观看一区二区| 免费的国产精品| 欧美无乱码久久久免费午夜一区|