SCSICmds_INQUIRY_Definitions.h [plain text]
#ifndef _IOKIT_SCSI_CMDS_INQUIRY_H_
#define _IOKIT_SCSI_CMDS_INQUIRY_H_
#if KERNEL
#include <IOKit/IOTypes.h>
#else
#include <CoreFoundation/CoreFoundation.h>
#endif
#if 0
#pragma mark -
#pragma mark ¥¥¥ INQUIRY Default Page 0 Definitions ¥¥¥
#pragma mark -
#endif
enum
{
kINQUIRY_VENDOR_IDENTIFICATION_Length = 8,
kINQUIRY_PRODUCT_IDENTIFICATION_Length = 16,
kINQUIRY_PRODUCT_REVISION_LEVEL_Length = 4
};
struct SCSICmd_INQUIRY_StandardData
{
UInt8 PERIPHERAL_DEVICE_TYPE; UInt8 RMB; UInt8 VERSION; UInt8 RESPONSE_DATA_FORMAT; UInt8 ADDITIONAL_LENGTH; UInt8 SCCSReserved; UInt8 flags1; UInt8 flags2; char VENDOR_IDENTIFICATION[kINQUIRY_VENDOR_IDENTIFICATION_Length];
char PRODUCT_IDENTIFICATION[kINQUIRY_PRODUCT_IDENTIFICATION_Length];
char PRODUCT_REVISION_LEVEL[kINQUIRY_PRODUCT_REVISION_LEVEL_Length];
};
typedef struct SCSICmd_INQUIRY_StandardData SCSICmd_INQUIRY_StandardData;
typedef SCSICmd_INQUIRY_StandardData* SCSICmd_INQUIRY_StandardDataPtr;
struct SCSICmd_INQUIRY_StandardDataAll
{
UInt8 PERIPHERAL_DEVICE_TYPE; UInt8 RMB; UInt8 VERSION; UInt8 RESPONSE_DATA_FORMAT; UInt8 ADDITIONAL_LENGTH; UInt8 SCCSReserved; UInt8 flags1; UInt8 flags2; char VENDOR_IDENTIFICATION[kINQUIRY_VENDOR_IDENTIFICATION_Length];
char PRODUCT_IDENTIFICATION[kINQUIRY_PRODUCT_IDENTIFICATION_Length];
char PRODUCT_REVISION_LEVEL[kINQUIRY_PRODUCT_REVISION_LEVEL_Length];
UInt8 VendorSpecific1[20];
UInt8 flags3; UInt8 Reserved1;
UInt16 VERSION_DESCRIPTOR[8];
UInt8 Reserved2[22];
UInt8 VendorSpecific2[160];
};
typedef struct SCSICmd_INQUIRY_StandardDataAll SCSICmd_INQUIRY_StandardDataAll;
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 0 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_PERIPHERAL_QUALIFIER_Connected = 0x00,
kINQUIRY_PERIPHERAL_QUALIFIER_SupportedButNotConnected = 0x20,
kINQUIRY_PERIPHERAL_QUALIFIER_NotSupported = 0x60,
kINQUIRY_PERIPHERAL_QUALIFIER_Mask = 0xE0
};
enum
{
kINQUIRY_PERIPHERAL_TYPE_DirectAccessSBCDevice = 0x00,
kINQUIRY_PERIPHERAL_TYPE_SequentialAccessSSCDevice = 0x01,
kINQUIRY_PERIPHERAL_TYPE_PrinterSSCDevice = 0x02,
kINQUIRY_PERIPHERAL_TYPE_ProcessorSPCDevice = 0x03,
kINQUIRY_PERIPHERAL_TYPE_WriteOnceSBCDevice = 0x04,
kINQUIRY_PERIPHERAL_TYPE_CDROM_MMCDevice = 0x05,
kINQUIRY_PERIPHERAL_TYPE_ScannerSCSI2Device = 0x06,
kINQUIRY_PERIPHERAL_TYPE_OpticalMemorySBCDevice = 0x07,
kINQUIRY_PERIPHERAL_TYPE_MediumChangerSMCDevice = 0x08,
kINQUIRY_PERIPHERAL_TYPE_CommunicationsSSCDevice = 0x09,
kINQUIRY_PERIPHERAL_TYPE_StorageArrayControllerSCC2Device = 0x0C,
kINQUIRY_PERIPHERAL_TYPE_EnclosureServicesSESDevice = 0x0D,
kINQUIRY_PERIPHERAL_TYPE_SimplifiedDirectAccessRBCDevice = 0x0E,
kINQUIRY_PERIPHERAL_TYPE_OpticalCardReaderOCRWDevice = 0x0F,
kINQUIRY_PERIPHERAL_TYPE_UnknownOrNoDeviceType = 0x1F,
kINQUIRY_PERIPHERAL_TYPE_Mask = 0x1F
};
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 1 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_PERIPHERAL_RMB_MediumFixed = 0x00,
kINQUIRY_PERIPHERAL_RMB_MediumRemovable = 0x80,
kINQUIRY_PERIPHERAL_RMB_BitMask = 0x80
};
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 2 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_ISO_IEC_VERSION_Mask = 0xC0
};
enum
{
kINQUIRY_ECMA_VERSION_Mask = 0x38
};
enum
{
kINQUIRY_ANSI_VERSION_NoClaimedConformance = 0x00,
kINQUIRY_ANSI_VERSION_SCSI_1_Compliant = 0x01,
kINQUIRY_ANSI_VERSION_SCSI_2_Compliant = 0x02,
kINQUIRY_ANSI_VERSION_SCSI_SPC_Compliant = 0x03,
kINQUIRY_ANSI_VERSION_SCSI_SPC_2_Compliant = 0x04,
kINQUIRY_ANSI_VERSION_Mask = 0x07
};
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 3 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_Byte3_HISUP_Bit = 4,
kINQUIRY_Byte3_NORMACA_Bit = 5,
kINQUIRY_Byte3_AERC_Bit = 7,
kINQUIRY_RESPONSE_DATA_FORMAT_Mask = 0x0F, kINQUIRY_Byte3_HISUP_Mask = (1 << kINQUIRY_Byte3_HISUP_Bit),
kINQUIRY_Byte3_NORMACA_Mask = (1 << kINQUIRY_Byte3_NORMACA_Bit),
kINQUIRY_Byte3_AERC_Mask = (1 << kINQUIRY_Byte3_AERC_Bit)
};
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 6 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_Byte6_Offset = 6,
kINQUIRY_Byte6_ADDR16_Bit = 0, kINQUIRY_Byte6_MCHNGR_Bit = 3,
kINQUIRY_Byte6_MULTIP_Bit = 4,
kINQUIRY_Byte6_VS_Bit = 5,
kINQUIRY_Byte6_ENCSERV_Bit = 6,
kINQUIRY_Byte6_BQUE_Bit = 7,
kINQUIRY_Byte6_ADDR16_Mask = (1 << kINQUIRY_Byte6_ADDR16_Bit), kINQUIRY_Byte6_MCHNGR_Mask = (1 << kINQUIRY_Byte6_MCHNGR_Bit),
kINQUIRY_Byte6_MULTIP_Mask = (1 << kINQUIRY_Byte6_MULTIP_Bit),
kINQUIRY_Byte6_VS_Mask = (1 << kINQUIRY_Byte6_VS_Bit),
kINQUIRY_Byte6_ENCSERV_Mask = (1 << kINQUIRY_Byte6_ENCSERV_Bit),
kINQUIRY_Byte6_BQUE_Mask = (1 << kINQUIRY_Byte6_BQUE_Bit)
};
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 7 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_Byte7_Offset = 7,
kINQUIRY_Byte7_VS_Bit = 0,
kINQUIRY_Byte7_CMDQUE_Bit = 1,
kINQUIRY_Byte7_TRANDIS_Bit = 2, kINQUIRY_Byte7_LINKED_Bit = 3,
kINQUIRY_Byte7_SYNC_Bit = 4, kINQUIRY_Byte7_WBUS16_Bit = 5, kINQUIRY_Byte7_RELADR_Bit = 7,
kINQUIRY_Byte7_VS_Mask = (1 << kINQUIRY_Byte7_VS_Bit),
kINQUIRY_Byte7_CMDQUE_Mask = (1 << kINQUIRY_Byte7_CMDQUE_Bit),
kINQUIRY_Byte7_TRANDIS_Mask = (1 << kINQUIRY_Byte7_TRANDIS_Bit), kINQUIRY_Byte7_LINKED_Mask = (1 << kINQUIRY_Byte7_LINKED_Bit),
kINQUIRY_Byte7_SYNC_Mask = (1 << kINQUIRY_Byte7_SYNC_Bit), kINQUIRY_Byte7_WBUS16_Mask = (1 << kINQUIRY_Byte7_WBUS16_Bit), kINQUIRY_Byte7_RELADR_Mask = (1 << kINQUIRY_Byte7_RELADR_Bit)
};
#if 0
#pragma mark -
#pragma mark ¥ INQUIRY Byte 56 Definitions
#pragma mark -
#endif
enum
{
kINQUIRY_Byte56_Offset = 56,
kINQUIRY_Byte56_IUS_Bit = 0,
kINQUIRY_Byte56_QAS_Bit = 1,
kINQUIRY_Byte56_IUS_Mask = (1 << kINQUIRY_Byte56_IUS_Bit),
kINQUIRY_Byte56_QAS_Mask = (1 << kINQUIRY_Byte56_QAS_Bit),
kINQUIRY_Byte56_CLOCKING_Mask = 0x0C,
kINQUIRY_Byte56_CLOCKING_ONLY_ST = 0x00,
kINQUIRY_Byte56_CLOCKING_ONLY_DT = 0x04,
kINQUIRY_Byte56_CLOCKING_ST_AND_DT = 0x0C
};
#define kIOPropertySCSIPeripheralDeviceType "Peripheral Device Type"
#define kIOPropertySCSIPeripheralDeviceTypeSize 8
#define kIOPropertySCSIVendorIdentification "Vendor Identification"
#define kIOPropertySCSIProductIdentification "Product Identification"
#define kIOPropertySCSIProductRevisionLevel "Product Revision Level"
#if 0
#pragma mark -
#pragma mark ¥¥¥ INQUIRY Supported Vital Products Page 00 Definitions ¥¥¥
#pragma mark -
#endif
struct SCSICmd_INQUIRY_Page00_Header
{
UInt8 PERIPHERAL_DEVICE_TYPE; UInt8 PAGE_CODE; UInt8 RESERVED; UInt8 PAGE_LENGTH; };
typedef struct SCSICmd_INQUIRY_Page00_Header SCSICmd_INQUIRY_Page00_Header;
#if 0
#pragma mark -
#pragma mark ¥¥¥ INQUIRY Device ID Page 83 Definitions ¥¥¥
#pragma mark -
#endif
enum
{
kINQUIRY_Page83_PageCode = 0x83
};
struct SCSICmd_INQUIRY_Page83_Header
{
UInt8 PERIPHERAL_DEVICE_TYPE; UInt8 PAGE_CODE; UInt8 RESERVED; UInt8 PAGE_LENGTH; };
typedef struct SCSICmd_INQUIRY_Page83_Header SCSICmd_INQUIRY_Page83_Header;
struct SCSICmd_INQUIRY_Page83_Identification_Descriptor
{
UInt8 CODE_SET;
UInt8 IDENTIFIER_TYPE;
UInt8 RESERVED;
UInt8 IDENTIFIER_LENGTH;
UInt8 IDENTIFIER;
};
typedef struct SCSICmd_INQUIRY_Page83_Identification_Descriptor SCSICmd_INQUIRY_Page83_Identification_Descriptor;
enum
{
kINQUIRY_Page83_CodeSetReserved = 0x0,
kINQUIRY_Page83_CodeSetBinaryData = 0x1,
kINQUIRY_Page83_CodeSetASCIIData = 0x2,
kINQUIRY_Page83_CodeSetMask = 0xF
};
enum
{
kINQUIRY_Page83_AssociationDevice = 0x00,
kINQUIRY_Page83_AssociationPort = 0x10,
kINQUIRY_Page83_AssociationMask = 0x30
};
enum
{
kINQUIRY_Page83_IdentifierTypeUndefined = 0x0,
kINQUIRY_Page83_IdentifierTypeVendorID = 0x1,
kINQUIRY_Page83_IdentifierTypeIEEE_EUI64 = 0x2,
kINQUIRY_Page83_IdentifierTypeFCNameIdentifier = 0x3,
kINQUIRY_Page83_IdentifierTypeRelativePortIdentifier = 0x4,
kINQUIRY_Page83_IdentifierTypeMask = 0xF
};
#define kIOPropertySCSIINQUIRYDeviceIdentification "INQUIRY Device Identification"
#define kIOPropertySCSIINQUIRYDeviceIdCodeSet "Code Set"
#define kIOPropertySCSIINQUIRYDeviceIdType "Identifier Type"
#define kIOPropertySCSIINQUIRYDeviceIdAssociation "Association"
#define kIOPropertySCSIINQUIRYDeviceIdentifier "Identifier"
#endif