#include <IOKit/scsi/IOSCSIProtocolInterface.h>

IOKit/scsi/IOSCSIProtocolInterface.h Kernel.framework

@header SCSI Protocol Interface @discussion This file contains definitions for the IOSCSIProtocolInterface class, SCSI Protocol Features used by this interface, and additional constants used by this interface.
13 macros · 3 enums · 2 typedefs

macrokIOPropertySCSIDeviceCharacteristicsKey

@constant kIOPropertySCSIDeviceCharacteristicsKey @discussion This key is used to define SCSI Device Characteristics for a particular device. It is the key for the dictionary containing the keys of characteristics. These keys are only defined between the SCSI Protocol Layer and the SCSI Applicaiton Layer. Some properties may be copied from this dictionary to the more generic Device Characteristics or Protocol Characteristics dictionaries.
#define kIOPropertySCSIDeviceCharacteristicsKey "SCSI Device Characteristics"

macrokIOPropertySCSIInquiryLengthKey

@constant kIOPropertySCSIInquiryLengthKey @discussion This key is used to define a default INQUIRY length to issue to the device. The value is a UInt32 corresponding to the number of bytes to request in the INQUIRY command.
#define kIOPropertySCSIInquiryLengthKey "Inquiry Length"

macrokIOPropertySCSIManualEjectKey

@constant kIOPropertySCSIManualEjectKey @discussion This key is used to indicate that the device is known to be a manual ejectable media device. This property overrides all of the driver checks for determining this capability. This property is a string, although if it exists it should always be true.
#define kIOPropertySCSIManualEjectKey "Manual Eject"

macrokIOPropertyReadTimeOutDurationKey

@constant kIOPropertyReadTimeOutDurationKey @discussion This key is used to define the Read Time Out for a particular device. This property overrides all of the protocol defaults. This property is a value, in milliseconds.
#define kIOPropertyReadTimeOutDurationKey "Read Time Out Duration"

macrokIOPropertyWriteTimeOutDurationKey

@constant kIOPropertyWriteTimeOutDurationKey @discussion This key is used to define the Write Time Out for a particular device. This property overrides all of the protocol defaults. This property is a value, in milliseconds.
#define kIOPropertyWriteTimeOutDurationKey "Write Time Out Duration"

macrokIOPropertyRetryCountKey

@constant kIOPropertyRetryCountKey @discussion This key is used to define the number of Read/Write retries for a particular device. This property overrides all of the protocol defaults. The value is a UInt32 corresponding to the number of retries.
#define kIOPropertyRetryCountKey "Retry Count"

macrokIOPropertyAutonomousSpinDownKey

@constant kIOPropertyAutonomousSpinDownKey @discussion This key is used to indicate that the device is known to have its own internal logic for idle disk spin down. This key is used to mark device which respond poorly to our efforts to manually spin down or spin up the device when it is already in the desired state.
#define kIOPropertyAutonomousSpinDownKey "Autonomous Spin Down"

macrokIOPropertyDoNotPreventMediumRemovalKey

@constant kIOPropertyDoNotPreventMediumRemovalKey @discussion This key is used to indicate that the device either does not require or respond well to PREVENT_ALLOW_MEDIUM_REMOVAL. This property indicates that the PREVENT_ALLOW_MEDIUM_REMOVAL should not be used with the specified device.
#define kIOPropertyDoNotPreventMediumRemovalKey "Do Not Prevent Medium Removal"

macrokIOPropertyEjectRequireStartStopUnitKey

@constant kIOPropertyEjectRequireStartStopUnitKey @discussion This key is used to indicate that while the device may have failed PREVENT_ALLOW_MEDIUM REMOVAL it still requires a START_STOP_UNIT to eject/unload media.
#define kIOPropertyEjectRequireStartStopUnitKey "Eject Requires START_STOP_UNIT"

macrokIOPropertyRequiresRestartEjectKey

@constant kIOPropertyRequiresRestartEjectKey @discussion This key is used to indicate that the device requires a START_STOP_UNIT to eject the device's media prior to restarting to ensuring proper function at next boot cycle.
#define kIOPropertyRequiresRestartEjectKey "Require Restart Eject"

macrokIOPropertyNoSenseDebounceRetries

@constant kIOPropertyNoSenseDebounceRetries @discussion This key is used to indicate how many retries a device may require when it reports NO_SENSE/NO_ADITIONAL_SENSE_INFORMATION as a response to a REQUEST_SENSE.
#define kIOPropertyNoSenseDebounceRetries "NO_SENSE Debounce Retries"

