Mac OS 9
ATA.h File Reference

ATA (PC/AT Attachment) Interfaces. More...

#include <NameRegistry.h>
#include <CodeFragments.h>
#include <MacTypes.h>
#include <MixedMode.h>

Go to the source code of this file.

Data Structures

struct  ataTaskFile
 
struct  ataDeviceID
 
struct  ATADataObject
 
struct  ATAResult
 
struct  ATAPICmdPacket
 
struct  ATADevInfo
 
struct  ATAInitInfo
 
struct  ATADiagResult
 
struct  ATABusInfo
 
struct  ATADevConfig
 
struct  ATAReqBlock
 
struct  ataPBHeader
 
struct  IOBlock
 
struct  ataIOPB
 
struct  ataBusInquiry
 
struct  ataMgrInquiry
 
struct  ataAbort
 
struct  ATAEventRec
 
struct  ataDrvrRegister
 
struct  ataModifyEventMask
 
union  ataRegValueUnion
 
struct  ataRegAccess
 
struct  ataIdentify
 
struct  ataDevConfiguration
 
struct  ataLocationData
 
struct  ataAddATABus
 
struct  ataRemoveATABus
 
struct  ataGeneric
 
union  ataPB
 
struct  ATAPluginHeader
 
struct  ATAPluginDispatchTable
 

Macros

#define NewATACallbackUPP(userRoutine)
 
#define DisposeATACallbackUPP(userUPP)   DisposeRoutineDescriptor(userUPP)
 
#define InvokeATACallbackUPP(ataPB, userUPP)    CALL_ONE_PARAMETER_UPP((userUPP), uppATACallbackProcInfo, (ataPB))
 
#define NewATACallbackProc(userRoutine)   NewATACallbackUPP(userRoutine)
 
#define CallATACallbackProc(userRoutine, ataPB)    InvokeATACallbackUPP(ataPB, userRoutine)
 
#define kATADevIDProperty   "device_id"
 
#define NewATAClientUPP(userRoutine)
 
#define DisposeATAClientUPP(userUPP)   DisposeRoutineDescriptor(userUPP)
 
#define InvokeATAClientUPP(ataERPtr, userUPP)    (SInt16) CALL_ONE_PARAMETER_UPP((userUPP), uppATAClientProcInfo, (ataERPtr))
 
#define NewATAClientProc(userRoutine)   NewATAClientUPP(userRoutine)
 
#define CallATAClientProc(userRoutine, ataERPtr)    InvokeATAClientUPP(ataERPtr, userRoutine)
 
#define NewATADispatchUPP(userRoutine)
 
#define DisposeATADispatchUPP(userUPP)   DisposeRoutineDescriptor(userUPP)
 
#define InvokeATADispatchUPP(pb, userUPP)    (OSErr) CALL_ONE_PARAMETER_UPP((userUPP), uppATADispatchProcInfo, (pb))
 
#define NewATADispatchProc(userRoutine)   NewATADispatchUPP(userRoutine)
 
#define CallATADispatchProc(userRoutine, pb)    InvokeATADispatchUPP(pb, userRoutine)
 

Typedefs

typedef struct ataTaskFile ataTaskFile
 
typedef struct ataDeviceID ataDeviceID
 
typedef struct ATADataObject ATADataObject
 
typedef struct ATAResult ATAResult
 
typedef struct ATAPICmdPacket ATAPICmdPacket
 
typedef struct ATADevInfo ATADevInfo
 
typedef struct ATAInitInfo ATAInitInfo
 
typedef struct ATADiagResult ATADiagResult
 
typedef struct ATABusInfo ATABusInfo
 
typedef struct ATADevConfig ATADevConfig
 
typedef struct ATAReqBlock ATAReqBlock
 
typedef struct ataPBHeader ataPBHeader
 
typedef struct IOBlock IOBlock
 
typedef struct ataIOPB ataIOPB
 
typedef struct ataBusInquiry ataBusInquiry
 
typedef struct ataMgrInquiry ataMgrInquiry
 
typedef struct ataAbort ataAbort
 
typedef struct ATAEventRec ATAEventRec
 
typedef ATAEventRecATAEventRecPtr
 
typedef struct ataDrvrRegister ataDrvrRegister
 
typedef struct ataModifyEventMask ataModifyEventMask
 
typedef union ataRegValueUnion ataRegValueUnion
 
typedef struct ataRegAccess ataRegAccess
 
typedef struct ataIdentify ataIdentify
 
typedef struct ataDevConfiguration ataDevConfiguration
 
typedef struct ataLocationData ataLocationData
 
typedef struct ataAddATABus ataAddATABus
 
typedef struct ataRemoveATABus ataRemoveATABus
 
typedef struct ataGeneric ataGeneric
 
typedef union ataPB ataPB
 
typedef RegEntryIDPtr aimRegEntry
 
typedef ATAReqBlockpb
 
typedef UInt32 aimData
 
typedef UInt32 interruptLevel
 
typedef UInt32 whichDevice
 
typedef UInt32 UInt32 lightState
 
typedef UInt32 UInt32 lockState
 
typedef struct ATAPluginHeader ATAPluginHeader
 
typedef struct ATAPluginDispatchTable ATAPluginDispatchTable
 

Enumerations

enum  {
  kATATrap , kATAPBVers1 = 0x01 , kATAPBVers2 = 0x02 , kATAPBVers3 = 0x03 ,
  kATADefaultBlockSize = 512
}
 
enum  { kFSMTrap = 0xAC , mDQEChanged = 1 }
 
enum  {
  bATABadBlock = 7 , bATAUncorrectable = 6 , bATAMediaChanged = 5 , bATAIDNotFound = 4 ,
  bATAMediaChangeReq = 3 , bATACommandAborted = 2 , bATATrack0NotFound = 1 , bATAAddressNotFound = 0 ,
  mATABadBlock = 1 << bATABadBlock , mATAUncorrectable = 1 << bATAUncorrectable , mATAMediaChanged , mATAIDNotFound = 1 << bATAIDNotFound ,
  mATAMediaChangeReq , mATACommandAborted = 1 << bATACommandAborted , mATATrack0NotFound = 1 << bATATrack0NotFound , mATAAddressNotFound = 1 << bATAAddressNotFound
}
 
