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

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

?? diskmain.h

?? 6410BSP3
?? H
?? 第 1 頁 / 共 2 頁
字號:
//
// 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.
//

/*++

Module Name:
    diskmain.h

Abstract:
    Base ATA/ATAPI device abstraction.

Revision History:

--*/

#ifndef _DISKMAIN_H_
#define _DISKMAIN_H_

#include <atapi2.h>
#include <atamain.h>
#include <atapiio.h>
#include <atapipm.h>
#include <csgreq.h>

#include <storemgr.h>

#define MAXIMUM_DMA_TRANSFER_SIZE               (512 * 256)

#define MUX_REG             0x1800

#define ATA_CONTROL         0x1900
#define ATA_STATUS          0x1904
#define ATA_COMMAND         0x1908
#define ATA_SWRST           0x190c
#define ATA_IRQ             0x1910
#define ATA_IRQ_MASK        0x1914
#define ATA_CFG             0x1918
#define ATA_PIO_TIME        0x192c
#define ATA_UDMA_TIME       0x1930
#define ATA_XFR_NUM         0x1934
#define ATA_XFR_CNT         0x1938
#define ATA_TBUF_START      0x193c
#define ATA_TBUF_SIZE       0x1940
#define ATA_SBUF_START      0x1944
#define ATA_SBUF_SIZE       0x1948
#define ATA_CADDR_TBUR      0x194c
#define ATA_CADDR_SBUF      0x1950

#define ATA_PIO_DTR         0x1954
#define ATA_PIO_FED         0x1958
#define ATA_PIO_SCR         0x195c
#define ATA_PIO_LLR         0x1960
#define ATA_PIO_LMR         0x1964
#define ATA_PIO_LHR         0x1968    
#define ATA_PIO_DVR         0x196c
#define ATA_PIO_CSD         0x1970
#define ATA_PIO_DAD         0x1974

#define ATA_PIO_READY       0x1978
#define ATA_PIO_RDATA       0x197c
#define BUS_FIFO_STATUS     0x1990
#define ATA_FIFO_STATUS     0x1994
// These flags are used by CDisk m_dwDeviceFlags member

#define DFLAGS_DEVICE_PRESENT       (1 << 0)  // Device is present (Set in Identify; Tested in ADC)
#define DFLAGS_ATAPI_DEVICE         (1 << 1)  // Device is ATAPI (Set in Identify; Not tested--redundant, same as m_fAtapiDevice)
#define DFLAGS_INT_DRQ              (1 << 3)  // Device interrupts as DRQ is set after receiving ATAPI packet command
#define DFLAGS_REMOVABLE_DRIVE      (1 << 4)  // Removable media device bit set in Identify Data (General Configuration) (Set in Identify; Not tested)
#define DFLAGS_DEVICE_ISDVD         (1 << 6)  // Device is DVD (use different read command) (Set in ReadSettings, based on registry; Tested in SetupCdRomRead)
#define DFLAGS_MEDIA_ISDVD          (1 << 7)  // Media is DVD (Not set; Unset in DVDGetCopySystem; Tested in DVDGetRegion)
#define DFLAGS_USE_WRITE_CACHE      (1 << 8)  // Use write cache (Set in ReadSettings based on Identify Data and in ReadSettings based on registry; Unset in ReadSettings based on registry; Tested in FlushCache)
#define DFLAGS_DEVICE_PWRDN         (1 << 24) // Device has been powered down (Set in PowerDown; Unset in PowerUp; Tested in MainIoctl)
#define DFLAGS_DEVICE_CDROM         (1 << 26) // Device is CD-ROM (Set in Identify; Tested in StallExecution)
#define DFLAGS_DEVICE_INITIALIZED   (1 << 30) // File system is loaded and Storage Manager has requested device information (Set in CPCIDisk::ConfigPort and CPCIDisk::InitController; Tested in CPCIDisk::InitController)

// These flags are not set and not tested