macrokCFBundleIdentifierKey

@constant kCFBundleIdentifierKey @discussion Property key for CFBundleIdentifier.
#define kCFBundleIdentifierKey "CFBundleIdentifier"

macrokIOSCSIArchitectureBundleIdentifierKey

@constant kIOSCSIArchitectureBundleIdentifierKey @discussion IOSCSIArchitectureModelFamily's CFBundle identifier.
#define kIOSCSIArchitectureBundleIdentifierKey "com.apple.iokit.IOSCSIArchitectureModelFamily"

enum(anonymous)

@enum SCSI Protocol Interface Device Notification values @discussion Message values for SCSI Protocol Interface Device Notifications. @constant kSCSIProtocolNotification_DeviceRemoved Private message sent between a SCSI protocol service provider and SCSI application layer driver to indicate device removal. @constant kSCSIProtocolNotification_VerifyDeviceState Private message sent between a SCSI protocol service provider and SCSI application layer driver to indicate device state may have changed and the device state should be re-verified by the SCSI Application Layer driver. An example would be a bus reset which clears the tray locking state of an ATAPI device. @constant kSCSIServicesNotification_ExclusivityChanged Message sent when a change in exclusivity state occurs. Usually in response to acquiring/releasing exclusive access to a device via a user client. @constant kSCSIProtocolNotification_ForcePowerDown Message sent between a SCSI protocol service provider and SCSI application layer driver to initiate transition to the lowest power state. @constant kSCSIProtocolNotification_ForcePowerUp Message sent between a SCSI protocol service provider and SCSI application layer driver to initiate transition to the highest power state.
underlying type unsigned int
kSCSIProtocolNotification_DeviceRemoved1761607696
kSCSIProtocolNotification_VerifyDeviceState1761607712
kSCSIServicesNotification_ExclusivityChanged1761607728
kSCSIProtocolNotification_ForcePowerDown1761607744
kSCSIProtocolNotification_ForcePowerUp1761607760

typedefSCSIProtocolFeature

@typedef SCSIProtocolFeature @discussion Typedef for SCSIProtocolFeature, a 32-bit quantity.
typedef UInt32 SCSIProtocolFeature

enum(anonymous)