enum  { bATAPIuseDMA = 0 , mATAPIuseDMA = 1 << bATAPIuseDMA }
 
enum  { mATAHeadNumber = 0x0F , mATASectorSize = 0xA0 , mATADriveSelect = 0x10 , mATALBASelect = 0x40 }
 
enum  {
  bATABusy = 7 , bATADriveReady = 6 , bATAWriteFault = 5 , bATASeekComplete = 4 ,
  bATADataRequest = 3 , bATADataCorrected = 2 , bATAIndex = 1 , bATAError = 0 ,
  mATABusy = 1 << bATABusy , mATADriveReady = 1 << bATADriveReady , mATAWriteFault = 1 << bATAWriteFault , mATASeekComplete = 1 << bATASeekComplete ,
  mATADataRequest = 1 << bATADataRequest , mATADataCorrected = 1 << bATADataCorrected , mATAIndex = 1 << bATAIndex , mATAError = 1 << bATAError
}
 
enum  {
  bATADCROne = 3 , bATADCRReset = 2 , bATADCRnIntEnable = 1 , mATADCROne = 1 << bATADCROne ,
  mATADCRReset = 1 << bATADCRReset , mATADCRnIntEnable
}
 
enum  {
  kATAcmdWORetry = 0x01 , kATAcmdNOP = 0x0000 , kATAcmdRecal = 0x0010 , kATAcmdRead = 0x0020 ,
  kATAcmdReadLong = 0x0022 , kATAcmdWrite = 0x0030 , kATAcmdWriteLong = 0x0032 , kATAcmdWriteVerify = 0x003C ,
  kATAcmdReadVerify = 0x0040 , kATAcmdFormatTrack = 0x0050 , kATAcmdSeek = 0x0070 , kATAcmdDiagnostic = 0x0090 ,
  kATAcmdInitDrive = 0x0091 , kATAcmdReadMultiple = 0x00C4 , kATAcmdWriteMultiple = 0x00C5 , kATAcmdSetRWMultiple = 0x00C6 ,
  kATAcmdReadDMA = 0x00C8 , kATAcmdWriteDMA = 0x00CA , kATAcmdMCAcknowledge = 0x00DB , kATAcmdDoorLock = 0x00DE ,
  kATAcmdDoorUnlock = 0x00DF , kATAcmdStandbyImmed = 0x00E0 , kATAcmdIdleImmed = 0x00E1 , kATAcmdStandby = 0x00E2 ,
  kATAcmdIdle = 0x00E3 , kATAcmdReadBuffer = 0x00E4 , kATAcmdCheckPowerMode = 0x00E5 , kATAcmdSleep = 0x00E6 ,
  kATAcmdWriteBuffer = 0x00E8 , kATAcmdWriteSame = 0x00E9 , kATAcmdDriveIdentify = 0x00EC , kATAcmdMediaEject = 0x00ED ,
  kATAcmdSetFeatures = 0x00EF
}
 
enum  {
  kATAEnableWriteCache = 0x02 , kATASetTransferMode = 0x03 , kATASetPIOMode = 0x08 , kATAEnableECC = 0x88 ,
  kATAEnableRetry = 0x99 , kATAEnableReadAhead = 0xAA
}
 
enum  {
  kATABusIDMask = 0x000000FF , kATADeviceIDMask = 0x0000FF00 , kATADeviceIDClippingMask = 0x0000FFFF , kMinBusID = 0x00000000 ,
  kMaxBusID = 0x000000FE
}
 
enum  { kATAStartIterateDeviceID = 0xFFFF , kATAEndIterateDeviceID = 0xFF }
 
enum  {
  kATAMgrNOP = 0x00 , kATAMgrExecIO = 0x01 , kATAMgrBusInquiry = 0x03 , kATAMgrQRelease = 0x04 ,
  kATAMgrAbort = 0x10 , kATAMgrBusReset = 0x11 , kATAMgrRegAccess = 0x12 , kATAMgrDriveIdentify = 0x13 ,
  kATAMgrDriverLoad = 0x82 , kATAMgrDriveRegister = 0x85 , kATAMgrFindDriverRefnum = 0x86 , kATAMgrRemoveDriverRefnum = 0x87 ,
  kATAMgrModifyEventMask = 0x88 , kATAMgrDriveEject = 0x89 , kATAMgrGetDrvConfiguration = 0x8A , kATAMgrSetDrvConfiguration = 0x8B ,
  kATAMgrGetLocationIcon = 0x8C , kATAMgrManagerInquiry = 0x90 , kATAMgrManagerInit = 0x91 , kATAMgrManagerShutdown = 0x92 ,
  kATAMgrAddATABus = 0x93 , kATAMgrRemoveATABus = 0x94 , kATAMgrFindSpecialDriverRefnum , kATAMgrNextAvailable = 0x99
}
 
enum  { kATANotifyAllDriver = 0 , kATADriverLoader = 1 , kATAROMDriver = 2 }
 
enum  {
  bATAFlagUseConfigSpeed = 15 , bATAFlagByteSwap = 14 , bATAFlagIORead = 13 , bATAFlagIOWrite = 12 ,
  bATAFlagImmediate = 11 , bATAFlagQLock = 10 , bATAFlagReserved1 = 9 , bATAFlagUseScatterGather = 8 ,
  bATAFlagUseDMA = 7 , bATAFlagProtocolATAPI = 5 , bATAFlagReserved2 = 4 , bATAFlagTFRead = 3 ,
  bATAFlagLEDEnable = 0 , mATAFlagUseConfigSpeed = 1 << bATAFlagUseConfigSpeed , mATAFlagByteSwap , mATAFlagIORead = 1 << bATAFlagIORead ,
  mATAFlagIOWrite = 1 << bATAFlagIOWrite , mATAFlagImmediate , mATAFlagQLock , mATAFlagUseScatterGather ,
  mATAFlagUseDMA = 1 << bATAFlagUseDMA , mATAFlagProtocolATAPI , mATAFlagTFRead = 1 << bATAFlagTFRead , mATAFlagLEDEnable = 1 << bATAFlagLEDEnable
}
 
