xref: /reactos/sdk/include/psdk/ntddscsi.h (revision 7e069ccd)
1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the w64 mingw-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 
12 DEFINE_GUID(ScsiRawInterfaceGuid,0x53f56309L,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
13 DEFINE_GUID(WmiScsiAddressGuid,0x53f5630fL,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
20 extern "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_SCSI_PASS_THROUGH_EX CTL_CODE(IOCTL_SCSI_BASE, 0x0411, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
38 #define IOCTL_SCSI_PASS_THROUGH_DIRECT_EX CTL_CODE(IOCTL_SCSI_BASE, 0x0412, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
39 #define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040a,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
40 #define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE,0x040b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
41 #define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE,0x040c,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
42 
43   typedef struct _SCSI_PASS_THROUGH {
44     USHORT Length;
45     UCHAR ScsiStatus;
46     UCHAR PathId;
47     UCHAR TargetId;
48     UCHAR Lun;
49     UCHAR CdbLength;
50     UCHAR SenseInfoLength;
51     UCHAR DataIn;
52     ULONG DataTransferLength;
53     ULONG TimeOutValue;
54     ULONG_PTR DataBufferOffset;
55     ULONG SenseInfoOffset;
56     UCHAR Cdb[16];
57   }SCSI_PASS_THROUGH,*PSCSI_PASS_THROUGH;
58 
59   typedef struct _SCSI_PASS_THROUGH_DIRECT {
60     USHORT Length;
61     UCHAR ScsiStatus;
62     UCHAR PathId;
63     UCHAR TargetId;
64     UCHAR Lun;
65     UCHAR CdbLength;
66     UCHAR SenseInfoLength;
67     UCHAR DataIn;
68     ULONG DataTransferLength;
69     ULONG TimeOutValue;
70     PVOID DataBuffer;
71     ULONG SenseInfoOffset;
72     UCHAR Cdb[16];
73   }SCSI_PASS_THROUGH_DIRECT,*PSCSI_PASS_THROUGH_DIRECT;
74 
75 #if defined(_WIN64)
76   typedef struct _SCSI_PASS_THROUGH32 {
77     USHORT Length;
78     UCHAR ScsiStatus;
79     UCHAR PathId;
80     UCHAR TargetId;
81     UCHAR Lun;
82     UCHAR CdbLength;
83     UCHAR SenseInfoLength;
84     UCHAR DataIn;
85     ULONG DataTransferLength;
86     ULONG TimeOutValue;
87     ULONG32 DataBufferOffset;
88     ULONG SenseInfoOffset;
89     UCHAR Cdb[16];
90   } SCSI_PASS_THROUGH32,*PSCSI_PASS_THROUGH32;
91 
92   typedef struct _SCSI_PASS_THROUGH_DIRECT32 {
93     USHORT Length;
94     UCHAR ScsiStatus;
95     UCHAR PathId;
96     UCHAR TargetId;
97     UCHAR Lun;
98     UCHAR CdbLength;
99     UCHAR SenseInfoLength;
100     UCHAR DataIn;
101     ULONG DataTransferLength;
102     ULONG TimeOutValue;
103     VOID * POINTER_32 DataBuffer;
104     ULONG SenseInfoOffset;
105     UCHAR Cdb[16];
106   } SCSI_PASS_THROUGH_DIRECT32,*PSCSI_PASS_THROUGH_DIRECT32;
107 #endif /* _WIN64 */
108 
109 
110   typedef struct _SCSI_PASS_THROUGH_EX {
111     ULONG Version;
112     ULONG Length;
113     ULONG CdbLength;
114     ULONG StorAddressLength;
115     UCHAR ScsiStatus;
116     UCHAR SenseInfoLength;
117     UCHAR DataDirection;
118     UCHAR Reserved;
119     ULONG TimeOutValue;
120     ULONG StorAddressOffset;
121     ULONG SenseInfoOffset;
122     ULONG DataOutTransferLength;
123     ULONG DataInTransferLength;
124     ULONG_PTR DataOutBufferOffset;
125     ULONG_PTR DataInBufferOffset;
126     UCHAR Cdb[ANYSIZE_ARRAY];
127   } SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX;
128 
129   typedef struct _ATA_PASS_THROUGH_EX {
130     USHORT Length;
131     USHORT AtaFlags;
132     UCHAR PathId;
133     UCHAR TargetId;
134     UCHAR Lun;
135     UCHAR ReservedAsUchar;
136     ULONG DataTransferLength;
137     ULONG TimeOutValue;
138     ULONG ReservedAsUlong;
139     ULONG_PTR DataBufferOffset;
140     UCHAR PreviousTaskFile[8];
141     UCHAR CurrentTaskFile[8];
142   } ATA_PASS_THROUGH_EX,*PATA_PASS_THROUGH_EX;
143 
144   typedef struct _ATA_PASS_THROUGH_DIRECT {
145     USHORT Length;
146     USHORT AtaFlags;
147     UCHAR PathId;
148     UCHAR TargetId;
149     UCHAR Lun;
150     UCHAR ReservedAsUchar;
151     ULONG DataTransferLength;
152     ULONG TimeOutValue;
153     ULONG ReservedAsUlong;
154     PVOID DataBuffer;
155     UCHAR PreviousTaskFile[8];
156     UCHAR CurrentTaskFile[8];
157   } ATA_PASS_THROUGH_DIRECT,*PATA_PASS_THROUGH_DIRECT;
158 
159 #if defined(_WIN64)
160 
161   typedef struct _ATA_PASS_THROUGH_EX32 {
162     USHORT Length;
163     USHORT AtaFlags;
164     UCHAR PathId;
165     UCHAR TargetId;
166     UCHAR Lun;
167     UCHAR ReservedAsUchar;
168     ULONG DataTransferLength;
169     ULONG TimeOutValue;
170     ULONG ReservedAsUlong;
171     ULONG32 DataBufferOffset;
172     UCHAR PreviousTaskFile[8];
173     UCHAR CurrentTaskFile[8];
174   } ATA_PASS_THROUGH_EX32,*PATA_PASS_THROUGH_EX32;
175 
176   typedef struct _ATA_PASS_THROUGH_DIRECT32 {
177     USHORT Length;
178     USHORT AtaFlags;
179     UCHAR PathId;
180     UCHAR TargetId;
181     UCHAR Lun;
182     UCHAR ReservedAsUchar;
183     ULONG DataTransferLength;
184     ULONG TimeOutValue;
185     ULONG ReservedAsUlong;
186     VOID * POINTER_32 DataBuffer;
187     UCHAR PreviousTaskFile[8];
188     UCHAR CurrentTaskFile[8];
189   } ATA_PASS_THROUGH_DIRECT32,*PATA_PASS_THROUGH_DIRECT32;
190 #endif /* _WIN64 */
191 
192 #define ATA_FLAGS_DRDY_REQUIRED (1 << 0)
193 #define ATA_FLAGS_DATA_IN (1 << 1)
194 #define ATA_FLAGS_DATA_OUT (1 << 2)
195 #define ATA_FLAGS_48BIT_COMMAND (1 << 3)
196 #define ATA_FLAGS_USE_DMA (1 << 4)
197 
198   typedef struct _SCSI_BUS_DATA {
199     UCHAR NumberOfLogicalUnits;
200     UCHAR InitiatorBusId;
201     ULONG InquiryDataOffset;
202   }SCSI_BUS_DATA,*PSCSI_BUS_DATA;
203 
204   typedef struct _SCSI_ADAPTER_BUS_INFO {
205     UCHAR NumberOfBuses;
206     SCSI_BUS_DATA BusData[1];
207   } SCSI_ADAPTER_BUS_INFO,*PSCSI_ADAPTER_BUS_INFO;
208 
209   typedef struct _SCSI_INQUIRY_DATA {
210     UCHAR PathId;
211     UCHAR TargetId;
212     UCHAR Lun;
213     BOOLEAN DeviceClaimed;
214     ULONG InquiryDataLength;
215     ULONG NextInquiryDataOffset;
216     UCHAR InquiryData[1];
217   }SCSI_INQUIRY_DATA,*PSCSI_INQUIRY_DATA;
218 
219   typedef struct _SRB_IO_CONTROL {
220     ULONG HeaderLength;
221     UCHAR Signature[8];
222     ULONG Timeout;
223     ULONG ControlCode;
224     ULONG ReturnCode;
225     ULONG Length;
226   } SRB_IO_CONTROL,*PSRB_IO_CONTROL;
227 
228   typedef struct _IO_SCSI_CAPABILITIES {
229     ULONG Length;
230     ULONG MaximumTransferLength;
231     ULONG MaximumPhysicalPages;
232     ULONG SupportedAsynchronousEvents;
233     ULONG AlignmentMask;
234     BOOLEAN TaggedQueuing;
235     BOOLEAN AdapterScansDown;
236     BOOLEAN AdapterUsesPio;
237   } IO_SCSI_CAPABILITIES,*PIO_SCSI_CAPABILITIES;
238 
239   typedef struct _SCSI_ADDRESS {
240     ULONG Length;
241     UCHAR PortNumber;
242     UCHAR PathId;
243     UCHAR TargetId;
244     UCHAR Lun;
245   } SCSI_ADDRESS,*PSCSI_ADDRESS;
246 
247   struct _ADAPTER_OBJECT;
248 
249   typedef struct _DUMP_POINTERS {
250     struct _ADAPTER_OBJECT *AdapterObject;
251     PVOID MappedRegisterBase;
252     PVOID DumpData;
253     PVOID CommonBufferVa;
254     LARGE_INTEGER CommonBufferPa;
255     ULONG CommonBufferSize;
256     BOOLEAN AllocateCommonBuffers;
257     BOOLEAN UseDiskDump;
258     UCHAR Spare1[2];
259     PVOID DeviceObject;
260   } DUMP_POINTERS,*PDUMP_POINTERS;
261 
262 #define SCSI_IOCTL_DATA_OUT 0
263 #define SCSI_IOCTL_DATA_IN 1
264 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
265 
266 #ifdef __cplusplus
267 }
268 #endif
269 
270 #endif /* _NTDDSCSIH_ */
271 
272