123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- /*++ BUILD Version: 0001 // Increment this if a change has global effects
- Copyright (c) Microsoft Corporation. All rights reserved.
- Module Name:
- ntddscsi.h
- Abstract:
- This is the include file that defines all constants and types for
- accessing the SCSI port adapters.
- Author:
- Jeff Havens
- Revision History:
- --*/
- //
- // Interface GUIDs
- //
- // need these GUIDs outside conditional includes so that user can
- // #include <ntddscsi.h> in precompiled header
- // #include <initguid.h> in a single source file
- // #include <ntddscsi.h> in that source file a second time to instantiate the GUIDs
- //
- #ifdef DEFINE_GUID
- //
- // Make sure FAR is defined...
- //
- #ifndef FAR
- #ifdef _WIN32
- #define FAR
- #else
- #define FAR _far
- #endif
- #endif
- DEFINE_GUID(ScsiRawInterfaceGuid, 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
- DEFINE_GUID(WmiScsiAddressGuid, 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
- #endif
- #ifndef _NTDDSCSIH_
- #define _NTDDSCSIH_
- #ifdef __cplusplus
- extern "C" {
- #endif
- //
- // Device Name - this string is the name of the device. It is the name
- // that should be passed to NtOpenFile when accessing the device.
- //
- // Note: For devices that support multiple units, it should be suffixed
- // with the Ascii representation of the unit number.
- //
- #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
- #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
- //
- // NtDeviceIoControlFile IoControlCode values for this device.
- //
- // Warning: Remember that the low two bits of the code specify how the
- // buffers are passed to the driver!
- //
- #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
- #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
- #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
- #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_SCSI_FREE_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS)
- #define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
- #define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
- #define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x040c, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
- //
- // Define the SCSI pass through structure.
- //
- typedef struct _SCSI_PASS_THROUGH {
- USHORT Length;
- UCHAR ScsiStatus;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR CdbLength;
- UCHAR SenseInfoLength;
- UCHAR DataIn;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- ULONG_PTR DataBufferOffset;
- ULONG SenseInfoOffset;
- UCHAR Cdb[16];
- }SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
- //
- // Define the SCSI pass through direct structure.
- //
- typedef struct _SCSI_PASS_THROUGH_DIRECT {
- USHORT Length;
- UCHAR ScsiStatus;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR CdbLength;
- UCHAR SenseInfoLength;
- UCHAR DataIn;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- PVOID DataBuffer;
- ULONG SenseInfoOffset;
- UCHAR Cdb[16];
- }SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
- //
- // Define the SCSI pass through direct structure for Win64 (thunking).
- //
- #if defined(_WIN64)
- typedef struct _SCSI_PASS_THROUGH32 {
- USHORT Length;
- UCHAR ScsiStatus;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR CdbLength;
- UCHAR SenseInfoLength;
- UCHAR DataIn;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- ULONG32 DataBufferOffset;
- ULONG SenseInfoOffset;
- UCHAR Cdb[16];
- }SCSI_PASS_THROUGH32, *PSCSI_PASS_THROUGH32;
- //
- // Define the SCSI pass through direct structure.
- //
- typedef struct _SCSI_PASS_THROUGH_DIRECT32 {
- USHORT Length;
- UCHAR ScsiStatus;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR CdbLength;
- UCHAR SenseInfoLength;
- UCHAR DataIn;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- VOID * POINTER_32 DataBuffer;
- ULONG SenseInfoOffset;
- UCHAR Cdb[16];
- }SCSI_PASS_THROUGH_DIRECT32, *PSCSI_PASS_THROUGH_DIRECT32;
- #endif
- //
- // ATA pass through structure
- //
- typedef struct _ATA_PASS_THROUGH_EX {
- USHORT Length;
- USHORT AtaFlags;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR ReservedAsUchar;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- ULONG ReservedAsUlong;
- ULONG_PTR DataBufferOffset;
- UCHAR PreviousTaskFile[8];
- UCHAR CurrentTaskFile[8];
- } ATA_PASS_THROUGH_EX, *PATA_PASS_THROUGH_EX;
- //
- // ATA pass through direct structure.
- //
- typedef struct _ATA_PASS_THROUGH_DIRECT {
- USHORT Length;
- USHORT AtaFlags;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR ReservedAsUchar;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- ULONG ReservedAsUlong;
- PVOID DataBuffer;
- UCHAR PreviousTaskFile[8];
- UCHAR CurrentTaskFile[8];
- } ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT;
- //
- // Define the ATA pass through direct structure for Win64 (thunking).
- //
- #if defined(_WIN64)
- typedef struct _ATA_PASS_THROUGH_EX32 {
- USHORT Length;
- USHORT AtaFlags;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR ReservedAsUchar;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- ULONG ReservedAsUlong;
- ULONG32 DataBufferOffset;
- UCHAR PreviousTaskFile[8];
- UCHAR CurrentTaskFile[8];
- } ATA_PASS_THROUGH_EX32, *PATA_PASS_THROUGH_EX32;
- //
- // ATA pass through direct structure.
- //
- typedef struct _ATA_PASS_THROUGH_DIRECT32 {
- USHORT Length;
- USHORT AtaFlags;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR ReservedAsUchar;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- ULONG ReservedAsUlong;
- VOID * POINTER_32 DataBuffer;
- UCHAR PreviousTaskFile[8];
- UCHAR CurrentTaskFile[8];
- } ATA_PASS_THROUGH_DIRECT32, *PATA_PASS_THROUGH_DIRECT32;
- #endif
- //
- // ATA Pass Through Flags
- //
- #define ATA_FLAGS_DRDY_REQUIRED (1 << 0)
- #define ATA_FLAGS_DATA_IN (1 << 1)
- #define ATA_FLAGS_DATA_OUT (1 << 2)
- #define ATA_FLAGS_48BIT_COMMAND (1 << 3)
- #define ATA_FLAGS_USE_DMA (1 << 4)
- //
- // Define SCSI information.
- // Used with the IOCTL_SCSI_GET_INQUIRY_DATA IOCTL.
- //
- typedef struct _SCSI_BUS_DATA {
- UCHAR NumberOfLogicalUnits;
- UCHAR InitiatorBusId;
- ULONG InquiryDataOffset;
- }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
- //
- // Define SCSI adapter bus information structure..
- // Used with the IOCTL_SCSI_GET_INQUIRY_DATA IOCTL.
- //
- typedef struct _SCSI_ADAPTER_BUS_INFO {
- UCHAR NumberOfBuses;
- SCSI_BUS_DATA BusData[1];
- } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
- //
- // Define SCSI adapter bus information.
- // Used with the IOCTL_SCSI_GET_INQUIRY_DATA IOCTL.
- //
- typedef struct _SCSI_INQUIRY_DATA {
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- BOOLEAN DeviceClaimed;
- ULONG InquiryDataLength;
- ULONG NextInquiryDataOffset;
- UCHAR InquiryData[1];
- }SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
- //
- // Define header for I/O control SRB.
- //
- typedef struct _SRB_IO_CONTROL {
- ULONG HeaderLength;
- UCHAR Signature[8];
- ULONG Timeout;
- ULONG ControlCode;
- ULONG ReturnCode;
- ULONG Length;
- } SRB_IO_CONTROL, *PSRB_IO_CONTROL;
- //
- // SCSI port driver capabilities structure.
- //
- typedef struct _IO_SCSI_CAPABILITIES {
- //
- // Length of this structure
- //
- ULONG Length;
- //
- // Maximum transfer size in single SRB
- //
- ULONG MaximumTransferLength;
- //
- // Maximum number of physical pages per data buffer
- //
- ULONG MaximumPhysicalPages;
- //
- // Async calls from port to class
- //
- ULONG SupportedAsynchronousEvents;
- //
- // Alignment mask for data transfers.
- //
- ULONG AlignmentMask;
- //
- // Supports tagged queuing
- //
- BOOLEAN TaggedQueuing;
- //
- // Host adapter scans down for bios devices.
- //
- BOOLEAN AdapterScansDown;
- //
- // The host adapter uses programmed I/O.
- //
- BOOLEAN AdapterUsesPio;
- } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
- typedef struct _SCSI_ADDRESS {
- ULONG Length;
- UCHAR PortNumber;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- }SCSI_ADDRESS, *PSCSI_ADDRESS;
- //
- // Define structure for returning crash dump pointers.
- //
- struct _ADAPTER_OBJECT;
- typedef struct _DUMP_POINTERS {
- struct _ADAPTER_OBJECT *AdapterObject;
- PVOID MappedRegisterBase;
- PVOID DumpData;
- PVOID CommonBufferVa;
- LARGE_INTEGER CommonBufferPa;
- ULONG CommonBufferSize;
- BOOLEAN AllocateCommonBuffers;
- BOOLEAN UseDiskDump;
- UCHAR Spare1[2];
- PVOID DeviceObject;
- } DUMP_POINTERS, *PDUMP_POINTERS;
- //
- // Define values for pass-through DataIn field.
- //
- #define SCSI_IOCTL_DATA_OUT 0
- #define SCSI_IOCTL_DATA_IN 1
- #define SCSI_IOCTL_DATA_UNSPECIFIED 2
- #ifdef __cplusplus
- }
- #endif
- #endif
|