enum  {
  bATAFlagScatterGather1 = bATAFlagReserved1 , bATAFlagScatterGather0 = bATAFlagUseScatterGather , bATAFlagProtocol1 = bATAFlagProtocolATAPI , bATAFlagProtocol0 = bATAFlagReserved2 ,
  mATAFlagScatterGather1 = 1 << bATAFlagScatterGather1 , mATAFlagScatterGather0 = mATAFlagUseScatterGather , mATAFlagScatterGathers = mATAFlagScatterGather1 + mATAFlagScatterGather0 , mATAFlagProtocol1 = mATAFlagProtocolATAPI ,
  mATAFlagProtocol0 = 1 << bATAFlagProtocol0 , mATAFlagProtocols = mATAFlagProtocol1 + mATAFlagProtocol0
}
 
enum  {
  kATAFnNOP = 0x00 , kATAFnExecIO = 0x01 , kATAFnBusInquiry = 0x02 , kATAFnQRelease = 0x03 ,
  kATAFnCmd = 0x04 , kATAFnAbort = 0x05 , kATAFnBusReset = 0x06 , kATAFnRegAccess = 0x07 ,
  kATAFnDriveIdentify = 0x08 , kATAPIFnExecIO = 0x09 , kATAPIFnCmd = 0x0A , kATAFnGetDriveConfig = 0x0B ,
  kATAFnSetDriveConfig = 0x0C , kATAFnKillIO = 0x0D
}
 
enum  { kATADeviceLightOff = 0x00 , kATADeviceLightOn = 0x01 }
 
enum  { kATADeviceUnlock = 0x00 , kATADeviceLock = 0x01 }
 
enum  { mATANoDMAOnBus = 0x80 }
 
enum  { uppATACallbackProcInfo = 0x000000C0 }
 
enum  { kATADevIDPropertyNameLength , kATADevIDPropertySize = 4 }
 
enum  { kATAInvalidDeviceID = -1 , kATADevice0DeviceID , kATADevice1DeviceID = 1 }
 
enum  { kATAConfigReserved = 5 }
 
enum  { kATAModeAbsolute = 2 , kATAModeBitmap = 3 }
 
enum  { kATAPluginVersion = 0x00000001 , kATAPluginCurrentVersion = kATAPluginVersion }
 
enum  { kServiceCategoryATA = FOUR_CHAR_CODE('ata-') }
 
enum  { uppATAClientProcInfo = 0x000000E0 }
 
enum  {
  bATAAltSDevCValid , bATAStatusCmdValid = 7 , bATASDHValid = 6 , bATACylinderHiValid = 5 ,
  bATACylinderLoValid = 4 , bATASectorNumValid = 3 , bATASectorCntValid = 2 , bATAErrFeaturesValid = 1 ,
  bATADataValid = 0 , mATAAltSDevCValid , mATAStatusCmdValid = 1 << bATAStatusCmdValid , mATASDHValid = 1 << bATASDHValid ,
  mATACylinderHiValid = 1 << bATACylinderHiValid , mATACylinderLoValid = 1 << bATACylinderLoValid , mATASectorNumValid = 1 << bATASectorNumValid , mATASectorCntValid = 1 << bATASectorCntValid ,
  mATAErrFeaturesValid = 1 << bATAErrFeaturesValid , mATADataValid = 1 << bATADataValid
}
 
enum  { ATAPIpacketDRQ_bit = 6 , ATAPIpacketDRQ = 1 << ATAPIpacketDRQ_bit }
 
enum  {
  bATApcAccessMode = 0 , bATApcVcc = 1 , bATApcVpp1 = 2 , bATApcVpp2 = 3 ,
  bATApcStatus = 4 , bATApcPin = 5 , bATApcCopy = 6 , bATApcConfigIndex = 7 ,
  bATApcLockUnlock = 15 , mATApcAccessMode = 1 << bATApcAccessMode , mATApcVcc = 1 << bATApcVcc , mATApcVpp1 = 1 << bATApcVpp1 ,
  mATApcVpp2 = 1 << bATApcVpp2 , mATApcStatus = 1 << bATApcStatus , mATApcPin = 1 << bATApcPin , mATApcCopy = 1 << bATApcCopy ,
  mATApcConfigIndex = 1 << bATApcConfigIndex , mATApcLockUnlock = 1 << bATApcLockUnlock
}
 
enum  { kATADeviceUnknown = 0x00 , kATADeviceATA = 0x01 , kATADeviceATAPI = 0x02 , kATADeviceReserved = 0x03 }
 
enum  { kATASocketInternal = 0x01 , kATASocketMB = 0x02 , kATASocketPCMCIA = 0x03 }
 
enum  { kATALargeIconHFS = 0x0001 , kATALargeIconProDOS = 0x0081 }
 
enum  { kATAddTypeMacOS = 0x0001 }
 
enum  {
  kATANullEvent = 0x00 , kATAOnlineEvent = 0x01 , kATAOfflineEvent = 0x02 , kATARemovedEvent = 0x03 ,
  kATAResetEvent = 0x04 , kATAOfflineRequest = 0x05 , kATAEjectRequest = 0x06 , kATAUpdateEvent ,
  kATATaskTimeRequest , kATALoadDriverNow = 0x09 , kATAPIResetEvent = 0x0A , bATANullEvent = 1 << kATANullEvent ,
  bATAOnlineEvent = 1 << kATAOnlineEvent , bATAOfflineEvent = 1 << kATAOfflineEvent , bATARemovedEvent = 1 << kATARemovedEvent , bATAResetEvent = 1 << kATAResetEvent ,
  bATAOfflineRequest = 1 << kATAOfflineRequest , bATAEjectRequest = 1 << kATAEjectRequest , bATAUpdateEvent = 1 << kATAUpdateEvent , bATAPIResetEvent = 1 << kATAPIResetEvent
}
 
enum  { kATAEventMarker , kATAEventVersion1 = 0x00000001 }
 
enum  { uppATADispatchProcInfo = 0x000000E0 }
 
