update for HEAD-2003091401
[reactos.git] / include / ddk / ntddscsi.h
1 /* $Id$
2  *
3  * COPYRIGHT:       See COPYING in the top level directory
4  * PROJECT:         ReactOS kernel
5  * FILE:            services/storage/include/ntddscsi.h
6  * PURPOSE:         Basic SCSI definitions
7  * PROGRAMMER:      Eric Kohl (ekohl@rz-online.de)
8  */
9
10 #ifndef __STORAGE_INCLUDE_NTDDSCSI_H
11 #define __STORAGE_INCLUDE_NTDDSCSI_H
12
13 /* IOCTL codes */
14 #define IOCTL_SCSI_PASS_THROUGH \
15         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
16 #define IOCTL_SCSI_MINIPORT \
17         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
18 #define IOCTL_SCSI_GET_INQUIRY_DATA \
19         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
20 #define IOCTL_SCSI_GET_CAPABILITIES \
21         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
22 #define IOCTL_SCSI_PASS_THROUGH_DIRECT \
23         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
24 #define IOCTL_SCSI_GET_ADDRESS \
25         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
26 #define IOCTL_SCSI_RESCAN_BUS \
27         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
28 #define IOCTL_SCSI_GET_DUMP_POINTERS \
29         CTL_CODE(FILE_DEVICE_CONTROLLER, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
30
31
32
33 /* Used by IOCTL_SCSI_GET_CAPABILITIES */
34
35 typedef struct _IO_SCSI_CAPABILITIES
36 {
37   ULONG Length;
38   ULONG MaximumTransferLength;
39   ULONG MaximumPhysicalPages;
40   ULONG SupportedAsynchronousEvents;
41   ULONG AlignmentMask;
42   BOOLEAN TaggedQueuing;
43   BOOLEAN AdapterScansDown;
44   BOOLEAN AdapterUsesPio;
45 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
46
47
48 /* Used by IOCTL_SCSI_GET_INQUIRY_DATA */
49
50 typedef struct _SCSI_BUS_DATA
51 {
52   UCHAR NumberOfLogicalUnits;
53   UCHAR InitiatorBusId;
54   ULONG InquiryDataOffset;
55 }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
56
57
58 typedef struct _SCSI_ADAPTER_BUS_INFO
59 {
60   UCHAR NumberOfBuses;
61   SCSI_BUS_DATA BusData[1];
62 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
63
64
65 typedef struct _SCSI_INQUIRY_DATA
66 {
67   UCHAR PathId;
68   UCHAR TargetId;
69   UCHAR Lun;
70   BOOLEAN DeviceClaimed;
71   ULONG InquiryDataLength;
72   ULONG NextInquiryDataOffset;
73   UCHAR InquiryData[1];
74 }SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
75
76
77 /* Used by IOCTL_SCSI_GET_ADDRESS */
78
79 typedef struct _SCSI_ADDRESS
80 {
81   ULONG Length;
82   UCHAR PortNumber;
83   UCHAR PathId;
84   UCHAR TargetId;
85   UCHAR Lun;
86 } SCSI_ADDRESS, *PSCSI_ADDRESS;
87
88
89 /* Used by IOCTL_SCSI_PASS_THROUGH */
90
91 typedef struct _SCSI_PASS_THROUGH
92 {
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   ULONG DataBufferOffset;
104   ULONG SenseInfoOffset;
105   UCHAR Cdb[16];
106 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
107
108
109 /* Used by IOCTL_SCSI_PASS_THROUGH_DIRECT */
110
111 typedef struct _SCSI_PASS_THROUGH_DIRECT
112 {
113   USHORT Length;
114   UCHAR ScsiStatus;
115   UCHAR PathId;
116   UCHAR TargetId;
117   UCHAR Lun;
118   UCHAR CdbLength;
119   UCHAR SenseInfoLength;
120   UCHAR DataIn;
121   ULONG DataTransferLength;
122   ULONG TimeOutValue;
123   ULONG DataBufferOffset;
124   ULONG SenseInfoOffset;
125   UCHAR Cdb[16];
126 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
127
128
129 /* Pass through DataIn */
130
131 #define SCSI_IOCTL_DATA_OUT             0
132 #define SCSI_IOCTL_DATA_IN              1
133 #define SCSI_IOCTL_DATA_UNSPECIFIED     2
134
135 typedef struct _DUMP_POINTERS
136 {
137   PVOID DeviceObject;
138 } DUMP_POINTERS, *PDUMP_POINTERS;
139
140 #endif /* __STORAGE_INCLUDE_NTDDSCSI_H */
141
142 /* EOF */