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