atapi, buslogic, cdrom, class2.
[reactos.git] / reactos / drivers / storage / include / class2.h
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/storage/include/class2.h
6 * PURPOSE: SCSI class driver definitions
7 * PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
8 */
9
10 #ifndef __INCLUDE_DDK_CLASS2_H
11 #define __INCLUDE_DDK_CLASS2_H
12
13 #include "ntddscsi.h"
14 #include "srb.h"
15
16 #define MAXIMUM_RETRIES 15
17 #define RETRY_WAIT 2000000 /* 200 ms in units of 100 ns */
18
19 struct _CLASS_INIT_DATA;
20
21 typedef VOID
22 (STDCALL *PCLASS_ERROR)(IN PDEVICE_OBJECT DeviceObject,
23 IN PSCSI_REQUEST_BLOCK Srb,
24 IN OUT NTSTATUS *Status,
25 IN OUT BOOLEAN *Retry);
26
27 typedef BOOLEAN
28 (STDCALL *PCLASS_DEVICE_CALLBACK)(IN PINQUIRYDATA);
29
30 typedef NTSTATUS
31 (STDCALL *PCLASS_READ_WRITE)(IN PDEVICE_OBJECT DeviceObject,
32 IN PIRP Irp);
33
34 typedef BOOLEAN
35 (STDCALL *PCLASS_FIND_DEVICES)(IN PDRIVER_OBJECT DriverObject,
36 IN PUNICODE_STRING RegistryPath,
37 IN struct _CLASS_INIT_DATA *InitializationData,
38 IN PDEVICE_OBJECT PortDeviceObject,
39 IN ULONG PortNumber);
40
41 typedef NTSTATUS
42 (STDCALL *PCLASS_DEVICE_CONTROL)(IN PDEVICE_OBJECT DeviceObject,
43 IN PIRP Irp);
44
45 typedef NTSTATUS
46 (STDCALL *PCLASS_SHUTDOWN_FLUSH)(IN PDEVICE_OBJECT DeviceObject,
47 IN PIRP Irp);
48
49 typedef NTSTATUS
50 (STDCALL *PCLASS_CREATE_CLOSE)(IN PDEVICE_OBJECT DeviceObject,
51 IN PIRP Irp);
52
53
54 typedef struct _CLASS_INIT_DATA
55 {
56 ULONG InitializationDataSize;
57 ULONG DeviceExtensionSize;
58 DEVICE_TYPE DeviceType;
59 ULONG DeviceCharacteristics;
60 PCLASS_ERROR ClassError;
61 PCLASS_READ_WRITE ClassReadWriteVerification;
62 PCLASS_DEVICE_CALLBACK ClassFindDeviceCallBack;
63 PCLASS_FIND_DEVICES ClassFindDevices;
64 PCLASS_DEVICE_CONTROL ClassDeviceControl;
65 PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush;
66 PCLASS_CREATE_CLOSE ClassCreateClose;
67 PDRIVER_STARTIO ClassStartIo;
68 } CLASS_INIT_DATA, *PCLASS_INIT_DATA;
69
70
71 typedef struct _DEVICE_EXTENSION
72 {
73 PDEVICE_OBJECT DeviceObject;
74 PDEVICE_OBJECT PortDeviceObject;
75 LARGE_INTEGER PartitionLength;
76 LARGE_INTEGER StartingOffset;
77 ULONG DMByteSkew;
78 ULONG DMSkew;
79 BOOLEAN DMActive;
80 PCLASS_ERROR ClassError;
81 PCLASS_READ_WRITE ClassReadWriteVerification;
82 PCLASS_FIND_DEVICES ClassFindDevices;
83 PCLASS_DEVICE_CONTROL ClassDeviceControl;
84 PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush;
85 PCLASS_CREATE_CLOSE ClassCreateClose;
86 PDRIVER_STARTIO ClassStartIo;
87 PIO_SCSI_CAPABILITIES PortCapabilities;
88 PDISK_GEOMETRY DiskGeometry;
89 PDEVICE_OBJECT PhysicalDevice;
90 PSENSE_DATA SenseData;
91 ULONG TimeOutValue;
92 ULONG DeviceNumber;
93 ULONG SrbFlags;
94 ULONG ErrorCount;
95 KSPIN_LOCK SplitRequestSpinLock;
96 NPAGED_LOOKASIDE_LIST SrbLookasideListHead;
97 LONG LockCount;
98 UCHAR PortNumber;
99 UCHAR PathId;
100 UCHAR TargetId;
101 UCHAR Lun;
102 UCHAR SectorShift;
103 UCHAR ReservedByte;
104 USHORT DeviceFlags;
105 PKEVENT MediaChangeEvent;
106 HANDLE MediaChangeEventHandle;
107 BOOLEAN MediaChangeNoMedia;
108 ULONG MediaChangeCount;
109 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
110
111
112 typedef struct _COMPLETION_CONTEXT
113 {
114 PDEVICE_OBJECT DeviceObject;
115 SCSI_REQUEST_BLOCK Srb;
116 } COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
117
118
119 /* FUNCTIONS ****************************************************************/
120
121 NTSTATUS STDCALL
122 ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject,
123 IN PIRP Irp,
124 IN PVOID Context);
125
126 VOID STDCALL
127 ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject,
128 IN PIRP Irp);
129
130 NTSTATUS STDCALL
131 ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject,
132 IN PSCSI_INQUIRY_DATA LunInfo,
133 IN BOOLEAN Release,
134 OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL);
135
136 NTSTATUS STDCALL
137 ScsiClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject,
138 IN PCCHAR ObjectNameBuffer,
139 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
140 IN OUT PDEVICE_OBJECT *DeviceObject,
141 IN PCLASS_INIT_DATA InitializationData);
142
143 NTSTATUS STDCALL
144 ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject,
145 IN PIRP Irp);
146
147 PVOID STDCALL
148 ScsiClassFindModePage(IN PCHAR ModeSenseBuffer,
149 IN ULONG Length,
150 IN UCHAR PageMode,
151 IN BOOLEAN Use6Byte);
152
153 ULONG STDCALL
154 ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData,
155 OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation);
156
157 NTSTATUS STDCALL
158 ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject,
159 OUT PIO_SCSI_CAPABILITIES *PortCapabilities);
160
161 NTSTATUS STDCALL
162 ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject,
163 OUT PSCSI_ADAPTER_BUS_INFO *ConfigInfo);
164
165 ULONG STDCALL
166 ScsiClassInitialize(IN PVOID Argument1,
167 IN PVOID Argument2,
168 IN PCLASS_INIT_DATA InitializationData);
169
170 VOID STDCALL
171 ScsiClassInitializeSrbLookasideList(IN PDEVICE_EXTENSION DeviceExtension,
172 IN ULONG NumberElements);
173
174 NTSTATUS STDCALL
175 ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject,
176 IN PIRP Irp);
177
178 BOOLEAN STDCALL
179 ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject,
180 IN PSCSI_REQUEST_BLOCK Srb,
181 IN UCHAR MajorFunctionCode,
182 IN ULONG IoDeviceCode,
183 IN ULONG RetryCount,
184 OUT NTSTATUS *Status);
185
186 NTSTATUS STDCALL
187 ScsiClassIoComplete(IN PDEVICE_OBJECT DeviceObject,
188 IN PIRP Irp,
189 IN PVOID Context);
190
191 NTSTATUS STDCALL
192 ScsiClassIoCompleteAssociated(IN PDEVICE_OBJECT DeviceObject,
193 IN PIRP Irp,
194 IN PVOID Context);
195
196 ULONG STDCALL
197 ScsiClassModeSense(IN PDEVICE_OBJECT DeviceObject,
198 IN PCHAR ModeSenseBuffer,
199 IN ULONG Length,
200 IN UCHAR PageMode);
201
202 ULONG STDCALL
203 ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath);
204
205 NTSTATUS STDCALL
206 ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject);
207
208 VOID STDCALL
209 ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject);
210
211 NTSTATUS STDCALL
212 ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject,
213 PSCSI_REQUEST_BLOCK Srb,
214 PIRP Irp,
215 PVOID BufferAddress,
216 ULONG BufferLength,
217 BOOLEAN WriteToDevice);
218
219 NTSTATUS STDCALL
220 ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject,
221 PSCSI_REQUEST_BLOCK Srb,
222 PVOID BufferAddress,
223 ULONG BufferLength,
224 BOOLEAN WriteToDevice);
225
226 VOID STDCALL
227 ScsiClassSplitRequest(IN PDEVICE_OBJECT DeviceObject,
228 IN PIRP Irp,
229 IN ULONG MaximumBytes);
230
231 #endif /* __INCLUDE_DDK_CLASS2_H */
232
233 /* EOF */