enum  {
  ATABaseErrCode = -9406 , ioPending = 1 , AT_NRdyErr = ATABaseErrCode + 0x01 , AT_IDNFErr = ATABaseErrCode + 0x02 ,
  AT_DMarkErr = ATABaseErrCode + 0x03 , AT_BadBlkErr = ATABaseErrCode + 0x04 , AT_CorDataErr = ATABaseErrCode + 0x05 , AT_UncDataErr = ATABaseErrCode + 0x06 ,
  AT_SeekErr = ATABaseErrCode + 0x07 , AT_WrFltErr = ATABaseErrCode + 0x08 , AT_RecalErr = ATABaseErrCode + 0x09 , AT_AbortErr = ATABaseErrCode + 0x0A ,
  AT_MCErr = ATABaseErrCode + 0x0C , ATAPICheckErr , AT_UltraDMAiCRCErr , DRVRCantAllocate ,
  NoATAMgr , ATAInitFail = ATABaseErrCode + 0x20 , ATABufFail = ATABaseErrCode + 0x21 , ATADevUnsupported ,
  ATAEjectDrvErr , ATAMgrNotInitialized , ATAPBInvalid , ATAFuncNotSupported ,
  ATABusy = ATABaseErrCode + 0x31 , ATATransTimeOut , ATAReqInProg , ATAUnknownState ,
  ATAQLocked , ATAReqAborted , ATAUnableToAbort , ATAAbortedDueToRst ,
  ATAPIPhaseErr = ATABaseErrCode + 0x39 , ATAPITxCntErr , ATANoClientErr , ATAInternalErr ,
  ATABusErr = ATABaseErrCode + 0x3D , AT_NoAddrErr = ATABaseErrCode + 0x3E , DriverLocked , CantHandleEvent ,
  ATAMgrMemoryErr , ATASDFailErr = ATABaseErrCode + 0x42 , ATAXferParamErr , ATAXferModeErr ,
  ATAMgrConsistencyErr , ATADmaXferErr , ATAInvalidDrvNum , ATAMemoryErr = ATABaseErrCode + 0x4F ,
  ATANoDDMErr = ATABaseErrCode + 0x50 , ATANoDriverErr
}
 
enum  {
  v1ATABaseErrCode = 0x0700 , v1AT_NRdyErr = 0x01 - v1ATABaseErrCode , v1AT_IDNFErr = 0x04 - v1ATABaseErrCode , v1AT_DMarkErr = 0x05 - v1ATABaseErrCode ,
  v1AT_BadBlkErr = 0x06 - v1ATABaseErrCode , v1AT_CorDataErr = 0x07 - v1ATABaseErrCode , v1AT_UncDataErr = 0x08 - v1ATABaseErrCode , v1AT_SeekErr = 0x09 - v1ATABaseErrCode ,
  v1AT_WrFltErr = 0x0A - v1ATABaseErrCode , v1AT_RecalErr = 0x0B - v1ATABaseErrCode , v1AT_AbortErr = 0x0C - v1ATABaseErrCode , v1AT_NoAddrErr = 0x0D - v1ATABaseErrCode ,
  v1AT_MCErr = 0x0E - v1ATABaseErrCode , v1DRVRCantAllocate = -(v1ATABaseErrCode + 1) , v1NoATAMgr = -(v1ATABaseErrCode + 2) , v1ATAInitFail = -(v1ATABaseErrCode + 3) ,
  v1ATABufFail = -(v1ATABaseErrCode + 4) , v1ATADevUnsupported = -(v1ATABaseErrCode + 5) , v1ATAMgrNotInitialized = -(v1ATABaseErrCode + 10) , v1ATAPBInvalid = -(v1ATABaseErrCode + 11) ,
  v1ATAFuncNotSupported = -(v1ATABaseErrCode + 12) , v1ATABusy = -(v1ATABaseErrCode + 13) , v1ATATransTimeOut = -(v1ATABaseErrCode + 14) , v1ATAReqInProg = -(v1ATABaseErrCode + 15) ,
  v1ATAUnknownState = -(v1ATABaseErrCode + 16) , v1ATAQLocked = -(v1ATABaseErrCode + 17) , v1ATAReqAborted = -(v1ATABaseErrCode + 18) , v1ATAUnableToAbort = -(v1ATABaseErrCode + 19) ,
  v1ATAAbortedDueToRst = -(v1ATABaseErrCode + 20)
}
 

Functions

typedef CALLBACK_API (void, ATACallbackProcPtr)(void *ataPB)
 
typedef STACK_UPP_TYPE (ATACallbackProcPtr) ATACallbackUPP
 
ATACallbackUPP NewATACallbackUPP (ATACallbackProcPtr userRoutine)
 
void DisposeATACallbackUPP (ATACallbackUPP userUPP)
 
void InvokeATACallbackUPP (void *ataPB, ATACallbackUPP userUPP)
 
typedef CALLBACK_API (SInt16, ATAClientProcPtr)(ATAEventRecPtr ataERPtr)
 
typedef STACK_UPP_TYPE (ATAClientProcPtr) ATAClientUPP
 
ATAClientUPP NewATAClientUPP (ATAClientProcPtr userRoutine)
 
void DisposeATAClientUPP (ATAClientUPP userUPP)
 
SInt16 InvokeATAClientUPP (ATAEventRecPtr ataERPtr, ATAClientUPP userUPP)
 
typedef CALLBACK_API (OSErr, ATADispatchProcPtr)(ataPB *pb)
 
typedef STACK_UPP_TYPE (ATADispatchProcPtr) ATADispatchUPP
 
ATADispatchUPP NewATADispatchUPP (ATADispatchProcPtr userRoutine)
 
void DisposeATADispatchUPP (ATADispatchUPP userUPP)
 
OSErr InvokeATADispatchUPP (ataPB *pb, ATADispatchUPP userUPP)
 
SInt16 ataManager (ataPB *pb)
 
typedef CALLBACK_API_C (OSStatus, ATAPluginInit)(ATAInitInfo *pb)
 
