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)
10 #ifndef __INCLUDE_DDK_CLASS2_H
11 #define __INCLUDE_DDK_CLASS2_H
16 #define MAXIMUM_RETRIES 15
17 #define RETRY_WAIT 2000000 /* 200 ms in units of 100 ns */
19 struct _CLASS_INIT_DATA
;
22 (STDCALL
*PCLASS_ERROR
)(IN PDEVICE_OBJECT DeviceObject
,
23 IN PSCSI_REQUEST_BLOCK Srb
,
24 IN OUT NTSTATUS
*Status
,
25 IN OUT BOOLEAN
*Retry
);
28 (STDCALL
*PCLASS_DEVICE_CALLBACK
)(IN PINQUIRYDATA
);
31 (STDCALL
*PCLASS_READ_WRITE
)(IN PDEVICE_OBJECT DeviceObject
,
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
,
42 (STDCALL
*PCLASS_DEVICE_CONTROL
)(IN PDEVICE_OBJECT DeviceObject
,
46 (STDCALL
*PCLASS_SHUTDOWN_FLUSH
)(IN PDEVICE_OBJECT DeviceObject
,
50 (STDCALL
*PCLASS_CREATE_CLOSE
)(IN PDEVICE_OBJECT DeviceObject
,
54 typedef struct _CLASS_INIT_DATA
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
;
71 typedef struct _DEVICE_EXTENSION
73 PDEVICE_OBJECT DeviceObject
;
74 PDEVICE_OBJECT PortDeviceObject
;
75 LARGE_INTEGER PartitionLength
;
76 LARGE_INTEGER StartingOffset
;
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
;
95 KSPIN_LOCK SplitRequestSpinLock
;
96 NPAGED_LOOKASIDE_LIST SrbLookasideListHead
;
105 PKEVENT MediaChangeEvent
;
106 HANDLE MediaChangeEventHandle
;
107 BOOLEAN MediaChangeNoMedia
;
108 ULONG MediaChangeCount
;
109 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
112 typedef struct _COMPLETION_CONTEXT
114 PDEVICE_OBJECT DeviceObject
;
115 SCSI_REQUEST_BLOCK Srb
;
116 } COMPLETION_CONTEXT
, *PCOMPLETION_CONTEXT
;
119 /* FUNCTIONS ****************************************************************/
122 ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject
,
127 ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject
,
131 ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject
,
132 IN PSCSI_INQUIRY_DATA LunInfo
,
134 OUT PDEVICE_OBJECT
*NewPortDeviceObject OPTIONAL
);
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
);
144 ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject
,
148 ScsiClassFindModePage(IN PCHAR ModeSenseBuffer
,
151 IN BOOLEAN Use6Byte
);
154 ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData
,
155 OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation
);
158 ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject
,
159 OUT PIO_SCSI_CAPABILITIES
*PortCapabilities
);
162 ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject
,
163 OUT PSCSI_ADAPTER_BUS_INFO
*ConfigInfo
);
166 ScsiClassInitialize(IN PVOID Argument1
,
168 IN PCLASS_INIT_DATA InitializationData
);
171 ScsiClassInitializeSrbLookasideList(IN PDEVICE_EXTENSION DeviceExtension
,
172 IN ULONG NumberElements
);
175 ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject
,
179 ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject
,
180 IN PSCSI_REQUEST_BLOCK Srb
,
181 IN UCHAR MajorFunctionCode
,
182 IN ULONG IoDeviceCode
,
184 OUT NTSTATUS
*Status
);
187 ScsiClassIoComplete(IN PDEVICE_OBJECT DeviceObject
,
192 ScsiClassIoCompleteAssociated(IN PDEVICE_OBJECT DeviceObject
,
197 ScsiClassModeSense(IN PDEVICE_OBJECT DeviceObject
,
198 IN PCHAR ModeSenseBuffer
,
203 ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath
);
206 ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject
);
209 ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject
);
212 ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject
,
213 PSCSI_REQUEST_BLOCK Srb
,
217 BOOLEAN WriteToDevice
);
220 ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject
,
221 PSCSI_REQUEST_BLOCK Srb
,
224 BOOLEAN WriteToDevice
);
227 ScsiClassSplitRequest(IN PDEVICE_OBJECT DeviceObject
,
229 IN ULONG MaximumBytes
);
231 #endif /* __INCLUDE_DDK_CLASS2_H */