[MC] Add messages 4400-4440 to netmsg.dll.
[reactos.git] / sdk / include / psdk / ntddscsi.h
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