Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenclass2.h
Go to the documentation of this file.
00001 /* $Id: class2.h 49129 2010-10-12 20:17:55Z pschweitzer $ 00002 * 00003 * COPYRIGHT: See COPYING in the top level directory 00004 * PROJECT: ReactOS kernel 00005 * FILE: services/storage/include/class2.h 00006 * PURPOSE: SCSI class driver definitions 00007 * PROGRAMMER: Eric Kohl 00008 */ 00009 00010 #pragma once 00011 00012 #include "ntddscsi.h" 00013 #include "srb.h" 00014 00015 #define MAXIMUM_RETRIES 15 00016 #define RETRY_WAIT 2000000 /* 200 ms in units of 100 ns */ 00017 00018 // 00019 // Indicates that the device has write caching enabled. 00020 // 00021 00022 #define DEV_WRITE_CACHE 0x00000001 00023 00024 00025 // 00026 // Build SCSI 1 or SCSI 2 CDBs 00027 // 00028 00029 #define DEV_USE_SCSI1 0x00000002 00030 00031 // 00032 // Indicates whether is is safe to send StartUnit commands 00033 // to this device. It will only be off for some removeable devices. 00034 // 00035 00036 #define DEV_SAFE_START_UNIT 0x00000004 00037 00038 // 00039 // Indicates whether it is unsafe to send SCSIOP_MECHANISM_STATUS commands to 00040 // this device. Some devices don't like these 12 byte commands 00041 // 00042 00043 #define DEV_NO_12BYTE_CDB 0x00000008 00044 00045 00046 struct _CLASS_INIT_DATA; 00047 00048 typedef VOID 00049 (NTAPI *PCLASS_ERROR)(IN PDEVICE_OBJECT DeviceObject, 00050 IN PSCSI_REQUEST_BLOCK Srb, 00051 IN OUT NTSTATUS *Status, 00052 IN OUT BOOLEAN *Retry); 00053 00054 typedef BOOLEAN 00055 (NTAPI *PCLASS_DEVICE_CALLBACK)(IN PINQUIRYDATA); 00056 00057 typedef NTSTATUS 00058 (NTAPI *PCLASS_READ_WRITE)(IN PDEVICE_OBJECT DeviceObject, 00059 IN PIRP Irp); 00060 00061 typedef BOOLEAN 00062 (NTAPI *PCLASS_FIND_DEVICES)(IN PDRIVER_OBJECT DriverObject, 00063 IN PUNICODE_STRING RegistryPath, 00064 IN struct _CLASS_INIT_DATA *InitializationData, 00065 IN PDEVICE_OBJECT PortDeviceObject, 00066 IN ULONG PortNumber); 00067 00068 typedef NTSTATUS 00069 (NTAPI *PCLASS_DEVICE_CONTROL)(IN PDEVICE_OBJECT DeviceObject, 00070 IN PIRP Irp); 00071 00072 typedef NTSTATUS 00073 (NTAPI *PCLASS_SHUTDOWN_FLUSH)(IN PDEVICE_OBJECT DeviceObject, 00074 IN PIRP Irp); 00075 00076 typedef NTSTATUS 00077 (NTAPI *PCLASS_CREATE_CLOSE)(IN PDEVICE_OBJECT DeviceObject, 00078 IN PIRP Irp); 00079 00080 00081 typedef struct _CLASS_INIT_DATA 00082 { 00083 ULONG InitializationDataSize; 00084 ULONG DeviceExtensionSize; 00085 DEVICE_TYPE DeviceType; 00086 ULONG DeviceCharacteristics; 00087 PCLASS_ERROR ClassError; 00088 PCLASS_READ_WRITE ClassReadWriteVerification; 00089 PCLASS_DEVICE_CALLBACK ClassFindDeviceCallBack; 00090 PCLASS_FIND_DEVICES ClassFindDevices; 00091 PCLASS_DEVICE_CONTROL ClassDeviceControl; 00092 PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush; 00093 PCLASS_CREATE_CLOSE ClassCreateClose; 00094 PDRIVER_STARTIO ClassStartIo; 00095 } CLASS_INIT_DATA, *PCLASS_INIT_DATA; 00096 00097 00098 typedef struct _DEVICE_EXTENSION 00099 { 00100 PDEVICE_OBJECT DeviceObject; 00101 PDEVICE_OBJECT PortDeviceObject; 00102 LARGE_INTEGER PartitionLength; 00103 LARGE_INTEGER StartingOffset; 00104 ULONG DMByteSkew; 00105 ULONG DMSkew; 00106 BOOLEAN DMActive; 00107 PCLASS_ERROR ClassError; 00108 PCLASS_READ_WRITE ClassReadWriteVerification; 00109 PCLASS_FIND_DEVICES ClassFindDevices; 00110 PCLASS_DEVICE_CONTROL ClassDeviceControl; 00111 PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush; 00112 PCLASS_CREATE_CLOSE ClassCreateClose; 00113 PDRIVER_STARTIO ClassStartIo; 00114 PIO_SCSI_CAPABILITIES PortCapabilities; 00115 PDISK_GEOMETRY_EX DiskGeometry; 00116 PDEVICE_OBJECT PhysicalDevice; 00117 PSENSE_DATA SenseData; 00118 ULONG TimeOutValue; 00119 ULONG DeviceNumber; 00120 ULONG SrbFlags; 00121 ULONG ErrorCount; 00122 KSPIN_LOCK SplitRequestSpinLock; 00123 NPAGED_LOOKASIDE_LIST SrbLookasideListHead; 00124 LONG LockCount; 00125 UCHAR PortNumber; 00126 UCHAR PathId; 00127 UCHAR TargetId; 00128 UCHAR Lun; 00129 UCHAR SectorShift; 00130 UCHAR ReservedByte; 00131 USHORT DeviceFlags; 00132 PKEVENT MediaChangeEvent; 00133 HANDLE MediaChangeEventHandle; 00134 BOOLEAN MediaChangeNoMedia; 00135 ULONG MediaChangeCount; 00136 } DEVICE_EXTENSION, *PDEVICE_EXTENSION; 00137 00138 00139 typedef struct _COMPLETION_CONTEXT 00140 { 00141 PDEVICE_OBJECT DeviceObject; 00142 SCSI_REQUEST_BLOCK Srb; 00143 } COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT; 00144 00145 00146 /* FUNCTIONS ****************************************************************/ 00147 00148 IO_COMPLETION_ROUTINE ScsiClassAsynchronousCompletion; 00149 NTSTATUS NTAPI 00150 ScsiClassAsynchronousCompletion(IN PDEVICE_OBJECT DeviceObject, 00151 IN PIRP Irp, 00152 IN PVOID Context); 00153 00154 VOID NTAPI 00155 ScsiClassBuildRequest(IN PDEVICE_OBJECT DeviceObject, 00156 IN PIRP Irp); 00157 00158 NTSTATUS NTAPI 00159 ScsiClassClaimDevice(IN PDEVICE_OBJECT PortDeviceObject, 00160 IN PSCSI_INQUIRY_DATA LunInfo, 00161 IN BOOLEAN Release, 00162 OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL); 00163 00164 NTSTATUS NTAPI 00165 ScsiClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, 00166 IN PCCHAR ObjectNameBuffer, 00167 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, 00168 IN OUT PDEVICE_OBJECT *DeviceObject, 00169 IN PCLASS_INIT_DATA InitializationData); 00170 00171 NTSTATUS NTAPI 00172 ScsiClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, 00173 IN PIRP Irp); 00174 00175 PVOID NTAPI 00176 ScsiClassFindModePage(IN PCHAR ModeSenseBuffer, 00177 IN ULONG Length, 00178 IN UCHAR PageMode, 00179 IN BOOLEAN Use6Byte); 00180 00181 ULONG NTAPI 00182 ScsiClassFindUnclaimedDevices(IN PCLASS_INIT_DATA InitializationData, 00183 OUT PSCSI_ADAPTER_BUS_INFO AdapterInformation); 00184 00185 NTSTATUS NTAPI 00186 ScsiClassGetCapabilities(IN PDEVICE_OBJECT PortDeviceObject, 00187 OUT PIO_SCSI_CAPABILITIES *PortCapabilities); 00188 00189 NTSTATUS NTAPI 00190 ScsiClassGetInquiryData(IN PDEVICE_OBJECT PortDeviceObject, 00191 OUT PSCSI_ADAPTER_BUS_INFO *ConfigInfo); 00192 00193 ULONG NTAPI 00194 ScsiClassInitialize(IN PVOID Argument1, 00195 IN PVOID Argument2, 00196 IN PCLASS_INIT_DATA InitializationData); 00197 00198 VOID NTAPI 00199 ScsiClassInitializeSrbLookasideList(IN PDEVICE_EXTENSION DeviceExtension, 00200 IN ULONG NumberElements); 00201 00202 NTSTATUS NTAPI 00203 ScsiClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject, 00204 IN PIRP Irp); 00205 00206 BOOLEAN NTAPI 00207 ScsiClassInterpretSenseInfo(IN PDEVICE_OBJECT DeviceObject, 00208 IN PSCSI_REQUEST_BLOCK Srb, 00209 IN UCHAR MajorFunctionCode, 00210 IN ULONG IoDeviceCode, 00211 IN ULONG RetryCount, 00212 OUT NTSTATUS *Status); 00213 00214 NTSTATUS NTAPI 00215 ScsiClassIoComplete(IN PDEVICE_OBJECT DeviceObject, 00216 IN PIRP Irp, 00217 IN PVOID Context); 00218 00219 NTSTATUS NTAPI 00220 ScsiClassIoCompleteAssociated(IN PDEVICE_OBJECT DeviceObject, 00221 IN PIRP Irp, 00222 IN PVOID Context); 00223 00224 ULONG NTAPI 00225 ScsiClassModeSense(IN PDEVICE_OBJECT DeviceObject, 00226 IN PCHAR ModeSenseBuffer, 00227 IN ULONG Length, 00228 IN UCHAR PageMode); 00229 00230 ULONG NTAPI 00231 ScsiClassQueryTimeOutRegistryValue(IN PUNICODE_STRING RegistryPath); 00232 00233 NTSTATUS NTAPI 00234 ScsiClassReadDriveCapacity(IN PDEVICE_OBJECT DeviceObject); 00235 00236 VOID NTAPI 00237 ScsiClassReleaseQueue(IN PDEVICE_OBJECT DeviceObject); 00238 00239 NTSTATUS NTAPI 00240 ScsiClassSendSrbAsynchronous(PDEVICE_OBJECT DeviceObject, 00241 PSCSI_REQUEST_BLOCK Srb, 00242 PIRP Irp, 00243 PVOID BufferAddress, 00244 ULONG BufferLength, 00245 BOOLEAN WriteToDevice); 00246 00247 NTSTATUS NTAPI 00248 ScsiClassSendSrbSynchronous(PDEVICE_OBJECT DeviceObject, 00249 PSCSI_REQUEST_BLOCK Srb, 00250 PVOID BufferAddress, 00251 ULONG BufferLength, 00252 BOOLEAN WriteToDevice); 00253 00254 VOID NTAPI 00255 ScsiClassSplitRequest(IN PDEVICE_OBJECT DeviceObject, 00256 IN PIRP Irp, 00257 IN ULONG MaximumBytes); 00258 00259 NTSTATUS 00260 NTAPI 00261 ScsiClassCheckVerifyComplete( 00262 IN PDEVICE_OBJECT DeviceObject, 00263 IN PIRP Irp, 00264 IN PVOID Context 00265 ); 00266 00267 /* EOF */ Generated on Fri May 25 2012 04:26:35 for ReactOS by
1.7.6.1
|