|
|
1.1 root 1: /*++ BUILD Version: 0001 // Increment this if a change has global effects
2:
3: Copyright (c) 1990-1993 Microsoft Corporation
4:
5: Module Name:
6:
7: ntddscsi.h
8:
9: Abstract:
10:
11: This is the include file that defines all constants and types for
12: accessing the SCSI port adapters.
13:
14: Author:
15:
16: Jeff Havens
17:
18: Revision History:
19:
20: --*/
21:
22: #ifndef _NTDDSCSIH_
23: #define _NTDDSCSIH_
24:
25: //
26: // Device Name - this string is the name of the device. It is the name
27: // that should be passed to NtOpenFile when accessing the device.
28: //
29: // Note: For devices that support multiple units, it should be suffixed
30: // with the Ascii representation of the unit number.
31: //
32:
33: #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
34:
35: #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort"
36:
37:
38: //
39: // NtDeviceIoControlFile IoControlCode values for this device.
40: //
41: // Warning: Remember that the low two bits of the code specify how the
42: // buffers are passed to the driver!
43: //
44:
45: #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
46: #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
47: #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
48: #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
49: #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
50: #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
51:
52: //
53: // Define the SCSI pass through structure.
54: //
55:
56: typedef struct _SCSI_PASS_THROUGH {
57: USHORT Length;
58: UCHAR ScsiStatus;
59: UCHAR PathId;
60: UCHAR TargetId;
61: UCHAR Lun;
62: UCHAR CdbLength;
63: UCHAR SenseInfoLength;
64: UCHAR DataIn;
65: ULONG DataTransferLength;
66: ULONG TimeOutValue;
67: ULONG DataBufferOffset;
68: ULONG SenseInfoOffset;
69: UCHAR Cdb[16];
70: }SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
71:
72: //
73: // Define the SCSI pass through direct structure.
74: //
75:
76: typedef struct _SCSI_PASS_THROUGH_DIRECT {
77: USHORT Length;
78: UCHAR ScsiStatus;
79: UCHAR PathId;
80: UCHAR TargetId;
81: UCHAR Lun;
82: UCHAR CdbLength;
83: UCHAR SenseInfoLength;
84: UCHAR DataIn;
85: ULONG DataTransferLength;
86: ULONG TimeOutValue;
87: PVOID DataBuffer;
88: ULONG SenseInfoOffset;
89: UCHAR Cdb[16];
90: }SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
91:
92: //
93: // Define SCSI information.
94: // Used with the IOCTL_SCSI_GET_INQUIRY_DATA IOCTL.
95: //
96:
97: typedef struct _SCSI_BUS_DATA {
98: UCHAR NumberOfLogicalUnits;
99: UCHAR InitiatorBusId;
100: ULONG InquiryDataOffset;
101: }SCSI_BUS_DATA, *PSCSI_BUS_DATA;
102:
103: //
104: // Define SCSI adapter bus information structure..
105: // Used with the IOCTL_SCSI_GET_INQUIRY_DATA IOCTL.
106: //
107:
108: typedef struct _SCSI_ADAPTER_BUS_INFO {
109: UCHAR NumberOfBuses;
110: SCSI_BUS_DATA BusData[1];
111: } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
112:
113: //
114: // Define SCSI adapter bus information.
115: // Used with the IOCTL_SCSI_GET_INQUIRY_DATA IOCTL.
116: //
117:
118: typedef struct _SCSI_INQUIRY_DATA {
119: UCHAR PathId;
120: UCHAR TargetId;
121: UCHAR Lun;
122: BOOLEAN DeviceClaimed;
123: ULONG InquiryDataLength;
124: ULONG NextInquiryDataOffset;
125: UCHAR InquiryData[1];
126: }SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
127:
128: //
129: // Define header for I/O control SRB.
130: //
131:
132: typedef struct _SRB_IO_CONTROL {
133: ULONG HeaderLength;
134: UCHAR Signature[8];
135: ULONG Timeout;
136: ULONG ControlCode;
137: ULONG ReturnCode;
138: ULONG Length;
139: } SRB_IO_CONTROL, *PSRB_IO_CONTROL;
140:
141: //
142: // SCSI port driver capabilities structure.
143: //
144:
145: typedef struct _IO_SCSI_CAPABILITIES {
146:
147: //
148: // Length of this structure
149: //
150:
151: ULONG Length;
152:
153: //
154: // Maximum transfer size in single SRB
155: //
156:
157: ULONG MaximumTransferLength;
158:
159: //
160: // Maximum number of physical pages per data buffer
161: //
162:
163: ULONG MaximumPhysicalPages;
164:
165: //
166: // Async calls from port to class
167: //
168:
169: ULONG SupportedAsynchronousEvents;
170:
171: //
172: // Alignment mask for data transfers.
173: //
174:
175: ULONG AlignmentMask;
176:
177: //
178: // Supports tagged queuing
179: //
180:
181: BOOLEAN TaggedQueuing;
182:
183: //
184: // Host adapter scans down for bios devices.
185: //
186:
187: BOOLEAN AdapterScansDown;
188:
189: //
190: // The host adapter uses programmed I/O.
191: //
192:
193: BOOLEAN AdapterUsesPio;
194:
195: } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
196:
197: typedef struct _SCSI_ADDRESS {
198: ULONG Length;
199: UCHAR PortNumber;
200: UCHAR PathId;
201: UCHAR TargetId;
202: UCHAR Lun;
203: }SCSI_ADDRESS, *PSCSI_ADDRESS;
204:
205: //
206: // Define values for pass-through DataIn field.
207: //
208:
209: #define SCSI_IOCTL_DATA_OUT 0
210: #define SCSI_IOCTL_DATA_IN 1
211: #define SCSI_IOCTL_DATA_UNSPECIFIED 2
212: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.