Annotation of ntddk/src/scsi/inc/class.h, revision 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.