#define DFLAGS_TAPE_DEVICE          (1 << 2)  // Device is tape (Not set; Not tested)
#define DFLAGS_MEDIA_STATUS_ENABLED (1 << 5)  // Device supports removable media status notification feature set? (Not set; Not tested)
#define DFLAGS_USE_DMA              (1 << 9)  // Device supports DMA (Not set; Not tested)
#define DFLAGS_LBA                  (1 << 10) // Device supports LBA (Not set; Not tested)
#define DFLAGS_MULTI_LUN_INITED     (1 << 11) // Multi-LUN support intialized (Not set; Not tested)
#define DFLAGS_MSN_SUPPORT          (1 << 12) // Device supports media status notifications (Not set; Not tested)
#define DFLAGS_AUTO_EJECT_ZIP       (1 << 13) // "Boot-up default enables auto eject" (Not set; Not tested)
#define DFLAGS_WD_MODE              (1 << 14) // Device is WD, not SFF (Not set; Not tested)
#define DFLAGS_USE_UDMA             (1 << 16) // Device supports UDMA (Not set; Not tested)
#define DFLAGS_IDENTIFY_VALID       (1 << 17) // Identify Data is valid (Not set; Not tested)
#define DFLAGS_DEVICE_BUSY          (1 << 25) // Device is busy (Not set; Not tested)
#define DFLAGS_MEDIA_CHANGED        (1 << 27) // Media has changed (Not set; Not tested)
#define DFLAGS_DEVICE_READY         (1 << 28) // Device supports removable media and is ready (Not set; Not tested)
#define DFLAGS_DEVICE_ACTIVATED     (1 << 29) // Device supports removable media and has volume(s) mounted (Not set; Not tested)
#ifdef FAKE_CRC_ERROR
#define DFLAGS_FAKING_CRC_ERROR     (1 << 31) // Fake CRC error (Not set; Not tested)
#endif // FAKE_CRC_ERROR

// These flags are not set and not tested

#define ATA_VERSION_MASK (0xfffe)
#define ATA1_COMPLIANCE  (1 << 1)
#define ATA2_COMPLIANCE  (1 << 2)
#define ATA3_COMPLIANCE  (1 << 3)
#define ATA4_COMPLIANCE  (1 << 4)

// WaitForDisc wait condition codes; for more information on WaitForDisc
// (bStatusType), see atapiio.cpp.
// For more information on ATA/ATAPI device conditions, see ATA/ATAPI-6 R3B
// 7.14 (Status register).

#define WAIT_TYPE_BUSY      1
#define WAIT_TYPE_NOT_BUSY  2
#define WAIT_TYPE_READY     3
#define WAIT_TYPE_DRQ       4
#define WAIT_TYPE_NOT_DRQ   5
#define WAIT_TYPE_ERROR     6

// By default, this will use the CEDDK functions.  To use macros instead,
// turn on CEDDK_USEDDKMACRO flag in the sources file.

// Base ATA/ATAPI device abstraction

// forward declaration
class CPort;

class CDisk {

  public:

    // Number of bytes between each ATA register; this is to facilitate PMC
    // platforms (i.e., Intel PXA)

    DWORD m_dwStride;

    // ATA register offsets from start of device control I/O port

                                     // Name             | Ref  | Notes
                                     // -----------------|------|------
    DWORD m_dwDataDrvCtrlOffset;     // Data             | 7.8  | 8 or 16 bits; PIO out <=> read, PIO in <=> write
    DWORD m_dwFeatureErrorOffset;    // Error            | 7.11 | RO; ABRT bit, i.e., Command code/parameter is invalid
                                     // Features         | 7.12 | WO; Command parameter
    DWORD m_dwSectCntReasonOffset;   // Sector Count     | 7.13 | Command parameter
    DWORD m_dwSectNumOffset;         // Sector Number    | 7.14 | Command parameter
    DWORD m_dwByteCountLowOffset;    // Cylinder Low     | 7.6  | Command parameter
    DWORD m_dwByteCountHighOffset;   // Cylinder High    | 7.5  | Command parameter
    DWORD m_dwDrvHeadOffset;         // Device/Head      | 7.10 | DEV bit selects device; 0 <=> master/device 0, 1 <=> slave/device 1
    DWORD m_dwCommandStatusOffset;   // Status           | 7.15 | RO; Read clears pending interrupt; contains BSY, DRDY, and ERR bits
                                     // Command          | 7.4  | WO; Command code; execution begins immediately after write

    // ATA register offsets from start of alternate status I/O port

    DWORD m_dwAltStatusOffset;       // Alternate Status | 7.3  | RO; Same as Status; Read does not clear pending interrupt
                                     // Device Control   | 7.9  | WO; SRST and nIEN bits; Both devices respond to write
    DWORD m_dwAltDrvCtrl;            // Same as m_dwAltStatusOffset

    volatile PBYTE m_pATAReg;        // Base address of device control register set (MmMapped)
    volatile PBYTE m_pATARegAlt;     // Base address of alternate status register set (MmMapped)
    BOOL           m_f16Bit;         // Data register width; set to TRUE in CPCIDisk::Init, tested in Identify and ReadWritedisk