typedef CALLBACK_API_C (OSStatus, ATAPluginClose)(UInt32 refCon
 
typedef CALLBACK_API_C (void, ATAPluginAction)(UInt32 refCon
 
typedef CALLBACK_API_C (void, ATAPluginHandleBusEvent)(UInt32 refCon
 
typedef CALLBACK_API_C (Boolean, ATAPluginPoll)(UInt32 refCon
 
typedef CALLBACK_API_C (void, ATAPluginEjectDevice)(UInt32 refCon)
 
typedef CALLBACK_API_C (void, ATAPluginDeviceLight)(UInt32 refCon
 
typedef CALLBACK_API_C (void, ATAPluginDeviceLock)(UInt32 refCon
 
typedef CALLBACK_API_C (void, ATAPluginSuspend)(UInt32 refCon)
 
typedef CALLBACK_API_C (void, ATAPluginResume)(UInt32 refCon)
 
void ATAFamIODone (ATAReqBlock *theReq, OSStatus result)
 
void ATAFamBusEventForAIM (UInt32 busID, UInt32 busEvent)
 
SInt16 NativeATAMgr (ataPB *request)
 

Detailed Description

ATA (PC/AT Attachment) Interfaces.

Introduced In: System 7.5
Avaliable From: Universal Interfaces 3.4.1
Copyright: © 1995-2001 by Apple Computer, Inc., all rights reserved

For bug reports, consult the following page on the World Wide Web:

http://developer.apple.com/bugreporter/

Macro Definition Documentation

◆ kATADevIDProperty

#define kATADevIDProperty   "device_id"

The kATADevIDProperty property will be inserted by the AIM when creating name registry entries for each drive found on the bus. The 4-byte data shall be the ataDeviceID structure used by ATA Manager. <3/14/2000>

◆ NewATACallbackProc

#define NewATACallbackProc (   userRoutine)    NewATACallbackUPP(userRoutine)

CALL_NOT_IN_CARBON support for pre-Carbon UPP routines: New...Proc and Call...Proc

◆ NewATACallbackUPP

#define NewATACallbackUPP (   userRoutine)
Value:
(ATACallbackUPP) \
NewRoutineDescriptor((ProcPtr)(userRoutine), uppATACallbackProcInfo, \
GetCurrentArchitecture())
UniversalProcPtr NewRoutineDescriptor(ProcPtr theProc, ProcInfoType theProcInfo, ISAType theISA)

pascal no_return_value Func(4_bytes)

◆ NewATAClientProc

#define NewATAClientProc (   userRoutine)    NewATAClientUPP(userRoutine)

CALL_NOT_IN_CARBON support for pre-Carbon UPP routines: New...Proc and Call...Proc

◆ NewATAClientUPP

#define NewATAClientUPP (   userRoutine)
Value:
(ATAClientUPP) NewRoutineDescriptor( \
(ProcPtr)(userRoutine), uppATAClientProcInfo, GetCurrentArchitecture())

pascal 2_bytes Func(4_bytes)

◆ NewATADispatchProc

#define NewATADispatchProc (   userRoutine)    NewATADispatchUPP(userRoutine)

CALL_NOT_IN_CARBON support for pre-Carbon UPP routines: New...Proc and Call...Proc

◆ NewATADispatchUPP

#define NewATADispatchUPP (   userRoutine)
Value:
(ATADispatchUPP) \
NewRoutineDescriptor((ProcPtr)(userRoutine), uppATADispatchProcInfo, \
GetCurrentArchitecture())

pascal 2_bytes Func(4_bytes)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

This is the structure used for the AT Interface core routines below

Enumerator
kATAPBVers1 

Manager trap number <This should be defined in Traps.h>

kATAPBVers2 

parameter block version number 1

kATAPBVers3 

parameter block version number for structures

kATADefaultBlockSize 

parameter block version for ATA times

◆ anonymous enum

anonymous enum

Used to determine the presence of traps

◆ anonymous enum

anonymous enum

Task file definition ©©© Error Register ©©©

Enumerator
bATAUncorrectable 

bit number of bad block error bit

bATAMediaChanged 

bit number of uncorrectable error bit

bATAIDNotFound 

bit number of media changed indicator

bATAMediaChangeReq 

bit number of ID not found error bit

bATACommandAborted 

bit number of media changed request

bATATrack0NotFound 

bit number of command abort bit

bATAAddressNotFound 

bit number of track not found

mATABadBlock 

bit number of address mark not found

mATAUncorrectable 

Bad Block Detected

mATAMediaChanged 

Uncorrectable Data Error

mATAIDNotFound 

Media Changed Indicator (for removable)

mATAMediaChangeReq 

ID Not Found

mATACommandAborted 

Media Change Requested (NOT IMPLEMENTED)

mATATrack0NotFound 

Aborted Command

mATAAddressNotFound 

Track 0 Not Found

◆ anonymous enum

anonymous enum

Task file definition ©©© Features register ©©©

Enumerator
mATAPIuseDMA 

bit number of useDMA bit (ATAPI)

◆ anonymous enum

anonymous enum

Task file definition ©©© ataTFSDH Register ©©©

Enumerator
mATASectorSize 

Head Number (bits 0-3)

mATADriveSelect 

bit 7=1; bit 5 = 01 (512 sector size) <DP4>

mATALBASelect 

Drive (0 = master, 1 = slave)

◆ anonymous enum

anonymous enum

Task file definition ©©© Status Register ©©©

Enumerator
bATADriveReady 

bit number of BSY bit

bATAWriteFault 

bit number of drive ready bit

bATASeekComplete 

bit number of write fault bit

bATADataRequest 

bit number of seek complete bit

bATADataCorrected 

bit number of data request bit

bATAIndex 

bit number of data corrected bit

bATAError 

bit number of index mark

mATABusy 

bit number of error bit

mATADriveReady 

Unit is busy

mATAWriteFault 

Unit is ready

mATASeekComplete 

Unit has a write fault condition

mATADataRequest 

Unit seek complete

mATADataCorrected 

Unit data request

mATAIndex 

Data corrected

mATAError 

Index mark - NOT USED

◆ anonymous enum

anonymous enum

Task file definition ©©© Device Control Register ©©©

Enumerator
bATADCRReset 

bit number of always one bit

bATADCRnIntEnable 

bit number of reset bit

mATADCROne 

bit number of interrupt disable

mATADCRReset 

always one bit

mATADCRnIntEnable 

Reset (1 = reset)

◆ anonymous enum

anonymous enum

ATA Command Opcode definition

Enumerator
kATAcmdNOP 

Without I/O retry option

kATAcmdRecal 

NOP operation - media detect

kATAcmdRead 

Recalibrate command

kATAcmdReadLong 

Read command

kATAcmdWrite 

Read Long command

kATAcmdWriteLong 

Write command

kATAcmdWriteVerify 

Write Long

kATAcmdReadVerify 

Write verify

kATAcmdFormatTrack 

Read Verify command

kATAcmdSeek 

Format Track command

kATAcmdDiagnostic 

Seek command

kATAcmdInitDrive 

Drive Diagnostic command

kATAcmdReadMultiple 

Init drive parameters command

kATAcmdWriteMultiple 

Read multiple

kATAcmdSetRWMultiple 

Write multiple

kATAcmdReadDMA 

Set Multiple for Read/Write Multiple

kATAcmdWriteDMA 

Read DMA (with retries)

kATAcmdMCAcknowledge 

Write DMA (with retries)

kATAcmdDoorLock 

Acknowledge media change - removable

kATAcmdDoorUnlock 

Door lock

kATAcmdStandbyImmed 

Door unlock

kATAcmdIdleImmed 

Standby Immediate

kATAcmdStandby 

Idle Immediate

kATAcmdIdle 

Standby

kATAcmdReadBuffer 

Idle

kATAcmdCheckPowerMode 

Read sector buffer command

kATAcmdSleep 

Check power mode command <04/04/94>

kATAcmdWriteBuffer 

Sleep

kATAcmdWriteSame 

Write sector buffer command

kATAcmdDriveIdentify 

Write same data to multiple sectors

kATAcmdMediaEject 

Identify Drive command

kATAcmdSetFeatures 

Media Eject

◆ anonymous enum

anonymous enum

Set feature command opcodes

Enumerator
kATASetTransferMode 

Enable write cache

kATASetPIOMode 

Set transfer mode

kATAEnableECC 

PIO Flow Control Tx Mode bit

kATAEnableRetry 

ECC enable

kATAEnableReadAhead 

Retry enable

◆ anonymous enum

anonymous enum

enums for dealing with device IDs

◆ anonymous enum

anonymous enum

ATA Manager Function Code Definition

Enumerator
kATAMgrExecIO 

No Operation

kATAMgrBusInquiry 

Execute ATA I/O

kATAMgrQRelease 

Bus Inquiry

kATAMgrAbort 

I/O Queue Release

kATAMgrBusReset 

Abort command

kATAMgrRegAccess 

Reset ATA bus

kATAMgrDriveIdentify 

Register Access

kATAMgrDriverLoad 

Drive Identify <DP03/10/94>

kATAMgrDriveRegister 

Load driver from either Media, ROM, etc.

kATAMgrFindDriverRefnum 

Register a driver <4/18/94>

kATAMgrRemoveDriverRefnum 

lookup a driver refnum <4/18/94>

kATAMgrModifyEventMask 

De-register a driver <4/18/94>

kATAMgrDriveEject 

Modify driver event mask

kATAMgrGetDrvConfiguration 

Eject the drive <8/1/94>

kATAMgrSetDrvConfiguration 

Get device configuration <8/6/94>

kATAMgrGetLocationIcon 

Set device configuration <8/6/94>

kATAMgrManagerInquiry 

Get card location icon <SM4>

kATAMgrManagerInit 

Manager Inquiry

kATAMgrManagerShutdown 

Manager initialization

kATAMgrAddATABus 

Manager ShutDown

kATAMgrRemoveATABus 

Add an AIM to ATA Manager <3/1/2000>

kATAMgrFindSpecialDriverRefnum 

Remove an AIM from ATA Manager <3/1/2000> note: functions 0x95 to 0x97 are reserved

kATAMgrNextAvailable 

lookup a driver refnum; driverloader,notify-all or ROM driver.

◆ anonymous enum

anonymous enum

used in the ataDrvrFlags field for kATAMgrDriveRegister,kATAMgrRemoveDriverRefnum & kATAMgrFindSpecialDriverRefnum

Enumerator
kATADriverLoader 

Notify-All driver

kATAROMDriver 

Driver loader driver

◆ anonymous enum

anonymous enum

'ATAFlags' field of the PB header definition

Enumerator
bATAFlagByteSwap 

bit number of use default speed flag

bATAFlagIORead 

bit number of byte swap flag

bATAFlagIOWrite 

bit number of I/O read flag

bATAFlagImmediate 

bit number of I/O write flag

bATAFlagQLock 

bit number of immediate flag

bATAFlagReserved1 

bit number of que lock on error

bATAFlagUseScatterGather 

reserved

bATAFlagUseDMA 

bit numbers of scatter gather

bATAFlagProtocolATAPI 

bit number of use DMA flag

bATAFlagReserved2 

bit number of ATAPI protocol

bATAFlagTFRead 

reserved

bATAFlagLEDEnable 

bit number of register update

mATAFlagUseConfigSpeed 

bit number of LED enable

mATAFlagIORead 

Swap data bytes (read - after; write - before)

mATAFlagIOWrite 

Read (in) operation

mATAFlagImmediate 

Write (out) operation

mATAFlagQLock 

Head of Que; Immediate operation

mATAFlagUseScatterGather 

Manager queue lock on error (freeze the queue)

mATAFlagUseDMA 

Scatter gather enable

mATAFlagTFRead 

ATAPI protocol indicator

mATAFlagLEDEnable 

update reg block request upon detection of an error

◆ anonymous enum

anonymous enum

These are legacy ATAFlags definitions, which will go away in the future

Enumerator
bATAFlagScatterGather0 

9

bATAFlagProtocol1 

8

bATAFlagProtocol0 

5

mATAFlagScatterGather1 

4

◆ anonymous enum

anonymous enum

The Function codes passed by ATA Manager to the AIM plug-in

Enumerator
kATAFnExecIO 

No Operation

kATAFnBusInquiry 

Execute ATA I/O

kATAFnQRelease 

Bus Inquiry

kATAFnCmd 

I/O Queue Release

kATAFnAbort 

ATA Command

kATAFnBusReset 

Abort command

kATAFnRegAccess 

Reset ATA bus

kATAFnDriveIdentify 

Register Access

kATAPIFnExecIO 

Drive Identify

kATAPIFnCmd 

ATAPI I/O

kATAFnGetDriveConfig 

ATAPI Command

kATAFnSetDriveConfig 

Get Drive specific bus configuration

kATAFnKillIO 

Set Drive specific bus configuration

◆ anonymous enum

anonymous enum

The state to put the device light in used in DeviceLight AIM plugin export

Enumerator
kATADeviceLightOn 

Turn light off

◆ anonymous enum

anonymous enum

The state to put the device lock in used in DeviceLock AIM plugin export

Enumerator
kATADeviceLock 

unlock

◆ anonymous enum

anonymous enum

add bus flags ©© Applies to the ataAddBus structure ©©

◆ anonymous enum

anonymous enum
Enumerator
kATADevIDPropertySize 

Number of characters in kATADevIDProperty including the terminating null.

◆ anonymous enum

anonymous enum

ATA Device ID codes to be used with devID field of the ATADevInfo structure

Enumerator
kATADevice1DeviceID 

aka, Master. Device 0 is the correct terminology

◆ anonymous enum

anonymous enum

reserved words at the end of the devConfig structure

◆ anonymous enum

anonymous enum

enum for modeType in ATAReqBlock, aligned with ataPBVers

◆ anonymous enum

anonymous enum

'ataRegMask' field of the ataRegAccess definition

Enumerator
bATAStatusCmdValid 

bit number of alternate status/device cntrl valid bit

bATASDHValid 

bit number of status/command valid bit

bATACylinderHiValid 

bit number of ataTFSDH valid bit

bATACylinderLoValid 

bit number of cylinder high valid bit

bATASectorNumValid 

bit number of cylinder low valid bit

bATASectorCntValid 

bit number of sector number valid bit

bATAErrFeaturesValid 

bit number of sector count valid bit

bATADataValid 

bit number of error/features valid bit

mATAAltSDevCValid 

bit number of data valid bit

mATAStatusCmdValid 

alternate status/device control valid

mATASDHValid 

status/command valid

mATACylinderHiValid 

ataTFSDH valid

mATACylinderLoValid 

cylinder high valid

mATASectorNumValid 

cylinder low valid

mATASectorCntValid 

sector number valid

mATAErrFeaturesValid 

sector count valid

mATADataValid 

error/features valid

◆ anonymous enum

anonymous enum

'ataConfigSetting' field of the Get/Set Device Configuration definition <8/6/94>

Enumerator
ATAPIpacketDRQ 

bit number of ATAPI command packet DRQ option

◆ anonymous enum

anonymous enum

atapcValid field definition

◆ anonymous enum

anonymous enum

Device physical type & socket type indicator definition

Enumerator
kATADeviceATA 

no device or type undetermined

kATADeviceATAPI 

traditional ATA protocol device <7/29/94>

kATADeviceReserved 

ATAPI protocol device <7/29/94>

◆ anonymous enum

anonymous enum
Enumerator
kATASocketMB 

Internal ATA socket

kATASocketPCMCIA 

Media Bay socket

◆ anonymous enum

anonymous enum

Get Card Location Icon/Text <SM4>

Enumerator
kATALargeIconProDOS 

Large B&W icon with mask (HFS)

◆ anonymous enum

anonymous enum

ataOSType available

◆ anonymous enum

anonymous enum

The ATA Event codes©

Enumerator
kATAOnlineEvent 

Just kidding – nothing happened

kATAOfflineEvent 

An ATA device has come online

kATARemovedEvent 

An ATA device has gone offline

kATAResetEvent 

An ATA device has been removed from the bus

kATAOfflineRequest 

Someone gave a hard reset to the drive

kATAEjectRequest 

Someone requesting to offline the drive

kATAUpdateEvent 

Someone requesting to eject the drive

kATATaskTimeRequest 

Potential configuration change reported by CardServices <SM4>

kATALoadDriverNow 

The manager is requesting to be called at Task Time

kATAPIResetEvent 

Load the driver for the given bus immediately

bATANullEvent 

Someone gave a ATAPI reset to the drive The following describes bit definitions in the eventMask field of ataDrvrRegister

bATAOnlineEvent 

null event bit

bATAOfflineEvent 

online event bit

bATARemovedEvent 

offline event bit

bATAResetEvent 

removed event bit

bATAOfflineRequest 

ATA reset event bit

bATAEjectRequest 

offline request event bit

bATAUpdateEvent 

eject request event bit

bATAPIResetEvent 

configuration update event bit

◆ anonymous enum

anonymous enum
Enumerator
kATAEventVersion1 

Marker for the event data structure

◆ anonymous enum

anonymous enum

Device Error codes: 0xDB42 - 0xDB5F
CALL_NOT_IN_CARBON

Enumerator
ioPending 

Base error code - 0xDB42

AT_NRdyErr 

Asynch I/O in progress status

AT_IDNFErr 

0xDB43: Drive not Ready

AT_DMarkErr 

0xDB44: ID not found

AT_BadBlkErr 

0xDB45: Data mark not found

AT_CorDataErr 

0xDB46: Bad Block

AT_UncDataErr 

0xDB47: Data was corrected

AT_SeekErr 

0xDB48: Data was not corrected

AT_WrFltErr 

0xDB49: Seek error

AT_RecalErr 

0xDB4A: Write fault

AT_AbortErr 

0xDB4B: Recalibrate failed

AT_MCErr 

0xDB4C: Command aborted by drive

ATAPICheckErr 

0xDB4E: Media Changed error

AT_UltraDMAiCRCErr 

0xDB4F: ATAPI Check condition <06/15/94>

DRVRCantAllocate 

0xDB50: CRC error during Ultra DMA xfer System error codes...Custom Driver Error Codes 0xDB60 - 0xDB6F

NoATAMgr 

0xDB60: Allocation error during initialization

ATAInitFail 

0xDB61: MgrInquiry failed => No ATA Manager

ATABufFail 

0xDB62: Mgr Initialization failed

ATADevUnsupported 

0xDB63: Device buffer test failure

ATAEjectDrvErr 

0xDB64: Device type not supported

ATAMgrNotInitialized 

0xDB65: Could not eject the drive Manager Error Codes 0xDB70 - 0xDB8F

ATAPBInvalid 

0xDB70: Mgr has not been initialized

ATAFuncNotSupported 

0xDB71: The bus base address couldn't be found

ATABusy 

0xDB72: An unknown function code specified

ATATransTimeOut 

0xDB73: Selected device is busy

ATAReqInProg 

0xDB74: Transaction timeout detected

ATAUnknownState 

0xDB75: Channel busy; channel is processing another cmd

ATAQLocked 

0xDB76: Device status register reflects an unknown state

ATAReqAborted 

0xDB77: I/O Queue is locked due to previous I/O error.

ATAUnableToAbort 

0xDB78: The I/O queue entry was aborted due to an abort req. or due to Manager shutdown.

ATAAbortedDueToRst 

0xDB79: The I/O queue entry could not be aborted.

ATAPIPhaseErr 

0xDB7A: Request aborted due to a device reset command.

ATAPITxCntErr 

0xDB7B: Unexpected phase - ©©©IS THIS VALID ERROR??? <06/15/94>

ATANoClientErr 

0xDB7C: Overrun/Underrun condition detected

ATAInternalErr 

0xDB7D: No client present to handle the event

ATABusErr 

0xDB7E: MagnumOpus returned an error

AT_NoAddrErr 

0xDB7F: Bus error detected on I/O

DriverLocked 

0xDB80: Invalid AT base adress

CantHandleEvent 

0xDB81: Current driver must be removed before adding another

ATAMgrMemoryErr 

0xDB82: Particular event couldn't be handled (call others)

ATASDFailErr 

0xDB83: Manager memory allocation error

ATAXferParamErr 

0xDB84: Shutdown failure

ATAXferModeErr 

0xDB85: I/O xfer parameters inconsistent

ATAMgrConsistencyErr 

0xDB86: I/O xfer mode not supported

ATADmaXferErr 

0XDB87: Manager detected internal inconsistency.

ATAInvalidDrvNum 

0XDB88: fatal error in DMA side of transfer Driver loader error Codes 0xDB90 - 0xDBA5

ATAMemoryErr 

0xDB90: Invalid drive number from event

ATANoDDMErr 

0xDB91: Memory allocation error

ATANoDriverErr 

0xDB92: No DDM found on media

◆ anonymous enum

anonymous enum

---------------------— Version 1 definition

Enumerator
v1AT_NRdyErr 

This needs a home somewhere

v1AT_IDNFErr 

0xF901: -0x1DBE

v1AT_DMarkErr 

0xF904: -0x1DC0

v1AT_BadBlkErr 

0xF905: -0x1DC0

v1AT_CorDataErr 

0xF906: -0x1DC0

v1AT_UncDataErr 

0xF907: -0x1DC0

v1AT_SeekErr 

0xF908: -0x1DC0

v1AT_WrFltErr 

0xF909: -0x1DC0

v1AT_RecalErr 

0xF90A: -0x1DC0

v1AT_AbortErr 

0xF90B: -0x1DC0

v1AT_NoAddrErr 

0xF90C: -0x1DC0

v1AT_MCErr 

0xF90D: -0x1D8D

v1DRVRCantAllocate 

0xF90E: -0x1DC0 System error codes...Custom Driver Error Codes

v1NoATAMgr 

0xF8FF: -0x1D9F

v1ATAInitFail 

0xF8FE: -0x1D9D

v1ATABufFail 

0xF8FD: -0x1D9B

v1ATADevUnsupported 

0xF8FC: -0x1D99

v1ATAMgrNotInitialized 

0xF8FB: -0x1c97 Manager Error Codes

v1ATAPBInvalid 

0xF8F6: -0x1D86

v1ATAFuncNotSupported 

0xF8F5: -0x1D84

v1ATABusy 

0xF8F4: -0x1D82

v1ATATransTimeOut 

0xF8F3: -0x1D80

v1ATAReqInProg 

0xF8F2: -0x1D7E

v1ATAUnknownState 

0xF8F1: -0x1D7C

v1ATAQLocked 

0xF8F0: -0x1D7A

v1ATAReqAborted 

0xF8EF: -0x1D78

v1ATAUnableToAbort 

0xF8EE: -0x1D76

v1ATAAbortedDueToRst 

0xF8ED: -0x1D74

Function Documentation

◆ ATAFamBusEventForAIM()

void ATAFamBusEventForAIM ( UInt32  busID,
UInt32  busEvent 
)

ATAFamBusEventForAIM()

Non-Carbon CFM: in ATAManager 4 and later
Carbon Lib: not available
Mac OS X: not available

◆ ATAFamIODone()

void ATAFamIODone ( ATAReqBlock theReq,
OSStatus  result 
)

Callbacks into the System 7 ATA Manager ATAFamIODone()

Non-Carbon CFM: in ATAManager 4 and later
Carbon Lib: not available
Mac OS X: not available

◆ ataManager()

SInt16 ataManager ( ataPB pb)

CALL_NOT_IN_CARBON ataManager()

Non-Carbon CFM: in InterfaceLib 8.5 and later
Carbon Lib: not available
Mac OS X: not available

◆ CALLBACK_API_C()

typedef CALLBACK_API_C ( OSStatus  ,
ATAPluginInit   
)

Typedefs for the AIM entry point pointers CALL_NOT_IN_CARBON

◆ DisposeATACallbackUPP()

void DisposeATACallbackUPP ( ATACallbackUPP  userUPP)

DisposeATACallbackUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ DisposeATAClientUPP()

void DisposeATAClientUPP ( ATAClientUPP  userUPP)

DisposeATAClientUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ DisposeATADispatchUPP()

void DisposeATADispatchUPP ( ATADispatchUPP  userUPP)

DisposeATADispatchUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ InvokeATACallbackUPP()

void InvokeATACallbackUPP ( void *  ataPB,
ATACallbackUPP  userUPP 
)

InvokeATACallbackUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ InvokeATAClientUPP()

SInt16 InvokeATAClientUPP ( ATAEventRecPtr  ataERPtr,
ATAClientUPP  userUPP 
)

InvokeATAClientUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ InvokeATADispatchUPP()

OSErr InvokeATADispatchUPP ( ataPB pb,
ATADispatchUPP  userUPP 
)

InvokeATADispatchUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ NativeATAMgr()

SInt16 NativeATAMgr ( ataPB request)

NativeATAMgr()

Non-Carbon CFM: in ATAManager 4 and later
Carbon Lib: not available
Mac OS X: not available

◆ NewATACallbackUPP()

ATACallbackUPP NewATACallbackUPP ( ATACallbackProcPtr  userRoutine)

NewATACallbackUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ NewATAClientUPP()

ATAClientUPP NewATAClientUPP ( ATAClientProcPtr  userRoutine)

NewATAClientUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available

◆ NewATADispatchUPP()

ATADispatchUPP NewATADispatchUPP ( ATADispatchProcPtr  userRoutine)

NewATADispatchUPP()

Non-Carbon CFM: available as macro/inline
Carbon Lib: not available
Mac OS X: not available