1 /* $Id: class2.h,v 1.3 2002/01/31 14:58:34 ekohl Exp $
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 __STORAGE_INCLUDE_CLASS2_H
11 #define __STORAGE_INCLUDE_CLASS2_H
16 struct _CLASS_INIT_DATA
;
19 (*PCLASS_ERROR
)(IN PDEVICE_OBJECT DeviceObject
,
20 IN PSCSI_REQUEST_BLOCK Srb
,
21 IN OUT NTSTATUS
*Status
,
22 IN OUT BOOLEAN
*Retry
);
24 typedef BOOLEAN STDCALL
25 (*PCLASS_DEVICE_CALLBACK
)(IN PINQUIRYDATA
);
27 typedef NTSTATUS STDCALL
28 (*PCLASS_READ_WRITE
)(IN PDEVICE_OBJECT DeviceObject
,
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
,
38 typedef NTSTATUS STDCALL
39 (*PCLASS_DEVICE_CONTROL
)(IN PDEVICE_OBJECT DeviceObject
,
42 typedef NTSTATUS STDCALL
43 (*PCLASS_SHUTDOWN_FLUSH
)(IN PDEVICE_OBJECT DeviceObject
,
46 typedef NTSTATUS STDCALL
47 (*PCLASS_CREATE_CLOSE
)(IN PDEVICE_OBJECT DeviceObject
,
51 typedef struct _CLASS_INIT_DATA
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
;
68 typedef struct _DEVICE_EXTENSION
70 PDEVICE_OBJECT DeviceObject
;
71 PDEVICE_OBJECT PortDeviceObject
;
72 LARGE_INTEGER PartitionLength
;
73 LARGE_INTEGER StartingOffset
;
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
;
92 KSPIN_LOCK SplitRequestSpinLock
;
93 NPAGED_LOOKASIDE_LIST SrbLookasideListHead
;
102 PKEVENT MediaChangeEvent
;
103 HANDLE MediaChangeEventHandle
;
104 BOOLEAN MediaChangeNoMedia
;
105 ULONG MediaChangeCount
;
106 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
109 /* FUNCTIONS ****************************************************************/
112 ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject
,
117 ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject
,
121 ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject
,
122 IN PSCSI_INQUIRY_DATA LunInfo
,
124 OUT PDEVICE_OBJECT
*NewPortDeviceObject OPTIONAL
);
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
);
134 ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject
,
138 ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData
,
139 OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation
);
142 ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject
,
143 OUT PIO_SCSI_CAPABILITIES
*PortCapabilities
);
146 ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject
,
147 OUT PSCSI_ADAPTER_BUS_INFO
*ConfigInfo
);
150 ScsiClassInitialize(IN PVOID Argument1
,
152 IN PCLASS_INIT_DATA InitializationData
);
155 ScsiClassInitializeSrbLookasideList(PDEVICE_EXTENSION DeviceExtension
,
156 ULONG NumberElements
);
159 ScsiClassInternalIoControl(PDEVICE_OBJECT DeviceObject
,
163 ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject
,
164 PSCSI_REQUEST_BLOCK Srb
,
165 UCHAR MajorFunctionCode
,
171 ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject
,
176 ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject
,
181 ScsiClassModeSense(PDEVICE_OBJECT DeviceObject
,
182 CHAR ModeSenseBuffer
,
187 ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath
);
190 ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject
);
193 ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject
,
194 PSCSI_REQUEST_BLOCK Srb
,
198 BOOLEAN WriteToDevice
);
201 ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject
,
202 PSCSI_REQUEST_BLOCK Srb
,
205 BOOLEAN WriteToDevice
);
208 ScsiClassSplitRequest(PDEVICE_OBJECT DeviceObject
,
212 #endif /* __STORAGE_INCLUDE_CLASS2_H */