master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifdef DEFINE_GUID
  7
  8#ifndef FAR
  9#define FAR
 10#endif
 11
 12DEFINE_GUID(ScsiRawInterfaceGuid,0x53f56309,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
 13DEFINE_GUID(WmiScsiAddressGuid,0x53f5630f,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
 14#endif /* DEFINE_GUID */
 15
 16#ifndef _NTDDSCSIH_
 17#define _NTDDSCSIH_
 18
 19#ifdef __cplusplus
 20extern "C" {
 21#endif
 22
 23#define IOCTL_SCSI_BASE		FILE_DEVICE_CONTROLLER
 24
 25#define DD_SCSI_DEVICE_NAME	"\\Device\\ScsiPort"
 26#define DD_SCSI_DEVICE_NAME_U  L"\\Device\\ScsiPort"
 27
 28#define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 29#define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE,0x0402,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 30#define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE,0x0403,METHOD_BUFFERED,FILE_ANY_ACCESS)
 31#define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE,0x0404,METHOD_BUFFERED,FILE_ANY_ACCESS)
 32#define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 33#define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE,0x0406,METHOD_BUFFERED,FILE_ANY_ACCESS)
 34#define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE,0x0407,METHOD_BUFFERED,FILE_ANY_ACCESS)
 35#define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE,0x0408,METHOD_BUFFERED,FILE_ANY_ACCESS)
 36#define IOCTL_SCSI_FREE_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE,0x0409,METHOD_BUFFERED,FILE_ANY_ACCESS)
 37#define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040a,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 38#define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 39#define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x040c,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 40
 41  typedef struct _SCSI_PASS_THROUGH {
 42    USHORT Length;
 43    UCHAR ScsiStatus;
 44    UCHAR PathId;
 45    UCHAR TargetId;
 46    UCHAR Lun;
 47    UCHAR CdbLength;
 48    UCHAR SenseInfoLength;
 49    UCHAR DataIn;
 50    ULONG DataTransferLength;
 51    ULONG TimeOutValue;
 52    ULONG_PTR DataBufferOffset;
 53    ULONG SenseInfoOffset;
 54    UCHAR Cdb[16];
 55  }SCSI_PASS_THROUGH,*PSCSI_PASS_THROUGH;
 56
 57  typedef struct _SCSI_PASS_THROUGH_DIRECT {
 58    USHORT Length;
 59    UCHAR ScsiStatus;
 60    UCHAR PathId;
 61    UCHAR TargetId;
 62    UCHAR Lun;
 63    UCHAR CdbLength;
 64    UCHAR SenseInfoLength;
 65    UCHAR DataIn;
 66    ULONG DataTransferLength;
 67    ULONG TimeOutValue;
 68    PVOID DataBuffer;
 69    ULONG SenseInfoOffset;
 70    UCHAR Cdb[16];
 71  }SCSI_PASS_THROUGH_DIRECT,*PSCSI_PASS_THROUGH_DIRECT;
 72
 73#if defined(_WIN64)
 74  typedef struct _SCSI_PASS_THROUGH32 {
 75    USHORT Length;
 76    UCHAR ScsiStatus;
 77    UCHAR PathId;
 78    UCHAR TargetId;
 79    UCHAR Lun;
 80    UCHAR CdbLength;
 81    UCHAR SenseInfoLength;
 82    UCHAR DataIn;
 83    ULONG DataTransferLength;
 84    ULONG TimeOutValue;
 85    ULONG32 DataBufferOffset;
 86    ULONG SenseInfoOffset;
 87    UCHAR Cdb[16];
 88  } SCSI_PASS_THROUGH32,*PSCSI_PASS_THROUGH32;
 89
 90  typedef struct _SCSI_PASS_THROUGH_DIRECT32 {
 91    USHORT Length;
 92    UCHAR ScsiStatus;
 93    UCHAR PathId;
 94    UCHAR TargetId;
 95    UCHAR Lun;
 96    UCHAR CdbLength;
 97    UCHAR SenseInfoLength;
 98    UCHAR DataIn;
 99    ULONG DataTransferLength;
100    ULONG TimeOutValue;
101    VOID *DataBuffer;
102    ULONG SenseInfoOffset;
103    UCHAR Cdb[16];
104  } SCSI_PASS_THROUGH_DIRECT32,*PSCSI_PASS_THROUGH_DIRECT32;
105#endif /* _WIN64 */
106
107  typedef struct _ATA_PASS_THROUGH_EX {
108    USHORT Length;
109    USHORT AtaFlags;
110    UCHAR PathId;
111    UCHAR TargetId;
112    UCHAR Lun;
113    UCHAR ReservedAsUchar;
114    ULONG DataTransferLength;
115    ULONG TimeOutValue;
116    ULONG ReservedAsUlong;
117    ULONG_PTR DataBufferOffset;
118    UCHAR PreviousTaskFile[8];
119    UCHAR CurrentTaskFile[8];
120  } ATA_PASS_THROUGH_EX,*PATA_PASS_THROUGH_EX;
121
122  typedef struct _ATA_PASS_THROUGH_DIRECT {
123    USHORT Length;
124    USHORT AtaFlags;
125    UCHAR PathId;
126    UCHAR TargetId;
127    UCHAR Lun;
128    UCHAR ReservedAsUchar;
129    ULONG DataTransferLength;
130    ULONG TimeOutValue;
131    ULONG ReservedAsUlong;
132    PVOID DataBuffer;
133    UCHAR PreviousTaskFile[8];
134    UCHAR CurrentTaskFile[8];
135  } ATA_PASS_THROUGH_DIRECT,*PATA_PASS_THROUGH_DIRECT;
136
137#if defined(_WIN64)
138
139  typedef struct _ATA_PASS_THROUGH_EX32 {
140    USHORT Length;
141    USHORT AtaFlags;
142    UCHAR PathId;
143    UCHAR TargetId;
144    UCHAR Lun;
145    UCHAR ReservedAsUchar;
146    ULONG DataTransferLength;
147    ULONG TimeOutValue;
148    ULONG ReservedAsUlong;
149    ULONG32 DataBufferOffset;
150    UCHAR PreviousTaskFile[8];
151    UCHAR CurrentTaskFile[8];
152  } ATA_PASS_THROUGH_EX32,*PATA_PASS_THROUGH_EX32;
153
154  typedef struct _ATA_PASS_THROUGH_DIRECT32 {
155    USHORT Length;
156    USHORT AtaFlags;
157    UCHAR PathId;
158    UCHAR TargetId;
159    UCHAR Lun;
160    UCHAR ReservedAsUchar;
161    ULONG DataTransferLength;
162    ULONG TimeOutValue;
163    ULONG ReservedAsUlong;
164    VOID *DataBuffer;
165    UCHAR PreviousTaskFile[8];
166    UCHAR CurrentTaskFile[8];
167  } ATA_PASS_THROUGH_DIRECT32,*PATA_PASS_THROUGH_DIRECT32;
168#endif /* _WIN64 */
169
170#define ATA_FLAGS_DRDY_REQUIRED (1 << 0)
171#define ATA_FLAGS_DATA_IN (1 << 1)
172#define ATA_FLAGS_DATA_OUT (1 << 2)
173#define ATA_FLAGS_48BIT_COMMAND (1 << 3)
174#define ATA_FLAGS_USE_DMA (1 << 4)
175
176  typedef struct _SCSI_BUS_DATA {
177    UCHAR NumberOfLogicalUnits;
178    UCHAR InitiatorBusId;
179    ULONG InquiryDataOffset;
180  }SCSI_BUS_DATA,*PSCSI_BUS_DATA;
181
182  typedef struct _SCSI_ADAPTER_BUS_INFO {
183    UCHAR NumberOfBuses;
184    SCSI_BUS_DATA BusData[1];
185  } SCSI_ADAPTER_BUS_INFO,*PSCSI_ADAPTER_BUS_INFO;
186
187  typedef struct _SCSI_INQUIRY_DATA {
188    UCHAR PathId;
189    UCHAR TargetId;
190    UCHAR Lun;
191    BOOLEAN DeviceClaimed;
192    ULONG InquiryDataLength;
193    ULONG NextInquiryDataOffset;
194    UCHAR InquiryData[1];
195  }SCSI_INQUIRY_DATA,*PSCSI_INQUIRY_DATA;
196
197  typedef struct _SRB_IO_CONTROL {
198    ULONG HeaderLength;
199    UCHAR Signature[8];
200    ULONG Timeout;
201    ULONG ControlCode;
202    ULONG ReturnCode;
203    ULONG Length;
204  } SRB_IO_CONTROL,*PSRB_IO_CONTROL;
205
206  typedef struct _IO_SCSI_CAPABILITIES {
207    ULONG Length;
208    ULONG MaximumTransferLength;
209    ULONG MaximumPhysicalPages;
210    ULONG SupportedAsynchronousEvents;
211    ULONG AlignmentMask;
212    BOOLEAN TaggedQueuing;
213    BOOLEAN AdapterScansDown;
214    BOOLEAN AdapterUsesPio;
215  } IO_SCSI_CAPABILITIES,*PIO_SCSI_CAPABILITIES;
216
217  typedef struct _SCSI_ADDRESS {
218    ULONG Length;
219    UCHAR PortNumber;
220    UCHAR PathId;
221    UCHAR TargetId;
222    UCHAR Lun;
223  } SCSI_ADDRESS,*PSCSI_ADDRESS;
224
225  struct _ADAPTER_OBJECT;
226
227  typedef struct _DUMP_POINTERS {
228    struct _ADAPTER_OBJECT *AdapterObject;
229    PVOID MappedRegisterBase;
230    PVOID DumpData;
231    PVOID CommonBufferVa;
232    LARGE_INTEGER CommonBufferPa;
233    ULONG CommonBufferSize;
234    BOOLEAN AllocateCommonBuffers;
235    BOOLEAN UseDiskDump;
236    UCHAR Spare1[2];
237    PVOID DeviceObject;
238  } DUMP_POINTERS,*PDUMP_POINTERS;
239
240#define SCSI_IOCTL_DATA_OUT 0
241#define SCSI_IOCTL_DATA_IN 1
242#define SCSI_IOCTL_DATA_UNSPECIFIED 2
243
244#ifdef __cplusplus
245}
246#endif
247
248#endif /* _NTDDSCSIH_ */
249