Annotation of ntddk/src/scsi/inc/class.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1991  Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     class.h
                      8: 
                      9: Abstract:
                     10: 
                     11:     These are the structures and defines that are used in the
                     12:     SCSI class drivers.
                     13: 
                     14: Author:
                     15: 
                     16:     Mike Glass (mglass)
                     17:     Jeff Havens (jhavens)
                     18: 
                     19: Revision History:
                     20: 
                     21: --*/
                     22: 
                     23: #ifndef _CLASS_
                     24: 
                     25: #include <ntdddisk.h>
                     26: #include <ntddcdrm.h>
                     27: #include <ntddtape.h>
                     28: #include "ntddscsi.h"
                     29: #include <stdio.h>
                     30: 
                     31: #if DBG
                     32: 
                     33: #define DebugPrint(x) ScsiDebugPrint x
                     34: 
                     35: #else
                     36: 
                     37: #define DebugPrint(x)
                     38: 
                     39: #endif // DBG
                     40: 
                     41: #define MAXIMUM_RETRIES 4
                     42: 
                     43: typedef
                     44: VOID
                     45: (*PCLASS_ERROR) (
                     46:     IN PDEVICE_OBJECT DeviceObject,
                     47:     IN PSCSI_REQUEST_BLOCK Srb,
                     48:     IN OUT NTSTATUS *Status,
                     49:     IN OUT BOOLEAN *Retry
                     50:     );
                     51: 
                     52: typedef struct _DEVICE_EXTENSION {
                     53: 
                     54:     //
                     55:     // Back pointer to device object
                     56:     //
                     57: 
                     58:     PDEVICE_OBJECT DeviceObject;
                     59: 
                     60:     //
                     61:     // Pointer to port device object
                     62:     //
                     63: 
                     64:     PDEVICE_OBJECT PortDeviceObject;
                     65: 
                     66:     //
                     67:     // Length of partition in bytes
                     68:     //
                     69: 
                     70:     LARGE_INTEGER PartitionLength;
                     71: 
                     72:     //
                     73:     // Number of bytes before start of partition
                     74:     //
                     75: 
                     76:     LARGE_INTEGER StartingOffset;
                     77: 
                     78:     //
                     79:     // Pointer to the specific class error routine.
                     80:     //
                     81: 
                     82:     PCLASS_ERROR ClassError;
                     83: 
                     84:     //
                     85:     // SCSI port driver capabilities
                     86:     //
                     87: 
                     88:     PIO_SCSI_CAPABILITIES PortCapabilities;
                     89: 
                     90:     //
                     91:     // Buffer for drive parameters returned in IO device control.
                     92:     //
                     93: 
                     94:     PDISK_GEOMETRY DiskGeometry;
                     95: 
                     96:     //
                     97:     // Back pointer to device object of physical device
                     98:     //
                     99: 
                    100:     PDEVICE_OBJECT PhysicalDevice;
                    101: 
                    102:     //
                    103:     // Request Sense Buffer
                    104:     //
                    105: 
                    106:     PSENSE_DATA SenseData;
                    107: 
                    108:     //
                    109:     // Request timeout in seconds;
                    110:     //
                    111: 
                    112:     ULONG TimeOutValue;
                    113: 
                    114:     //
                    115:     // System device number
                    116:     //
                    117: 
                    118:     ULONG DeviceNumber;
                    119: 
                    120:     //
                    121:     // Add default Srb Flags.
                    122:     //
                    123: 
                    124:     ULONG SrbFlags;
                    125: 
                    126:     //
                    127:     // Total number of SCSI protocol errors on the device.
                    128:     //
                    129: 
                    130:     ULONG ErrorCount;
                    131: 
                    132:     //
                    133:     // Spinlock for split requests
                    134:     //
                    135: 
                    136:     KSPIN_LOCK SplitRequestSpinLock;
                    137: 
                    138:     //
                    139:     // Zone header and spin lock for zoned SRB requests.
                    140:     //
                    141: 
                    142:     PZONE_HEADER SrbZone;
                    143: 
                    144:     PKSPIN_LOCK SrbZoneSpinLock;
                    145: 
                    146:     //
                    147:     // Scsi port number
                    148:     //
                    149: 
                    150:     UCHAR PortNumber;
                    151: 
                    152:     //
                    153:     // SCSI path id
                    154:     //
                    155: 
                    156:     UCHAR PathId;
                    157: 
                    158:     //
                    159:     // SCSI bus target id
                    160:     //
                    161: 
                    162:     UCHAR TargetId;
                    163: 
                    164:     //
                    165:     // SCSI bus logical unit number
                    166:     //
                    167: 
                    168:     UCHAR Lun;
                    169: 
                    170:     //
                    171:     // Log2 of sector size
                    172:     //
                    173: 
                    174:     UCHAR SectorShift;
                    175: 
                    176:     //
                    177:     // Flag to indicate that the device has write caching enabled.
                    178:     //
                    179: 
                    180:     BOOLEAN WriteCache;
                    181: 
                    182:     //
                    183:     // Build SCSI 1 or SCSI 2 CDBs
                    184:     //
                    185: 
                    186:     BOOLEAN UseScsi1;
                    187: 
                    188: } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
                    189: 
                    190: //
                    191: // Define context structure for asynchronous completions.
                    192: //
                    193: 
                    194: typedef struct _COMPLETION_CONTEXT {
                    195:     PDEVICE_OBJECT DeviceObject;
                    196:     SCSI_REQUEST_BLOCK Srb;
                    197: }COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
                    198: 
                    199: 
                    200: NTSTATUS
                    201: ScsiClassGetCapabilities(
                    202:     IN PDEVICE_OBJECT PortDeviceObject,
                    203:     OUT PIO_SCSI_CAPABILITIES *PortCapabilities
                    204:     );
                    205: 
                    206: NTSTATUS
                    207: ScsiClassGetInquiryData(
                    208:     IN PDEVICE_OBJECT PortDeviceObject,
                    209:     IN PSCSI_ADAPTER_BUS_INFO *ConfigInfo
                    210:     );
                    211: 
                    212: NTSTATUS
                    213: ScsiClassReadDriveCapacity(
                    214:     IN PDEVICE_OBJECT DeviceObject
                    215:     );
                    216: 
                    217: VOID
                    218: ScsiClassReleaseQueue(
                    219:     IN PDEVICE_OBJECT DeviceObject
                    220:     );
                    221: 
                    222: NTSTATUS
                    223: ScsiClassAsynchronousCompletion(
                    224:     PDEVICE_OBJECT DeviceObject,
                    225:     PIRP Irp,
                    226:     PVOID Context
                    227:     );
                    228: 
                    229: VOID
                    230: ScsiClassSplitRequest(
                    231:     IN PDEVICE_OBJECT DeviceObject,
                    232:     IN PIRP Irp,
                    233:     IN ULONG MaximumBytes
                    234:     );
                    235: 
                    236: NTSTATUS
                    237: ScsiClassDeviceControl(
                    238:     PDEVICE_OBJECT DeviceObject,
                    239:     PIRP Irp
                    240:     );
                    241: 
                    242: NTSTATUS
                    243: ScsiClassIoComplete(
                    244:     IN PDEVICE_OBJECT DeviceObject,
                    245:     IN PIRP Irp,
                    246:     IN PVOID Context
                    247:     );
                    248: 
                    249: NTSTATUS
                    250: ScsiClassIoCompleteAssociated(
                    251:     IN PDEVICE_OBJECT DeviceObject,
                    252:     IN PIRP Irp,
                    253:     IN PVOID Context
                    254:     );
                    255: 
                    256: BOOLEAN
                    257: ScsiClassInterpretSenseInfo(
                    258:     IN PDEVICE_OBJECT DeviceObject,
                    259:     IN PSCSI_REQUEST_BLOCK Srb,
                    260:     IN UCHAR MajorFunctionCode,
                    261:     IN ULONG IoDeviceCode,
                    262:     IN ULONG RetryCount,
                    263:     OUT NTSTATUS *Status
                    264:     );
                    265: 
                    266: NTSTATUS
                    267: ScsiClassSendSrbSynchronous(
                    268:         PDEVICE_OBJECT DeviceObject,
                    269:         PSCSI_REQUEST_BLOCK Srb,
                    270:         PVOID BufferAddress,
                    271:         ULONG BufferLength,
                    272:         BOOLEAN WriteToDevice
                    273:         );
                    274: 
                    275: NTSTATUS
                    276: ScsiClassSendSrbAsynchronous(
                    277:         PDEVICE_OBJECT DeviceObject,
                    278:         PSCSI_REQUEST_BLOCK Srb,
                    279:         PIRP Irp,
                    280:         PVOID BufferAddress,
                    281:         ULONG BufferLength,
                    282:         BOOLEAN WriteToDevice
                    283:         );
                    284: 
                    285: VOID
                    286: ScsiClassBuildRequest(
                    287:     PDEVICE_OBJECT DeviceObject,
                    288:     PIRP Irp
                    289:     );
                    290: 
                    291: ULONG
                    292: ScsiClassModeSense(
                    293:     IN PDEVICE_OBJECT DeviceObject,
                    294:     IN PCHAR ModeSenseBuffer,
                    295:     IN ULONG Length,
                    296:     IN UCHAR PageMode
                    297:     );
                    298: 
                    299: PVOID
                    300: ScsiClassFindModePage(
                    301:     IN PCHAR ModeSenseBuffer,
                    302:     IN ULONG Length,
                    303:     IN UCHAR PageMode
                    304:     );
                    305: 
                    306: NTSTATUS
                    307: ScsiClassClaimDevice(
                    308:     IN PDEVICE_OBJECT PortDeviceObject,
                    309:     IN PSCSI_INQUIRY_DATA LunInfo,
                    310:     IN BOOLEAN Release,
                    311:     OUT PDEVICE_OBJECT *NewPortDeviceObject OPTIONAL
                    312:     );
                    313: 
                    314: NTSTATUS
                    315: ScsiClassInternalIoControl (
                    316:     IN PDEVICE_OBJECT DeviceObject,
                    317:     IN PIRP Irp
                    318:     );
                    319: 
                    320: #endif /* _CLASS_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.