    CPort *m_pPort;                  // I/O resources; including registry settings
    BOOL   m_fInterruptSupported;    // Set based on registry
    BOOL   m_fDMAActive;             // Set based on registry
    DWORD  m_dwDMAAlign;             // Set based on registry
    PBYTE  m_rgbDoubleBuffer;        // PIO mode double buffer; set based on registry
    WORD   m_wNextByte;              // Store extra byte when reading/writing unaligned buffer

    PSG_REQ m_pSterileIoRequest;     // Sterile I/O request for safe I/O

    CRITICAL_SECTION m_csDisk;       // CDisk critical section

    DWORD  m_dwOpenCount;            // DSK_Open count; number of system-wide references to this device
    CDisk *m_pNextDisk;              // Next CDisk in global (ATAPI.DLL) disk list
    TCHAR  m_szActiveKey[MAX_PATH];  // Name of DeviceX's active key
    TCHAR  m_szDeviceKey[MAX_PATH];  // Name of DeviceX's instance key
    HKEY   m_hDevKey;                // Handle to DeviceX subkey
    DWORD  m_dwDevice;               // Master <=> 0; Slave <=> 1
    DWORD  m_dwDeviceId;             // Master <=> 0; Slave <=> 1
    DWORD  m_dwPort;                 // Not used; if device is on primary channel, 0; If device is on secondary channel, 1

    IDENTIFY_DATA m_Id;              // IDENTIFY DEVICE data
    DWORD         m_dwDeviceFlags;   // Device attributes, see above
    BOOL          m_fLBAMode;        // Device supports LBA or C/H/S
    BOOL          m_fUseLBA48;       // Device supports extended 48 bit LBA from the revised ATA6 spec (disks > 128 GB)
    BOOL          m_fAtapiDevice;    // Device is ATA or ATAPI
    BYTE          m_bReadCommand;    // Read command to use (single-sector or multi-sector)
    BYTE          m_bWriteCommand;   // Write command to use (single-sector or multi-sector)
    BYTE          m_bDMAReadCommand; // DMA Read command to use
    BYTE          m_bDMAWriteCommand;// DMA Write command to use

    DISK_INFO m_DiskInfo;            // DISK_INFO (disk geometry) Storage Manager structure
    PTSTR     m_szDiskName;

    DWORD m_dwWaitCheckIter;         // Timeout
    DWORD m_dwWaitSampleTimes;       // Timeout
    DWORD m_dwWaitStallTime;         // Timeout
    DWORD m_dwDiskIoTimeOut;         // Timeout
    DWORD m_dwUnitReadyTime;         // Time between TEST_UNIT_READY commands
    DWORD m_dwLastCheckTime;         // Not used; time of last TEST_UNIT_READY command

    CDiskPower *m_pDiskPower;

    HANDLE m_hDevice;                // Handle to this store

    DWORD dwPktSize;                 // Not used; command packet size (12 or 16 bytes)
    DWORD m_dwStateFlag;             // Not used
    INQUIRY_DATA m_InqData;          // Not used
    BYTE m_bSectorsPerBlock;         // This was used at some point in time, but is no longer used (Set in Identify)

    STORAGEDEVICEINFO m_storagedeviceinfo; // This structure holds information to be returned for IOCTL_DISK_DEVICE_INFO

    PHYSICAL_ADDRESS m_DMAPhyaddress;
    PBYTE   m_pDMAVirtualAddress;
    DWORD m_dwCurrentUDMAMode;

public:

    // ------------------------------------------------------------------------
    // ------------------------------------------------------------------------

    CDisk();          // Not used
    CDisk(HKEY hKey); // Handle to device's DeviceX instance key
    virtual ~CDisk();

    // ------------------------------------------------------------------------
    // ------------------------------------------------------------------------

    // Read/write Data register
    void ReadBuffer(PBYTE pBuffer, DWORD dwCount);
    void WriteBuffer(PBYTE pBuffer, DWORD dwCount);
    BOOL WaitForDeviceAccessReady(void);

