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