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 #define MAXIMUM_RETRIES 4
18 struct _CLASS_INIT_DATA;
21 (*PCLASS_ERROR)(IN PDEVICE_OBJECT DeviceObject,
22 IN PSCSI_REQUEST_BLOCK Srb,
23 IN OUT NTSTATUS *Status,
24 IN OUT BOOLEAN *Retry);
26 typedef BOOLEAN STDCALL
27 (*PCLASS_DEVICE_CALLBACK)(IN PINQUIRYDATA);
29 typedef NTSTATUS STDCALL
30 (*PCLASS_READ_WRITE)(IN PDEVICE_OBJECT DeviceObject,
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,
40 typedef NTSTATUS STDCALL
41 (*PCLASS_DEVICE_CONTROL)(IN PDEVICE_OBJECT DeviceObject,
44 typedef NTSTATUS STDCALL
45 (*PCLASS_SHUTDOWN_FLUSH)(IN PDEVICE_OBJECT DeviceObject,
48 typedef NTSTATUS STDCALL
49 (*PCLASS_CREATE_CLOSE)(IN PDEVICE_OBJECT DeviceObject,
53 typedef struct _CLASS_INIT_DATA
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;
70 typedef struct _DEVICE_EXTENSION
72 PDEVICE_OBJECT DeviceObject;
73 PDEVICE_OBJECT PortDeviceObject;
74 LARGE_INTEGER PartitionLength;
75 LARGE_INTEGER StartingOffset;
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;
94 KSPIN_LOCK SplitRequestSpinLock;
95 NPAGED_LOOKASIDE_LIST SrbLookasideListHead;
104 PKEVENT MediaChangeEvent;
105 HANDLE MediaChangeEventHandle;
106 BOOLEAN MediaChangeNoMedia;
107 ULONG MediaChangeCount;
108 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
111 /* FUNCTIONS ****************************************************************/
114 ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject,
119 ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject,
123 ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject,
124 IN PSCSI_INQUIRY_DATA LunInfo,
126 OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL);
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);
136 ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject,
140 ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData,
141 OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation);
144 ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject,
145 OUT PIO_SCSI_CAPABILITIES *PortCapabilities);
148 ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject,
149 OUT PSCSI_ADAPTER_BUS_INFO *ConfigInfo);
152 ScsiClassInitialize(IN PVOID Argument1,
154 IN PCLASS_INIT_DATA InitializationData);
157 ScsiClassInitializeSrbLookasideList(PDEVICE_EXTENSION DeviceExtension,
158 ULONG NumberElements);
161 ScsiClassInternalIoControl(PDEVICE_OBJECT DeviceObject,
165 ScsiClassInterpretSenseInfo(PDEVICE_OBJECT DeviceObject,
166 PSCSI_REQUEST_BLOCK Srb,
167 UCHAR MajorFunctionCode,
173 ScsiClassIoComplete(PDEVICE_OBJECT DeviceObject,
178 ScsiClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject,
183 ScsiClassModeSense(PDEVICE_OBJECT DeviceObject,
184 CHAR ModeSenseBuffer,
189 ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath);
192 ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject);
195 ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject,
196 PSCSI_REQUEST_BLOCK Srb,
200 BOOLEAN WriteToDevice);
203 ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject,
204 PSCSI_REQUEST_BLOCK Srb,
207 BOOLEAN WriteToDevice);
210 ScsiClassSplitRequest(PDEVICE_OBJECT DeviceObject,
214 #endif /* __STORAGE_INCLUDE_CLASS2_H */