3 * @copy 2012 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
27 * SCSI port IOCTL interface.
29 * This file is part of the w32api package.
32 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
34 * THIS SOFTWARE IS NOT COPYRIGHTED
36 * This source code is offered for use in the public domain. You may
37 * use, modify or distribute it freely.
39 * This code is distributed in the hope that it will be useful but
40 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
41 * DISCLAIMED. This includes but is not limited to warranties of
42 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
48 #pragma GCC system_header
56 #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
57 #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort"
59 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
61 #define IOCTL_SCSI_GET_INQUIRY_DATA \
62 CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
64 #define IOCTL_SCSI_GET_CAPABILITIES \
65 CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
67 #define IOCTL_SCSI_GET_ADDRESS \
68 CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
70 #define IOCTL_SCSI_MINIPORT \
71 CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
73 #define IOCTL_SCSI_PASS_THROUGH \
74 CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
76 #define IOCTL_SCSI_PASS_THROUGH_DIRECT \
77 CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
79 #define IOCTL_SCSI_RESCAN_BUS \
80 CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
83 DEFINE_GUID(ScsiRawInterfaceGuid, \
84 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
86 DEFINE_GUID(WmiScsiAddressGuid, \
87 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
89 typedef struct _SCSI_PASS_THROUGH {
96 UCHAR SenseInfoLength;
98 ULONG DataTransferLength;
100 ULONG_PTR DataBufferOffset;
101 ULONG SenseInfoOffset;
103 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
105 typedef struct _SCSI_PASS_THROUGH_DIRECT {
112 UCHAR SenseInfoLength;
114 ULONG DataTransferLength;
117 ULONG SenseInfoOffset;
119 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
121 typedef struct _SRB_IO_CONTROL {
128 } SRB_IO_CONTROL, *PSRB_IO_CONTROL;
130 typedef struct _SCSI_ADDRESS {
136 } SCSI_ADDRESS, *PSCSI_ADDRESS;
138 typedef struct _SCSI_BUS_DATA {
139 UCHAR NumberOfLogicalUnits;
140 UCHAR InitiatorBusId;
141 ULONG InquiryDataOffset;
142 }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
144 typedef struct _SCSI_ADAPTER_BUS_INFO {
146 SCSI_BUS_DATA BusData[1];
147 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
149 typedef struct _IO_SCSI_CAPABILITIES {
151 ULONG MaximumTransferLength;
152 ULONG MaximumPhysicalPages;
153 ULONG SupportedAsynchronousEvents;
155 BOOLEAN TaggedQueuing;
156 BOOLEAN AdapterScansDown;
157 BOOLEAN AdapterUsesPio;
158 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
160 typedef struct _SCSI_INQUIRY_DATA {
164 BOOLEAN DeviceClaimed;
165 ULONG InquiryDataLength;
166 ULONG NextInquiryDataOffset;
167 UCHAR InquiryData[1];
168 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
170 #define SCSI_IOCTL_DATA_OUT 0
171 #define SCSI_IOCTL_DATA_IN 1
172 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
174 typedef struct _DUMP_POINTERS {
175 PADAPTER_OBJECT AdapterObject;
176 PVOID MappedRegisterBase;
178 PVOID CommonBufferVa;
179 LARGE_INTEGER CommonBufferPa;
180 ULONG CommonBufferSize;
181 BOOLEAN AllocateCommonBuffers;
185 } DUMP_POINTERS, *PDUMP_POINTERS;
191 #endif /* __NTDDSCSI_H */