    inline void WriteDriveController(BYTE bData) {
        ATA_WRITE_BYTE(m_pATAReg + m_dwDataDrvCtrlOffset, bData);
    }
    inline WORD ReadByte() {
        return ATA_READ_BYTE(m_pATAReg+m_dwDataDrvCtrlOffset);
    }
    inline WORD ReadWord() {
        return ATA_READ_WORD((PWORD)(m_pATAReg+m_dwDataDrvCtrlOffset));
    }

/* // These macro has to change to our CF controller style.
    inline void ReadByteBuffer(PBYTE pBuffer, DWORD dwCount) {
        volatile BYTE * const Port = (volatile BYTE * const)(m_pATAReg+m_dwDataDrvCtrlOffset);
        if (m_pPort->m_pController->m_bisIOMapped)
            READ_PORT_BUFFER_UCHAR((PBYTE)Port, pBuffer, dwCount);
        else {
            while( dwCount-- )
                *pBuffer++ = *Port;
        }
    }
    inline void ReadWordBuffer(PWORD pBuffer, DWORD dwCount) {
        volatile USHORT * const Port = (volatile USHORT * const)(m_pATAReg+m_dwDataDrvCtrlOffset);
        if (m_pPort->m_pController->m_bisIOMapped)
            READ_PORT_BUFFER_USHORT((PUSHORT)Port, pBuffer, dwCount);
        else {
            while( dwCount-- )
                *pBuffer++ = *Port;
        }
    }
*/    
    inline void WriteByte(BYTE bData) {
        ATA_WRITE_BYTE(m_pATAReg + m_dwDataDrvCtrlOffset, bData);
    }
    inline void WriteWord(WORD wData) {
        ATA_WRITE_WORD((PWORD)(m_pATAReg + m_dwDataDrvCtrlOffset), wData);
    }

    inline UINT32 ReadReg(UINT32 dwOffset)
    {
        volatile UINT32 uRegister = *(volatile UINT32 *)(m_pATAReg + dwOffset);
        return uRegister;
    }

