3 * Copyright 2012, 2013 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.
24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */
27 #pragma GCC system_header
31 * SCSI port IOCTL interface.
40 #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
41 #define DD_SCSI_DEVICE_NAME_U L"\\Device\\ScsiPort"
43 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
45 #define IOCTL_SCSI_GET_INQUIRY_DATA \
46 CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
48 #define IOCTL_SCSI_GET_CAPABILITIES \
49 CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
51 #define IOCTL_SCSI_GET_ADDRESS \
52 CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
54 #define IOCTL_SCSI_MINIPORT \
55 CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
57 #define IOCTL_SCSI_PASS_THROUGH \
58 CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
60 #define IOCTL_SCSI_PASS_THROUGH_DIRECT \
61 CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
63 #define IOCTL_SCSI_RESCAN_BUS \
64 CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
67 DEFINE_GUID(ScsiRawInterfaceGuid, \
68 0x53f56309L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
70 DEFINE_GUID(WmiScsiAddressGuid, \
71 0x53f5630fL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
73 typedef struct _SCSI_PASS_THROUGH {
80 UCHAR SenseInfoLength;
82 ULONG DataTransferLength;
84 ULONG_PTR DataBufferOffset;
85 ULONG SenseInfoOffset;
87 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
89 typedef struct _SCSI_PASS_THROUGH_DIRECT {
96 UCHAR SenseInfoLength;
98 ULONG DataTransferLength;
101 ULONG SenseInfoOffset;
103 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
105 typedef struct _SRB_IO_CONTROL {
112 } SRB_IO_CONTROL, *PSRB_IO_CONTROL;
114 typedef struct _SCSI_ADDRESS {
120 } SCSI_ADDRESS, *PSCSI_ADDRESS;
122 typedef struct _SCSI_BUS_DATA {
123 UCHAR NumberOfLogicalUnits;
124 UCHAR InitiatorBusId;
125 ULONG InquiryDataOffset;
126 }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
128 typedef struct _SCSI_ADAPTER_BUS_INFO {
130 SCSI_BUS_DATA BusData[1];
131 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
133 typedef struct _IO_SCSI_CAPABILITIES {
135 ULONG MaximumTransferLength;
136 ULONG MaximumPhysicalPages;
137 ULONG SupportedAsynchronousEvents;
139 BOOLEAN TaggedQueuing;
140 BOOLEAN AdapterScansDown;
141 BOOLEAN AdapterUsesPio;
142 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
144 typedef struct _SCSI_INQUIRY_DATA {
148 BOOLEAN DeviceClaimed;
149 ULONG InquiryDataLength;
150 ULONG NextInquiryDataOffset;
151 UCHAR InquiryData[1];
152 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
154 #define SCSI_IOCTL_DATA_OUT 0
155 #define SCSI_IOCTL_DATA_IN 1
156 #define SCSI_IOCTL_DATA_UNSPECIFIED 2
158 typedef struct _DUMP_POINTERS {
159 PADAPTER_OBJECT AdapterObject;
160 PVOID MappedRegisterBase;
162 PVOID CommonBufferVa;
163 LARGE_INTEGER CommonBufferPa;
164 ULONG CommonBufferSize;
165 BOOLEAN AllocateCommonBuffers;
169 } DUMP_POINTERS, *PDUMP_POINTERS;
175 #endif /* __NTDDSCSI_H */