#include <IOKit/ata/IOATATypes.h>

IOKit/ata/IOATATypes.h Kernel.framework

includes: IOKit/IOTypes.h
22 macros · 18 enums · 3 structs · 3 typedefs

macrokATADevPropertyKey

@header IOATAtypes.h @discussion contains various definitions and constants for use in the IOATAFamily and clients. Header Doc is incomplete at this point, but file is heavily commented. property strings
#define kATADevPropertyKey "ata device type"

macrokATATypeATAString

#define kATATypeATAString "ata"

macrokATATypeATAPIString

#define kATATypeATAPIString "atapi"

macrokATATypeUnknownString

#define kATATypeUnknownString "unknown"

macrokATAVendorPropertyKey

#define kATAVendorPropertyKey "device model"

macrokATARevisionPropertyKey

#define kATARevisionPropertyKey "device revision"

macrokATASerialNumPropertyKey

#define kATASerialNumPropertyKey "device serial"

macrokATAUnitNumberKey

#define kATAUnitNumberKey "unit number"

macrokATASocketKey

#define kATASocketKey "socket type"

macrokATAInternalSocketString

#define kATAInternalSocketString "internal"

macrokATAMediaBaySocketString

#define kATAMediaBaySocketString "media-bay"

macrokATAPCCardSocketString

#define kATAPCCardSocketString "pccard"

macrokATAInternalSATAString

#define kATAInternalSATAString "serial-ata"

macrokATASATABayString

#define kATASATABayString "sata-bay"

macrokATAInternalSATA2

#define kATAInternalSATA2 "serial-ata-2"

macrokATASATA2BayString

#define kATASATA2BayString "sata-2-bay"

macrokATAUnkownSocketString

#define kATAUnkownSocketString "unknown"

macrokATANotifyOnChangeKey

#define kATANotifyOnChangeKey "media-notify"

macroIOATARegPtr8

allows for porting to non-memory-mapped IO systems, such as x86. for such a platform, create a class and overload the assignment operators so that the correct IO operation is performed and define the type for that architecture port.
#define IOATARegPtr8 volatile UInt8*

macroIOATARegPtr16

#define IOATARegPtr16 volatile UInt16*

macroIOATARegPtr32

#define IOATARegPtr32 volatile UInt32*

macroIOATARegPtr8Cast

#define IOATARegPtr8Cast(x) ((IOATARegPtr8)(x))

enumataSocketType

underlying type unsigned int
kUnknownSocket0
kInternalATASocket1
kMediaBaySocket2
kPCCardSocket3
kInternalSATA4
kSATABay5
kInternalSATA26
kSATA2Bay7

enumataDeviceType

underlying type unsigned int
kUnknownATADeviceType0
kATADeviceType1
kATAPIDeviceType2

enumatapiConfig

enum for bits 5 and 6 of word zero of the identify packet device info data. shift word-0 5-bits left, mask 0x03 and these enums apply.
underlying type unsigned int
kATAPIDRQSlow0
kATAPIIRQPacket1
kATAPIDRQFast16
kATAPIUnknown17

enumataUnitID

underlying type int
kATAInvalidDeviceID-1
kATADevice0DeviceID0aka, Primary. Device 0 is the correct terminology
kATADevice1DeviceID1aka, Secondary. Device 1 is the correct terminology

enum(anonymous)

underlying type unsigned int
kATADefaultSectorSize512

enum(anonymous)

Task file definition *** Error Register ***
underlying type unsigned int
bATABadBlock7bit number of bad block error bit
bATAUncorrectable6bit number of uncorrectable error bit
bATAMediaChanged5bit number of media changed indicator
bATAIDNotFound4bit number of ID not found error bit
bATAMediaChangeReq3bit number of media changed request
bATACommandAborted2bit number of command abort bit
bATATrack0NotFound1bit number of track not found
bATAAddressNotFound0bit number of address mark not found
mATABadBlock128Bad Block Detected
mATAUncorrectable64Uncorrectable Data Error
mATAMediaChanged32Media Changed Indicator (for removable)
mATAIDNotFound16ID Not Found
mATAMediaChangeReq8Media Change Requested (NOT IMPLEMENTED)
mATACommandAborted4Aborted Command
mATATrack0NotFound2Track 0 Not Found
mATAAddressNotFound1Address Mark Not Found

enum(anonymous)

Task file definition *** Features register ***
underlying type unsigned int
bATAPIuseDMA0bit number of useDMA bit (ATAPI)
mATAPIuseDMA1

enum(anonymous)

Task file definition *** ataTFSDH Register ***
underlying type unsigned int
mATAHeadNumber15Head Number (bits 0-3)
mATASectorSize160bit 7=1; bit 5 = 01 (512 sector size) <DP4>
mATADriveSelect16Drive (0 = primary, 1 = secondary)
mATALBASelect64LBA mode bit (0 = chs, 1 = LBA)

