OSDN Git Service

9925ee1594113e8ab5d4c6db257bb5e13c8aa247
[mingw/mingw-org-wsl.git] / include / ddk / ntddscsi.h
1 /**
2  * @file ntddscsi.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
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:
11  * 
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
14  * Software.
15  * 
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.
23  */
24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */
25 #ifndef __NTDDSCSI_H
26 #define __NTDDSCSI_H
27 #pragma GCC system_header
28 #include <_mingw.h>
29
30 /*
31  * SCSI port IOCTL interface.
32  */
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 #include "ntddk.h"
39
40 #define DD_SCSI_DEVICE_NAME               "\\Device\\ScsiPort"
41 #define DD_SCSI_DEVICE_NAME_U             L"\\Device\\ScsiPort"
42
43 #define IOCTL_SCSI_BASE                   FILE_DEVICE_CONTROLLER
44
45 #define IOCTL_SCSI_GET_INQUIRY_DATA \
46   CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
47
48 #define IOCTL_SCSI_GET_CAPABILITIES \
49   CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
50
51 #define IOCTL_SCSI_GET_ADDRESS \
52   CTL_CODE(IOCTL_SCSI_BASE, 0x0406, 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         PADAPTER_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 */