Merging r37048, r37051, r37052, r37055 from the-real-msvc branch
[reactos.git] / reactos / include / ddk / ntddscsi.h
1 /*
2 * ntddscsi.h
3 *
4 * SCSI port IOCTL interface.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __NTDDSCSI_H
24 #define __NTDDSCSI_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
35 #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort"
36
37 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
38
39 #define IOCTL_SCSI_FREE_DUMP_POINTERS \
40 CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS)
41
42 #define IOCTL_SCSI_GET_INQUIRY_DATA \
43 CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
44
45 #define IOCTL_SCSI_GET_CAPABILITIES \
46 CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
47
48 #define IOCTL_SCSI_GET_ADDRESS \
49 CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
50
51 #define IOCTL_SCSI_GET_DUMP_POINTERS \
52 CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
53
54 #define IOCTL_SCSI_MINIPORT \
55 CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
56
57 #define IOCTL_SCSI_PASS_THROUGH \
58 CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
59
60 #define IOCTL_SCSI_PASS_THROUGH_DIRECT \
61 CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
62
63 #define IOCTL_SCSI_RESCAN_BUS \
64 CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
65
66
67 DEFINE_GUID(ScsiRawInterfaceGuid, \
68 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
69
70 DEFINE_GUID(WmiScsiAddressGuid, \
71 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
72
73 typedef struct _SCSI_PASS_THROUGH {
74 USHORT Length;
75 UCHAR ScsiStatus;
76 UCHAR PathId;
77 UCHAR TargetId;
78 UCHAR Lun;
79 UCHAR CdbLength;
80 UCHAR SenseInfoLength;
81 UCHAR DataIn;
82 ULONG DataTransferLength;
83 ULONG TimeOutValue;
84 ULONG_PTR DataBufferOffset;
85 ULONG SenseInfoOffset;
86 UCHAR Cdb[16];
87 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
88
89 typedef struct _SCSI_PASS_THROUGH_DIRECT {
90 USHORT Length;
91 UCHAR ScsiStatus;
92 UCHAR PathId;
93 UCHAR TargetId;
94 UCHAR Lun;
95 UCHAR CdbLength;
96 UCHAR SenseInfoLength;
97 UCHAR DataIn;
98 ULONG DataTransferLength;
99 ULONG TimeOutValue;
100 PVOID DataBuffer;
101 ULONG SenseInfoOffset;
102 UCHAR Cdb[16];
103 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
104
105 typedef struct _SRB_IO_CONTROL {
106 ULONG HeaderLength;
107 UCHAR Signature[8];
108 ULONG Timeout;
109 ULONG ControlCode;
110 ULONG ReturnCode;
111 ULONG Length;
112 } SRB_IO_CONTROL, *PSRB_IO_CONTROL;
113
114 typedef struct _SCSI_ADDRESS {
115 ULONG Length;
116 UCHAR PortNumber;
117 UCHAR PathId;
118 UCHAR TargetId;
119 UCHAR Lun;
120 } SCSI_ADDRESS, *PSCSI_ADDRESS;
121
122 typedef struct _SCSI_BUS_DATA {
123 UCHAR NumberOfLogicalUnits;
124 UCHAR InitiatorBusId;
125 ULONG InquiryDataOffset;
126 }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
127
128 typedef struct _SCSI_ADAPTER_BUS_INFO {
129 UCHAR NumberOfBuses;
130 SCSI_BUS_DATA BusData[1];
131 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
132
133 typedef struct _IO_SCSI_CAPABILITIES {
134 ULONG Length;
135 ULONG MaximumTransferLength;
136 ULONG MaximumPhysicalPages;
137 ULONG SupportedAsynchronousEvents;
138 ULONG AlignmentMask;
139 BOOLEAN TaggedQueuing;
140 BOOLEAN AdapterScansDown;
141 BOOLEAN AdapterUsesPio;
142 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
143
144 typedef struct _SCSI_INQUIRY_DATA {
145 UCHAR PathId;
146 UCHAR TargetId;
147 UCHAR Lun;
148 BOOLEAN DeviceClaimed;
149 ULONG InquiryDataLength;
150 ULONG NextInquiryDataOffset;
151 UCHAR InquiryData[1];
152 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
153
154 #define SCSI_IOCTL_DATA_OUT 0
155 #define SCSI_IOCTL_DATA_IN 1
156 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
157
158 typedef struct _DUMP_POINTERS {
159 struct _ADAPTER_OBJECT *AdapterObject;
160 PVOID MappedRegisterBase;
161 PVOID DumpData;
162 PVOID CommonBufferVa;
163 LARGE_INTEGER CommonBufferPa;
164 ULONG CommonBufferSize;
165 BOOLEAN AllocateCommonBuffers;
166 BOOLEAN UseDiskDump;
167 UCHAR Spare1[2];
168 PVOID DeviceObject;
169 } DUMP_POINTERS, *PDUMP_POINTERS;
170
171 #ifdef __cplusplus
172 }
173 #endif
174
175 #endif /* __NTDDSCSI_H */