enum(anonymous)

Task file definition *** Status Register ***
underlying type unsigned int
bATABusy7bit number of BSY bit
bATADriveReady6bit number of drive ready bit
bATAWriteFault5bit number of write fault bit
bATASeekComplete4bit number of seek complete bit
bATADataRequest3bit number of data request bit
bATADataCorrected2bit number of data corrected bit
bATAIndex1bit number of index mark
bATAError0bit number of error bit
mATABusy128Unit is busy
mATADriveReady64Unit is ready
mATAWriteFault32Unit has a write fault condition
mATASeekComplete16Unit seek complete
mATADataRequest8Unit data request
mATADataCorrected4Data corrected
mATAIndex2Index mark - NOT USED
mATAError1Error condition - see error register

enum(anonymous)

Task file definition *** Device Control Register ***
underlying type unsigned int
bATADCROne3bit number of always one bit
bATADCRReset2bit number of reset bit
bATADCRnIntEnable1bit number of interrupt disable
mATADCROne8always one bit
mATADCRReset4Reset (1 = reset)
mATADCRnIntEnable2Interrupt Disable(0 = enabled)

enumataRegMask

'ataRegMask' field of the ataRegAccess definition
underlying type unsigned int
bATAAltSDevCValid14bit number of alternate status/device cntrl valid bit
bATAStatusCmdValid7bit number of status/command valid bit
bATASDHValid6bit number of ataTFSDH valid bit
bATACylinderHiValid5bit number of cylinder high valid bit
bATACylinderLoValid4bit number of cylinder low valid bit
bATASectorNumValid3bit number of sector number valid bit
bATASectorCntValid2bit number of sector count valid bit
bATAErrFeaturesValid1bit number of error/features valid bit
bATADataValid0bit number of data valid bit
mATAAltSDevCValid16384alternate status/device control valid
mATAStatusCmdValid128status/command valid
mATASDHValid64ataTFSDH valid
mATACylinderHiValid32cylinder high valid
mATACylinderLoValid16cylinder low valid
mATASectorNumValid8sector number valid
mATASectorCntValid4sector count valid
mATAErrFeaturesValid2error/features valid
mATADataValid1data valid

enumataFlags

underlying type unsigned int
bATAFlagQuiesce20
bATAFlagNoIRQ19bit Number of no IRQ protocol flag
bATAFlag48BitLBA18
bATAFlagDMAQueued17
bATAFlagOverlapped16
bATAFlagUseConfigSpeed15bit number of use configured speed flag
bATAFlagByteSwap14bit number of byte swap flag
bATAFlagIORead13bit number of I/O read flag
bATAFlagIOWrite12bit number of I/O write flag
bATAFlagTFAccessResult8bit number of get register results on command completion.
bATAFlagUseDMA7bit number of use DMA flag
bATAFlagProtocolATAPI5bit number of ATAPI protocol
bATAFlagImmediate1bit number of immediate flag
bATAFlagTFAccess0bit number of TF access
mATAFlagQuiesce1048576
mATAFlagUseNoIRQ524288Special purpose! Avoid using! No-IRQ, polled synchronous protocol valid only for PIO commands
mATAFlag48BitLBA262144Use 48 bit extended LBA protocol on this command. Requires support from the controller.
mATAFlagDMAQueued131072Use tagged dma queuing protocol on this command. Requires support from the controller.
mATAFlagOverlapped65536Use overllaped protocol on this command. Requires support from the controller.
mATAFlagUseConfigSpeed32768Use the configured interface speed = true. False = use default PIO (slow) speed. valid only for PIO commands
mATAFlagByteSwap16384Swap data bytes (read - after; write - before)
mATAFlagIORead8192Read (in) operation
mATAFlagIOWrite4096Write (out) operation
mATAFlagTFAccessResult256get contents of TaskFile registers indicated in TFMask on command completion, even if no error
mATAFlagUseDMA128
mATAFlagProtocolATAPI32ATAPI protocol indicator
mATAFlagImmediate2Put command at head of queue
mATAFlagTFAccess1Return Taskfile on error status

enumataOpcode

The Function codes sent to controllers
underlying type unsigned int
kATANoOp0
kATAFnExecIO1Execute ATA I/O
kATAPIFnExecIO2ATAPI I/O
kATAFnRegAccess3Register Access
kATAFnQFlush4I/O Queue flush requests for your unit number
kATAFnBusReset5Reset ATA bus

enumataEventCode

