123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /*
- * ide.h
- *
- * IDE driver interface
- *
- * This file is part of the w32api package.
- *
- * Contributors:
- * Created by Hervé Poussineau <hpoussin@reactos.org>
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
- #ifndef __IDE_H
- #define __IDE_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define MAX_IDE_CHANNEL 2
- #define MAX_IDE_LINE 2
- #define MAX_IDE_DEVICE 2
- #include <pshpack1.h>
- typedef struct _IDENTIFY_DATA {
- USHORT GeneralConfiguration; /* 00 */
- USHORT NumCylinders; /* 02 */
- USHORT Reserved1; /* 04 */
- USHORT NumHeads; /* 06 */
- USHORT UnformattedBytesPerTrack; /* 08 */
- USHORT UnformattedBytesPerSector; /* 10 */
- USHORT NumSectorsPerTrack; /* 12 */
- USHORT VendorUnique1[3]; /* 14 */
- UCHAR SerialNumber[20]; /* 20 */
- USHORT BufferType; /* 40 */
- USHORT BufferSectorSize; /* 42 */
- USHORT NumberOfEccBytes; /* 44 */
- UCHAR FirmwareRevision[8]; /* 46 */
- UCHAR ModelNumber[40]; /* 54 */
- UCHAR MaximumBlockTransfer; /* 94 */
- UCHAR VendorUnique2; /* 95 */
- USHORT DoubleWordIo; /* 96 */
- USHORT Capabilities; /* 98 */
- USHORT Reserved2; /* 100 */
- UCHAR VendorUnique3; /* 102 */
- UCHAR PioCycleTimingMode; /* 103 */
- UCHAR VendorUnique4; /* 104 */
- UCHAR DmaCycleTimingMode; /* 105 */
- USHORT TranslationFieldsValid:3; /* 106 */
- USHORT Reserved3:13; /* - */
- USHORT NumberOfCurrentCylinders; /* 108 */
- USHORT NumberOfCurrentHeads; /* 110 */
- USHORT CurrentSectorsPerTrack; /* 112 */
- ULONG CurrentSectorCapacity; /* 114 */
- USHORT CurrentMultiSectorSetting; /* 118 */
- ULONG UserAddressableSectors; /* 120 */
- USHORT SingleWordDMASupport:8; /* 124 */
- USHORT SingleWordDMAActive:8; /* - */
- USHORT MultiWordDMASupport:8; /* 126 */
- USHORT MultiWordDMAActive:8; /* - */
- USHORT AdvancedPIOModes:8; /* 128 */
- USHORT Reserved4:8; /* - */
- USHORT MinimumMWXferCycleTime; /* 130 */
- USHORT RecommendedMWXferCycleTime; /* 132 */
- USHORT MinimumPIOCycleTime; /* 134 */
- USHORT MinimumPIOCycleTimeIORDY; /* 136 */
- USHORT Reserved5[11]; /* 138 */
- USHORT MajorRevision; /* 160 */
- USHORT MinorRevision; /* 162 */
- USHORT Reserved6; /* 164 */
- USHORT CommandSetSupport; /* 166 */
- USHORT Reserved6a[2]; /* 168 */
- USHORT CommandSetActive; /* 172 */
- USHORT Reserved6b; /* 174 */
- USHORT UltraDMASupport:8; /* 176 */
- USHORT UltraDMAActive:8; /* - */
- USHORT Reserved7[11]; /* 178 */
- ULONG Max48BitLBA[2]; /* 200 */
- USHORT Reserved7a[22]; /* 208 */
- USHORT LastLun:3; /* 252 */
- USHORT Reserved8:13; /* - */
- USHORT MediaStatusNotification:2; /* 254 */
- USHORT Reserved9:6; /* - */
- USHORT DeviceWriteProtect:1; /* - */
- USHORT Reserved10:7; /* - */
- USHORT Reserved11[128]; /* 256 */
- } IDENTIFY_DATA, *PIDENTIFY_DATA;
- typedef struct _EXTENDED_IDENTIFY_DATA {
- USHORT GeneralConfiguration; /* 00 */
- USHORT NumCylinders; /* 02 */
- USHORT Reserved1; /* 04 */
- USHORT NumHeads; /* 06 */
- USHORT UnformattedBytesPerTrack; /* 08 */
- USHORT UnformattedBytesPerSector; /* 10 */
- USHORT NumSectorsPerTrack; /* 12 */
- __GNU_EXTENSION union
- {
- USHORT VendorUnique1[3]; /* 14 */
- struct
- {
- UCHAR InterSectorGap; /* 14 */
- UCHAR InterSectorGapSize; /* - */
- UCHAR Reserved16; /* 16 */
- UCHAR BytesInPLO; /* - */
- USHORT VendorUniqueCnt; /* 18 */
- } u;
- };
- UCHAR SerialNumber[20]; /* 20 */
- USHORT BufferType; /* 40 */
- USHORT BufferSectorSize; /* 42 */
- USHORT NumberOfEccBytes; /* 44 */
- UCHAR FirmwareRevision[8]; /* 46 */
- UCHAR ModelNumber[40]; /* 54 */
- UCHAR MaximumBlockTransfer; /* 94 */
- UCHAR VendorUnique2; /* 95 */
- USHORT DoubleWordIo; /* 96 */
- USHORT Capabilities; /* 98 */
- USHORT Reserved2; /* 100 */
- UCHAR VendorUnique3; /* 102 */
- UCHAR PioCycleTimingMode; /* 103 */
- UCHAR VendorUnique4; /* 104 */
- UCHAR DmaCycleTimingMode; /* 105 */
- USHORT TranslationFieldsValid:3; /* 106 */
- USHORT Reserved3:13; /* - */
- USHORT NumberOfCurrentCylinders; /* 108 */
- USHORT NumberOfCurrentHeads; /* 110 */
- USHORT CurrentSectorsPerTrack; /* 112 */
- ULONG CurrentSectorCapacity; /* 114 */
- USHORT CurrentMultiSectorSetting; /* 118 */
- ULONG UserAddressableSectors; /* 120 */
- USHORT SingleWordDMASupport:8; /* 124 */
- USHORT SingleWordDMAActive:8; /* - */
- USHORT MultiWordDMASupport:8; /* 126 */
- USHORT MultiWordDMAActive:8; /* - */
- USHORT AdvancedPIOModes:8; /* 128 */
- USHORT Reserved4:8; /* - */
- USHORT MinimumMWXferCycleTime; /* 130 */
- USHORT RecommendedMWXferCycleTime; /* 132 */
- USHORT MinimumPIOCycleTime; /* 134 */
- USHORT MinimumPIOCycleTimeIORDY; /* 136 */
- USHORT Reserved5[11]; /* 138 */
- USHORT MajorRevision; /* 160 */
- USHORT MinorRevision; /* 162 */
- USHORT Reserved6; /* 164 */
- USHORT CommandSetSupport; /* 166 */
- USHORT Reserved6a[2]; /* 168 */
- USHORT CommandSetActive; /* 172 */
- USHORT Reserved6b; /* 174 */
- USHORT UltraDMASupport:8; /* 176 */
- USHORT UltraDMAActive:8; /* - */
- USHORT Reserved7[11]; /* 178 */
- ULONG Max48BitLBA[2]; /* 200 */
- USHORT Reserved7a[22]; /* 208 */
- USHORT LastLun:3; /* 252 */
- USHORT Reserved8:13; /* - */
- USHORT MediaStatusNotification:2; /* 254 */
- USHORT Reserved9:6; /* - */
- USHORT DeviceWriteProtect:1; /* - */
- USHORT Reserved10:7; /* - */
- USHORT Reserved11[128]; /* 256 */
- } EXTENDED_IDENTIFY_DATA, *PEXTENDED_IDENTIFY_DATA;
- #include <poppack.h>
- typedef struct _PCIIDE_TRANSFER_MODE_SELECT
- {
- ULONG Channel;
- BOOLEAN DevicePresent[MAX_IDE_DEVICE * MAX_IDE_LINE];
- BOOLEAN FixedDisk[MAX_IDE_DEVICE * MAX_IDE_LINE];
- BOOLEAN IoReadySupported[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG DeviceTransferModeSupported[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG BestPioCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG BestSwDmaCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG BestMwDmaCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG BestUDmaCycleTime[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG DeviceTransferModeCurrent[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG UserChoiceTransferMode[MAX_IDE_DEVICE * MAX_IDE_LINE];
- ULONG EnableUDMA66;
- IDENTIFY_DATA IdentifyData[MAX_IDE_DEVICE];
- ULONG DeviceTransferModeSelected[MAX_IDE_DEVICE * MAX_IDE_LINE];
- PULONG TransferModeTimingTable;
- ULONG TransferModeTableLength;
- } PCIIDE_TRANSFER_MODE_SELECT, *PPCIIDE_TRANSFER_MODE_SELECT;
- typedef enum
- {
- ChannelDisabled = 0,
- ChannelEnabled,
- ChannelStateUnknown
- } IDE_CHANNEL_STATE;
- typedef IDE_CHANNEL_STATE
- (NTAPI *PCIIDE_CHANNEL_ENABLED)(
- IN PVOID DeviceExtension,
- IN ULONG Channel);
- typedef BOOLEAN
- (NTAPI *PCIIDE_SYNC_ACCESS_REQUIRED)(
- IN PVOID DeviceExtension);
- typedef NTSTATUS
- (NTAPI *PCIIDE_TRANSFER_MODE_SELECT_FUNC)(
- IN PVOID DeviceExtension,
- IN OUT PPCIIDE_TRANSFER_MODE_SELECT XferMode);
- typedef ULONG
- (NTAPI *PCIIDE_USEDMA_FUNC)(
- IN PVOID DeviceExtension,
- IN PUCHAR CdbCommand,
- IN PUCHAR Slave);
- typedef NTSTATUS
- (NTAPI *PCIIDE_UDMA_MODES_SUPPORTED)(
- IN IDENTIFY_DATA IdentifyData,
- OUT PULONG BestXferMode,
- OUT PULONG CurrentXferMode);
- typedef struct _IDE_CONTROLLER_PROPERTIES
- {
- ULONG Size;
- ULONG ExtensionSize;
- ULONG SupportedTransferMode[MAX_IDE_CHANNEL][MAX_IDE_DEVICE];
- PCIIDE_CHANNEL_ENABLED PciIdeChannelEnabled;
- PCIIDE_SYNC_ACCESS_REQUIRED PciIdeSyncAccessRequired;
- PCIIDE_TRANSFER_MODE_SELECT_FUNC PciIdeTransferModeSelect;
- BOOLEAN IgnoreActiveBitForAtaDevice;
- BOOLEAN AlwaysClearBusMasterInterrupt;
- PCIIDE_USEDMA_FUNC PciIdeUseDma;
- ULONG AlignmentRequirement;
- ULONG DefaultPIO;
- PCIIDE_UDMA_MODES_SUPPORTED PciIdeUdmaModesSupported;
- } IDE_CONTROLLER_PROPERTIES, *PIDE_CONTROLLER_PROPERTIES;
- typedef NTSTATUS
- (NTAPI *PCONTROLLER_PROPERTIES)(
- IN PVOID DeviceExtension,
- IN PIDE_CONTROLLER_PROPERTIES ControllerProperties);
- NTSTATUS NTAPI
- PciIdeXInitialize(
- IN PDRIVER_OBJECT DriverObject,
- IN PUNICODE_STRING RegistryPath,
- IN PCONTROLLER_PROPERTIES HwGetControllerProperties,
- IN ULONG ExtensionSize);
- NTSTATUS NTAPI
- PciIdeXGetBusData(
- IN PVOID DeviceExtension,
- IN PVOID Buffer,
- IN ULONG ConfigDataOffset,
- IN ULONG BufferLength);
- NTSTATUS NTAPI
- PciIdeXSetBusData(
- IN PVOID DeviceExtension,
- IN PVOID Buffer,
- IN PVOID DataMask,
- IN ULONG ConfigDataOffset,
- IN ULONG BufferLength);
- /* Bit field values for
- * PCIIDE_TRANSFER_MODE_SELECT.DeviceTransferModeSupported and
- * IDE_CONTROLLER_PROPERTIES.SupportedTransferMode
- */
- // PIO Modes
- #define PIO_MODE0 (1 << 0)
- #define PIO_MODE1 (1 << 1)
- #define PIO_MODE2 (1 << 2)
- #define PIO_MODE3 (1 << 3)
- #define PIO_MODE4 (1 << 4)
- // Single-word DMA Modes
- #define SWDMA_MODE0 (1 << 5)
- #define SWDMA_MODE1 (1 << 6)
- #define SWDMA_MODE2 (1 << 7)
- // Multi-word DMA Modes
- #define MWDMA_MODE0 (1 << 8)
- #define MWDMA_MODE1 (1 << 9)
- #define MWDMA_MODE2 (1 << 10)
- // Ultra DMA Modes
- #define UDMA_MODE0 (1 << 11)
- #define UDMA_MODE1 (1 << 12)
- #define UDMA_MODE2 (1 << 13)
- #define UDMA_MODE3 (1 << 14)
- #define UDMA_MODE4 (1 << 15)
- #define UDMA_MODE5 (1 << 16)
- #ifdef __cplusplus
- }
- #endif
- #endif /* __IDE_H */
|