#ifndef __MINITAPE_H
#define __MINITAPE_H
-/* Helper macro to enable gcc's extension. */
-#ifndef __GNU_EXTENSION
-#ifdef __GNUC__
-#define __GNU_EXTENSION __extension__
-#else
-#define __GNU_EXTENSION
-#endif
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
#define MEDIA_CURRENTLY_MOUNTED 0x80000000
typedef enum _TAPE_STATUS {
- TAPE_STATUS_SEND_SRB_AND_CALLBACK,
- TAPE_STATUS_CALLBACK,
- TAPE_STATUS_CHECK_TEST_UNIT_READY,
- TAPE_STATUS_SUCCESS,
- TAPE_STATUS_INSUFFICIENT_RESOURCES,
- TAPE_STATUS_NOT_IMPLEMENTED,
- TAPE_STATUS_INVALID_DEVICE_REQUEST,
- TAPE_STATUS_INVALID_PARAMETER,
- TAPE_STATUS_MEDIA_CHANGED,
- TAPE_STATUS_BUS_RESET,
- TAPE_STATUS_SETMARK_DETECTED,
- TAPE_STATUS_FILEMARK_DETECTED,
- TAPE_STATUS_BEGINNING_OF_MEDIA,
- TAPE_STATUS_END_OF_MEDIA,
- TAPE_STATUS_BUFFER_OVERFLOW,
- TAPE_STATUS_NO_DATA_DETECTED,
- TAPE_STATUS_EOM_OVERFLOW,
- TAPE_STATUS_NO_MEDIA,
- TAPE_STATUS_IO_DEVICE_ERROR,
- TAPE_STATUS_UNRECOGNIZED_MEDIA,
- TAPE_STATUS_DEVICE_NOT_READY,
- TAPE_STATUS_MEDIA_WRITE_PROTECTED,
- TAPE_STATUS_DEVICE_DATA_ERROR,
- TAPE_STATUS_NO_SUCH_DEVICE,
- TAPE_STATUS_INVALID_BLOCK_LENGTH,
- TAPE_STATUS_IO_TIMEOUT,
- TAPE_STATUS_DEVICE_NOT_CONNECTED,
- TAPE_STATUS_DATA_OVERRUN,
- TAPE_STATUS_DEVICE_BUSY,
- TAPE_STATUS_REQUIRES_CLEANING,
- TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
+ TAPE_STATUS_SEND_SRB_AND_CALLBACK,
+ TAPE_STATUS_CALLBACK,
+ TAPE_STATUS_CHECK_TEST_UNIT_READY,
+ TAPE_STATUS_SUCCESS,
+ TAPE_STATUS_INSUFFICIENT_RESOURCES,
+ TAPE_STATUS_NOT_IMPLEMENTED,
+ TAPE_STATUS_INVALID_DEVICE_REQUEST,
+ TAPE_STATUS_INVALID_PARAMETER,
+ TAPE_STATUS_MEDIA_CHANGED,
+ TAPE_STATUS_BUS_RESET,
+ TAPE_STATUS_SETMARK_DETECTED,
+ TAPE_STATUS_FILEMARK_DETECTED,
+ TAPE_STATUS_BEGINNING_OF_MEDIA,
+ TAPE_STATUS_END_OF_MEDIA,
+ TAPE_STATUS_BUFFER_OVERFLOW,
+ TAPE_STATUS_NO_DATA_DETECTED,
+ TAPE_STATUS_EOM_OVERFLOW,
+ TAPE_STATUS_NO_MEDIA,
+ TAPE_STATUS_IO_DEVICE_ERROR,
+ TAPE_STATUS_UNRECOGNIZED_MEDIA,
+ TAPE_STATUS_DEVICE_NOT_READY,
+ TAPE_STATUS_MEDIA_WRITE_PROTECTED,
+ TAPE_STATUS_DEVICE_DATA_ERROR,
+ TAPE_STATUS_NO_SUCH_DEVICE,
+ TAPE_STATUS_INVALID_BLOCK_LENGTH,
+ TAPE_STATUS_IO_TIMEOUT,
+ TAPE_STATUS_DEVICE_NOT_CONNECTED,
+ TAPE_STATUS_DATA_OVERRUN,
+ TAPE_STATUS_DEVICE_BUSY,
+ TAPE_STATUS_REQUIRES_CLEANING,
+ TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
} TAPE_STATUS, *PTAPE_STATUS;
#define INQUIRYDATABUFFERSIZE 36
+
#ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
#define _INQUIRYDATA_DEFINED
+
typedef struct _INQUIRYDATA {
- UCHAR DeviceType : 5;
- UCHAR DeviceTypeQualifier : 3;
- UCHAR DeviceTypeModifier : 7;
- UCHAR RemovableMedia : 1;
- __GNU_EXTENSION union {
- UCHAR Versions;
- __GNU_EXTENSION struct {
- UCHAR ANSIVersion : 3;
- UCHAR ECMAVersion : 3;
- UCHAR ISOVersion : 2;
- };
- };
- UCHAR ResponseDataFormat : 4;
- UCHAR HiSupport : 1;
- UCHAR NormACA : 1;
- UCHAR TerminateTask : 1;
- UCHAR AERC : 1;
- UCHAR AdditionalLength;
- UCHAR Reserved;
- UCHAR Addr16 : 1;
- UCHAR Addr32 : 1;
- UCHAR AckReqQ: 1;
- UCHAR MediumChanger : 1;
- UCHAR MultiPort : 1;
- UCHAR ReservedBit2 : 1;
- UCHAR EnclosureServices : 1;
- UCHAR ReservedBit3 : 1;
- UCHAR SoftReset : 1;
- UCHAR CommandQueue : 1;
- UCHAR TransferDisable : 1;
- UCHAR LinkedCommands : 1;
- UCHAR Synchronous : 1;
- UCHAR Wide16Bit : 1;
- UCHAR Wide32Bit : 1;
- UCHAR RelativeAddressing : 1;
- UCHAR VendorId[8];
- UCHAR ProductId[16];
- UCHAR ProductRevisionLevel[4];
- UCHAR VendorSpecific[20];
- UCHAR Reserved3[40];
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR DeviceTypeModifier:7;
+ UCHAR RemovableMedia:1;
+ __GNU_EXTENSION union {
+ UCHAR Versions;
+ __GNU_EXTENSION struct {
+ UCHAR ANSIVersion:3;
+ UCHAR ECMAVersion:3;
+ UCHAR ISOVersion:2;
+ };
+ };
+ UCHAR ResponseDataFormat:4;
+ UCHAR HiSupport:1;
+ UCHAR NormACA:1;
+ UCHAR TerminateTask:1;
+ UCHAR AERC:1;
+ UCHAR AdditionalLength;
+ UCHAR Reserved;
+ UCHAR Addr16:1;
+ UCHAR Addr32:1;
+ UCHAR AckReqQ:1;
+ UCHAR MediumChanger:1;
+ UCHAR MultiPort:1;
+ UCHAR ReservedBit2:1;
+ UCHAR EnclosureServices:1;
+ UCHAR ReservedBit3:1;
+ UCHAR SoftReset:1;
+ UCHAR CommandQueue:1;
+ UCHAR TransferDisable:1;
+ UCHAR LinkedCommands:1;
+ UCHAR Synchronous:1;
+ UCHAR Wide16Bit:1;
+ UCHAR Wide32Bit:1;
+ UCHAR RelativeAddressing:1;
+ UCHAR VendorId[8];
+ UCHAR ProductId[16];
+ UCHAR ProductRevisionLevel[4];
+ UCHAR VendorSpecific[20];
+ UCHAR Reserved3[40];
} INQUIRYDATA, *PINQUIRYDATA;
-#endif
+
+#endif /* _INQUIRYDATA_DEFINED */
typedef struct _MODE_CAPABILITIES_PAGE {
- UCHAR PageCode : 6;
- UCHAR Reserved1 : 2;
- UCHAR PageLength;
- UCHAR Reserved2[2];
- UCHAR RO : 1;
- UCHAR Reserved3 : 4;
- UCHAR SPREV : 1;
- UCHAR Reserved4 : 2;
- UCHAR Reserved5 : 3;
- UCHAR EFMT : 1;
- UCHAR Reserved6 : 1;
- UCHAR QFA : 1;
- UCHAR Reserved7 : 2;
- UCHAR LOCK : 1;
- UCHAR LOCKED : 1;
- UCHAR PREVENT : 1;
- UCHAR UNLOAD : 1;
- UCHAR Reserved8 : 2;
- UCHAR ECC : 1;
- UCHAR CMPRS : 1;
- UCHAR Reserved9 : 1;
- UCHAR BLK512 : 1;
- UCHAR BLK1024 : 1;
- UCHAR Reserved10 : 4;
- UCHAR SLOWB : 1;
- UCHAR MaximumSpeedSupported[2];
- UCHAR MaximumStoredDefectedListEntries[2];
- UCHAR ContinuousTransferLimit[2];
- UCHAR CurrentSpeedSelected[2];
- UCHAR BufferSize[2];
- UCHAR Reserved11[2];
+ UCHAR PageCode:6;
+ UCHAR Reserved1:2;
+ UCHAR PageLength;
+ UCHAR Reserved2[2];
+ UCHAR RO:1;
+ UCHAR Reserved3:4;
+ UCHAR SPREV:1;
+ UCHAR Reserved4:2;
+ UCHAR Reserved5:3;
+ UCHAR EFMT:1;
+ UCHAR Reserved6:1;
+ UCHAR QFA:1;
+ UCHAR Reserved7:2;
+ UCHAR LOCK:1;
+ UCHAR LOCKED:1;
+ UCHAR PREVENT:1;
+ UCHAR UNLOAD:1;
+ UCHAR Reserved8:2;
+ UCHAR ECC:1;
+ UCHAR CMPRS:1;
+ UCHAR Reserved9:1;
+ UCHAR BLK512:1;
+ UCHAR BLK1024:1;
+ UCHAR Reserved10:4;
+ UCHAR SLOWB:1;
+ UCHAR MaximumSpeedSupported[2];
+ UCHAR MaximumStoredDefectedListEntries[2];
+ UCHAR ContinuousTransferLimit[2];
+ UCHAR CurrentSpeedSelected[2];
+ UCHAR BufferSize[2];
+ UCHAR Reserved11[2];
} MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE;
-typedef BOOLEAN DDKAPI
+typedef BOOLEAN NTAPI
(*TAPE_VERIFY_INQUIRY_ROUTINE)(
- IN PINQUIRYDATA InquiryData,
- IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
+ IN PINQUIRYDATA InquiryData,
+ IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
-typedef VOID DDKAPI
+typedef VOID NTAPI
(*TAPE_EXTENSION_INIT_ROUTINE)(
- IN PVOID MinitapeExtension,
- IN PINQUIRYDATA InquiryData,
- IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
+ IN PVOID MinitapeExtension,
+ IN PINQUIRYDATA InquiryData,
+ IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
-typedef VOID DDKAPI
+typedef VOID NTAPI
(*TAPE_ERROR_ROUTINE)(
- IN PVOID MinitapeExtension,
- IN PSCSI_REQUEST_BLOCK Srb,
- IN OUT PTAPE_STATUS TapeStatus);
+ IN PVOID MinitapeExtension,
+ IN PSCSI_REQUEST_BLOCK Srb,
+ IN OUT PTAPE_STATUS TapeStatus);
-typedef TAPE_STATUS DDKAPI
+typedef TAPE_STATUS NTAPI
(*TAPE_PROCESS_COMMAND_ROUTINE)(
- IN OUT PVOID MinitapeExtension,
- IN OUT PVOID CommandExtension,
- IN OUT PVOID CommandParameters,
- IN OUT PSCSI_REQUEST_BLOCK Srb,
- IN ULONG CallNumber,
- IN TAPE_STATUS StatusOfLastCommand,
- IN OUT PULONG RetryFlags);
+ IN OUT PVOID MinitapeExtension,
+ IN OUT PVOID CommandExtension,
+ IN OUT PVOID CommandParameters,
+ IN OUT PSCSI_REQUEST_BLOCK Srb,
+ IN ULONG CallNumber,
+ IN TAPE_STATUS StatusOfLastCommand,
+ IN OUT PULONG RetryFlags);
#define TAPE_RETRY_MASK 0x0000FFFF
#define IGNORE_ERRORS 0x00010000
#define RETURN_ERRORS 0x00020000
typedef struct _TAPE_INIT_DATA {
- TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry;
- BOOLEAN QueryModeCapabilitiesPage;
- ULONG MinitapeExtensionSize;
- TAPE_EXTENSION_INIT_ROUTINE ExtensionInit;
- ULONG DefaultTimeOutValue;
- TAPE_ERROR_ROUTINE TapeError;
- ULONG CommandExtensionSize;
- TAPE_PROCESS_COMMAND_ROUTINE CreatePartition;
- TAPE_PROCESS_COMMAND_ROUTINE Erase;
- TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters;
- TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters;
- TAPE_PROCESS_COMMAND_ROUTINE GetPosition;
- TAPE_PROCESS_COMMAND_ROUTINE GetStatus;
- TAPE_PROCESS_COMMAND_ROUTINE Prepare;
- TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters;
- TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters;
- TAPE_PROCESS_COMMAND_ROUTINE SetPosition;
- TAPE_PROCESS_COMMAND_ROUTINE WriteMarks;
- TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */
+ TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry;
+ BOOLEAN QueryModeCapabilitiesPage;
+ ULONG MinitapeExtensionSize;
+ TAPE_EXTENSION_INIT_ROUTINE ExtensionInit;
+ ULONG DefaultTimeOutValue;
+ TAPE_ERROR_ROUTINE TapeError;
+ ULONG CommandExtensionSize;
+ TAPE_PROCESS_COMMAND_ROUTINE CreatePartition;
+ TAPE_PROCESS_COMMAND_ROUTINE Erase;
+ TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE GetPosition;
+ TAPE_PROCESS_COMMAND_ROUTINE GetStatus;
+ TAPE_PROCESS_COMMAND_ROUTINE Prepare;
+ TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters;
+ TAPE_PROCESS_COMMAND_ROUTINE SetPosition;
+ TAPE_PROCESS_COMMAND_ROUTINE WriteMarks;
+ TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */
} TAPE_INIT_DATA, *PTAPE_INIT_DATA;
typedef struct _TAPE_PHYS_POSITION {
- ULONG SeekBlockAddress;
- ULONG SpaceBlockCount;
+ ULONG SeekBlockAddress;
+ ULONG SpaceBlockCount;
} TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
#pragma pack(pop)