The ATA Event codes sent when calling the device driver's event handler
underlying type unsigned int
kATANullEvent0Just kidding -- nothing happened
kATAOnlineEvent1An ATA device has come online
kATAOfflineEvent2An ATA device has gone offline
kATARemovedEvent3An ATA device has been removed from the bus
kATAResetEvent4Someone gave a hard reset to the drive
kATAOfflineRequest5Someone requesting to offline the drive
kATAEjectRequest6Someone requesting to eject the drive
kATAPIResetEvent7Someone gave a ATAPI reset to the drive
kATAReservedEvent128RESERVED

enum(anonymous)

underlying type unsigned int
kSOFTRESET8ATAPI Soft Reset command
kPACKET160ATAPI Packet command
kID_DRIVE161ATAPI Identify drive command

enum(anonymous)

ATA Command Opcode definition
underlying type unsigned int
kATAcmdWORetry1Without I/O retry option
kATAcmdNOP0NOP operation - media detect
kATAcmdRecal16Recalibrate command
kATAcmdRead32Read command
kATAcmdReadLong34Read Long command
kATAcmdReadExtended36Read Extended (with retries)
kATAcmdReadDMAExtended37Read DMA Extended (with retries)
kATAcmdWrite48Write command
kATAcmdWriteLong50Write Long
kATAcmdWriteExtended52Write Extended (with retries)
kATAcmdWriteDMAExtended53Write DMA Extended (with retries)
kATAcmdWriteVerify60Write verify
kATAcmdReadVerify64Read Verify command
kATAcmdFormatTrack80Format Track command
kATAcmdSeek112Seek command
kATAcmdDiagnostic144Drive Diagnostic command
kATAcmdInitDrive145Init drive parameters command
kATAcmdReadMultiple196Read multiple
kATAcmdWriteMultiple197Write multiple
kATAcmdSetRWMultiple198Set Multiple for Read/Write Multiple
kATAcmdReadDMA200Read DMA (with retries)
kATAcmdWriteDMA202Write DMA (with retries)
kATAcmdMCAcknowledge219Acknowledge media change - removable
kATAcmdDoorLock222Door lock
kATAcmdDoorUnlock223Door unlock
kATAcmdStandbyImmed224Standby Immediate
kATAcmdIdleImmed225Idle Immediate
kATAcmdStandby226Standby
kATAcmdIdle227Idle
kATAcmdReadBuffer228Read sector buffer command
kATAcmdCheckPowerMode229Check power mode command <04/04/94>
kATAcmdSleep230Sleep
kATAcmdFlushCache231Flush Cache
kATAcmdWriteBuffer232Write sector buffer command
kATAcmdWriteSame233Write same data to multiple sectors
kATAcmdFlushCacheExtended234Flush Cache Extended
kATAcmdDriveIdentify236Identify Drive command
kATAcmdMediaEject237Media Eject
kATAcmdSetFeatures239Set Features

enum(anonymous)

Set feature command opcodes
underlying type unsigned int
kATAEnableWriteCache2Enable write cache
kATASetTransferMode3Set transfer mode
kATAEnableAPM5Enable Advanced Power Management
kATASetPIOMode8PIO Flow Control Tx Mode bit
kATADisableWriteCache130disable write cache
kATAEnableReadAhead170Read look-ahead enable

structataTaskFile

task file for ata
size 7, align 1
UInt8ataTFFeatures<-> Error(R) or ataTFFeatures(W) register image
UInt8ataTFCount<-> Sector count/remaining
UInt8ataTFSector<-> Sector start/finish
UInt8ataTFCylLo<-> ataTFCylLo
UInt8ataTFCylHigh<-> ataTFCylHigh
UInt8ataTFSDH<-> ataTFSDH register image
UInt8ataTFCommand<-> Status(R) or Command(W) register image

typedefataTaskFile

typedef struct ataTaskFile ataTaskFile;

structataRegisterImage

size 12, align 2
ataTaskFiletaskFile
UInt16ataDataRegister<-> Data register.
UInt8ataAltSDevCReg<->: Alternate status(R) or Device Control(W) register image

typedefataRegisterImage

typedef struct ataRegisterImage ataRegisterImage;

structATAPICmdPacket

size 18, align 2
UInt16atapiPacketSizeSize of command packet in bytes
UInt16[8]atapiCommandByteThe command packet itself

typedefATAPICmdPacket

typedef struct ATAPICmdPacket ATAPICmdPacket;

enum(anonymous)

Error and result codes: TBD
underlying type int
kATAErrUnknownType-1
kATANoErr0
kATAQueueEmpty1
kATAUnknownOpcode2
kATATimeoutErr3
kATAInvalidDevID4
kATAErrDevBusy5
kATAModeNotSupported6
kATADevIntNoCmd7
kATADeviceError8
kATADMAErr9