ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

class2.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.