@enum SCSI Protocol Features @discussion The list of SCSI Protocol Features currently supported.
underlying type unsigned int
kSCSIProtocolFeature_ACA1@constant kSCSIProtocolFeature_ACA Not yet used.
kSCSIProtocolFeature_CPUInDiskMode2@constant kSCSIProtocolFeature_CPUInDiskMode Used to determine if the SCSI Protocol Services Driver supports a CPU which is in target disk mode.
kSCSIProtocolFeature_ProtocolSpecificPolling3@constant kSCSIProtocolFeature_ProtocolSpecificPolling Used to determine if the SCSI Protocol Services Driver supports protocol specific polling for media. This is used for low-power polling specifically for ATAPI devices on ATA buses
kSCSIProtocolFeature_ProtocolSpecificSleepCommand4@constant kSCSIProtocolFeature_ProtocolSpecificSleepCommand Used to determine if the SCSI Protocol Services Driver supports protocol specific sleep commands to a drive. This is used for sleeping drives specifically ATAPI devices on ATA buses.
kSCSIProtocolFeature_GetMaximumLogicalUnitNumber5@constant kSCSIProtocolFeature_GetMaximumLogicalUnitNumber If the SCSI Protocol Services Driver supports logical units, it will report the maximum addressable ID that it supports in the UInt32 pointer that is passed in as the serviceValue. If only one unit is supported, the driver should return false for this query.
kSCSIProtocolFeature_MaximumReadBlockTransferCount6@constant kSCSIProtocolFeature_MaximumReadBlockTransferCount If the SCSI Protocol Services Driver has a maximum number of blocks that can be transfered in a read request, it will return true to this query and return the block count in the UInt32 pointer that is passed in as the serviceValue.
kSCSIProtocolFeature_MaximumWriteBlockTransferCount7@constant kSCSIProtocolFeature_MaximumWriteBlockTransferCount If the SCSI Protocol Services Driver has a maximum number of blocks that can be transferred in a write request, it will return true to this query and return the block count in the UInt32 pointer that is passed in as the serviceValue.
kSCSIProtocolFeature_MaximumReadTransferByteCount8@constant kSCSIProtocolFeature_MaximumReadTransferByteCount If the SCSI Protocol Services Driver has a maximum byte count that can be transferred in a read request, it will return true to this query and return the byte count in the UInt64 pointer that is passed in as the serviceValue.
kSCSIProtocolFeature_MaximumWriteTransferByteCount9@constant kSCSIProtocolFeature_MaximumWriteTransferByteCount If the SCSI Protocol Services Driver has a maximum byte count that can be transferred in a write request, it will return true to this query and return the byte count in the UInt64 pointer that is passed in as the serviceValue.
kSCSIProtocolFeature_SubmitDefaultInquiryData10@constant kSCSIProtocolFeature_SubmitDefaultInquiryData If the SCSI Protocol Services Driver needs any extra information to make any negotiation settings from the standard INQUIRY data, this will be called to set that appropriately. The serviceValue will point to a SCSICmd_INQUIRY_StandardData buffer. The size of the buffer depends on the SCSI Device Characteristics dictionary for the device or bus. If there is no kIOPropertySCSIInquiryLengthKey value set in the dictionary or if it doesn't exist, then the size of the data will be the size of the full amount of Inquiry retrieved from the device.
kSCSIProtocolFeature_ProtocolAlwaysReportsAutosenseData11@constant kSCSIProtocolFeature_ProtocolAlwaysReportsAutosenseData If the SCSI Protocol Services Driver always reports available autosense data when a kSCSITaskStatus_CHECK_CONDITION is set, then the protocol layer should return true. E.g. FireWire transport drivers should respond true to this.
kSCSIProtocolFeature_ProtocolSpecificPowerOff12@constant kSCSIProtocolFeature_ProtocolSpecificPowerOff If the SCSI Protocol Services Driver supports removing the power to the drive, then the protocol layer should return true. This is used for aggressive power management, specifically for ATAPI devices on ATA buses.
kSCSIProtocolFeature_ProtocolSpecificPowerControl13@constant kSCSIProtocolFeature_ProtocolSpecificPowerControl Used to determine if the SCSI Protocol Services Driver supports switching the power to the drive on and off. This is used for aggressive power management, specifically for SATAPI devices on AHCI buses.
kSCSIProtocolFeature_ProtocolSpecificAsyncNotification14@constant kSCSIProtocolFeature_ProtocolSpecificAsyncNotification Used to determine if the SCSI Protocol Services Driver supports asynchronous notifications from the drive. This is used to prevent polling for media, specifically for SATAPI devices on AHCI buses.
kSCSIProtocolFeature_HierarchicalLogicalUnits15kSCSIProtocolFeature_HierarchicalLogicalUnits: If the SCSI Protocol Services layer supports hierarchical logical units, then the protocol services layer should report true and use IOSCSIProtocolServices::GetLogicalUnitBytes() to retrieve the full 8 bytes of LUN information.
kSCSIProtocolFeature_MultiPathing16kSCSIProtocolFeature_MultiPathing: If the SCSI Protocol Services layer supports multi-pathing, then the protocol services layer should report true. This is used to support multiple paths to a logical unit by creating a IOSCSIMultipathedLogicalUnit object.
kSCSIProtocolFeature_ProtocolSpecificLinkRetrain17kSCSIProtocolFeature_ProtocolSpecificLinkRetrain: If the SCSI Protocol Services layer supports link retrain, then the protocol services layer should report true.
kSCSIProtocolFeature_AbortAllTasks18kSCSIProtocolFeature_AbortAllTasks: SCSI Protocol Services layer should abort all tasks outstanding with it.
kSCSIProtocolFeature_SMARTStatus19kSCSIProtocolFeature_SMARTStatus If the SCSI Protocol Service layer want to allow ATA SMART commands, then the protocol layer sould return true.
kSCSIProtocolFeature_HighThroughputOptions20kSCSIProtocolFeature_HighThroughputOptions If the SCSI Protocol Services Driver has high throughput options it will return true to this query and return the options in the UInt32 pointer that is passed in as the serviceValue.

typedefSCSIProtocolPowerState

@typedef SCSIProtocolPowerState @discussion Typedef for SCSIProtocolPowerState, a 32-bit quantity.
typedef UInt32 SCSIProtocolPowerState

enum(anonymous)

@enum SCSI Protocol Power States @discussion The list of SCSI Protocol Power States.
underlying type unsigned int
kSCSIProtocolPowerStateOff0@constant kSCSIProtocolPowerStateOff Off power state.
kSCSIProtocolPowerStateOn1@constant kSCSIProtocolPowerStateOn On power state.