    inline VOID WriteReg(UINT32 dwOffset, UINT32 uValue)
    {
        volatile UINT32 *puRegister = (volatile UINT32 *)(m_pATAReg + dwOffset);
        *puRegister = uValue;
    }

/* // These macro has to change to our CF controller style.    
    inline void WriteByteBuffer(PBYTE pBuffer, DWORD dwCount) {
        volatile BYTE * const Port = (volatile BYTE * const)(m_pATAReg+m_dwDataDrvCtrlOffset);
        if (m_pPort->m_pController->m_bisIOMapped)
            WRITE_PORT_BUFFER_UCHAR((PBYTE)Port, pBuffer, dwCount);
        else {
            while( dwCount-- )
                *Port = *pBuffer++;
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品欧美激情| 久久久天堂av| 欧美大胆人体bbbb| 日韩理论片在线| 韩国成人福利片在线播放| 99国产欧美另类久久久精品| 欧美一区二区播放| 依依成人综合视频| 成人av在线一区二区| 日韩美女一区二区三区四区| 亚洲国产视频直播| 91在线精品一区二区| 久久久久久久久久久黄色| 日日噜噜夜夜狠狠视频欧美人| k8久久久一区二区三区 | 国产视频一区二区在线观看| 日韩二区三区四区| 欧美综合色免费| 一区精品在线播放| 国产成人8x视频一区二区| 精品国产乱码久久久久久图片| 亚洲6080在线| 欧美网站一区二区| 亚洲最大色网站| 色婷婷综合久久久久中文| 日本一区二区免费在线观看视频| 老色鬼精品视频在线观看播放| 精品污污网站免费看| 亚洲免费大片在线观看| 色婷婷综合久久久| 亚洲另类一区二区| 91丝袜国产在线播放| 亚洲天堂久久久久久久| 99精品国产热久久91蜜凸| 亚洲一区二区精品视频| 色欧美片视频在线观看在线视频| 中文一区二区完整视频在线观看| 国产成人av福利| 国产视频亚洲色图| 成人一二三区视频| 日韩美女视频一区| 91久久国产最好的精华液| 亚洲一区二区偷拍精品| 欧美久久婷婷综合色| 日韩黄色免费电影| 日韩欧美国产精品| 国产精品 日产精品 欧美精品| 亚洲精品在线三区| 成人精品视频一区二区三区 | 亚洲久草在线视频| 欧美日免费三级在线| 日本不卡一区二区三区高清视频| 日韩一级高清毛片| 大尺度一区二区| 亚洲男帅同性gay1069| 在线亚洲一区二区| 日本视频免费一区| 国产日韩欧美激情| 在线观看av一区| 九九**精品视频免费播放| 成人三级在线视频| 免费成人美女在线观看.| 99在线热播精品免费| 国产欧美精品国产国产专区| 色综合久久中文字幕综合网| 天天综合色天天| 欧美国产精品中文字幕| 欧美日韩视频在线一区二区| 久久99国产精品久久| 亚洲视频在线观看三级| 91麻豆精品国产91久久久资源速度| 国内精品不卡在线| 亚洲乱码日产精品bd| 日韩精品中文字幕一区二区三区 | 日韩视频中午一区| 岛国精品一区二区| 日韩电影在线免费| 国产欧美一区二区精品性色| 在线视频国内自拍亚洲视频| 国产高清在线观看免费不卡| 一区二区视频在线| 欧美中文字幕一二三区视频| 国产精品高潮呻吟久久| 美女看a上一区| 爽爽淫人综合网网站| 制服丝袜中文字幕亚洲| 成人小视频在线观看| 奇米色一区二区| 亚洲精品午夜久久久| 久久尤物电影视频在线观看| 欧美日本高清视频在线观看| 99视频国产精品| 韩国v欧美v日本v亚洲v| 日韩国产在线一| 中文字幕一区二区三区精华液| 欧美一区二区三区在线| 欧美专区日韩专区| 成人av在线播放网址| 国产一区二区三区四区在线观看| 亚洲v日本v欧美v久久精品| 亚洲www啪成人一区二区麻豆| 亚洲日本在线看| 中文字幕一区二区三区乱码在线 | 日韩国产一二三区| 99热精品国产| **欧美大码日韩| 不卡一区二区中文字幕| 国产美女娇喘av呻吟久久| 青青草原综合久久大伊人精品| 亚洲狼人国产精品| 亚洲六月丁香色婷婷综合久久| 国产精品麻豆视频| 中文字幕av一区 二区| 国产欧美日本一区二区三区| 国产无一区二区| 久久久国产综合精品女国产盗摄| 日韩精品一区在线| 欧美一区二区三区免费在线看 | 免费日韩伦理电影| 天堂在线亚洲视频| 日韩高清在线一区| 奇米亚洲午夜久久精品| 色综合 综合色| 国产精品456| 国产成人亚洲综合a∨婷婷图片| 一区二区三区国产| 777久久久精品| av资源网一区| a4yy欧美一区二区三区| 色综合久久久久久久久久久| av福利精品导航| 91毛片在线观看| 欧美日韩国产乱码电影| 日韩一区二区三区免费观看| 精品日韩成人av| 日本一区二区视频在线| 久久亚洲综合色一区二区三区| 久久―日本道色综合久久| 欧美—级在线免费片| 中文字幕一区二区日韩精品绯色| 亚洲免费观看高清完整版在线 | 国产综合久久久久久久久久久久| 国产一区二区不卡老阿姨| www.一区二区| 777亚洲妇女| 久久久久久99精品| 国产精品美女久久久久久久久久久 | 在线免费视频一区二区| 欧美日韩精品欧美日韩精品| 日韩免费看的电影| 国产欧美一区视频| 亚洲成av人影院在线观看网| 午夜伦欧美伦电影理论片| 国产精品2024| 欧美日韩一卡二卡| 日本一区二区三区四区在线视频| 一区视频在线播放| 久久爱www久久做| 色吧成人激情小说| 久久综合九色综合欧美亚洲| 亚洲免费观看高清在线观看| 国产成人一区在线| 欧美性猛片xxxx免费看久爱| 欧美mv日韩mv国产网站| 一区二区三区四区在线播放| 久久狠狠亚洲综合| 欧美mv日韩mv国产网站| 99久久精品免费看| 久久久国产午夜精品 | 在线精品视频一区二区| 精品剧情v国产在线观看在线| 亚洲视频在线观看一区| 国产裸体歌舞团一区二区| 欧美在线不卡视频| 最新不卡av在线| 国产在线视频精品一区| 欧美亚洲免费在线一区| 亚洲欧洲成人av每日更新| 韩国女主播成人在线| 91精品在线麻豆| 一区二区视频在线| 成人动漫在线一区| 久久久噜噜噜久噜久久综合| 石原莉奈一区二区三区在线观看| 色国产精品一区在线观看| 日本一区二区高清| 国产精品99久久久久久宅男| 欧美一区二区三区系列电影| 亚洲成人一区二区| 色婷婷精品久久二区二区蜜臀av| 国产欧美日韩在线视频| 另类小说综合欧美亚洲| 91精品国产综合久久久久久| 亚洲一二三四在线| 99国产精品久久久久久久久久 | 欧美xxxxx牲另类人与| 日本在线不卡一区| 欧美亚洲综合在线| 亚洲成a人片综合在线| 欧美三级欧美一级|