#ifndef _ATACOMMAND_H
#define _ATACOMMAND_H
enum ATADeviceType
{
kATADeviceNone,
kATADeviceATA,
kATADeviceATAPI,
};
enum ATATimingProtocol
{
kATATimingPIO = (1 << 0),
kATATimingDMA = (1 << 1),
kATATimingUltraDMA33 = (1 << 2),
kATATimingUltraDMA66 = (1 << 3),
kATAMaxTimings = 4,
};
enum ATAProtocol
{
kATAProtocolNone = 0,
kATAProtocolSetRegs = (1 << 0),
kATAProtocolPIO = (1 << 1),
kATAProtocolDMA = (1 << 2),
kATAProtocolDMAQueued = (1 << 3),
kATAProtocolDMAQueuedRelease = (1 << 4),
kATAProtocolATAPIPIO = (1 << 16),
kATAProtocolATAPIDMA = (1 << 17),
};
typedef struct ATATiming
{
enum ATATimingProtocol timingProtocol;
UInt32 featureSetting;
UInt32 mode;
UInt32 minDataAccess;
UInt32 minDataCycle;
UInt32 minCmdAccess;
UInt32 minCmdCycle;
UInt32 reserved_3[9];
} ATATiming;
enum ATATagType
{
kATATagTypeNone = 0,
kATATagTypeSimple,
};
enum ATAReturnCode
{
kATAReturnSuccess,
kATAReturnNotSupported,
kATAReturnNoResource,
kATAReturnRetryPIO,
kATAReturnBusyError,
kATAReturnInterruptTimeout,
kATAReturnStatusError,
kATAReturnProtocolError,
kATAReturnDMAError,
kATAReturnBusReset,
};
#define ATARegtoMask(reg) (1<<(reg))
typedef struct ATATaskfile
{
enum ATAProtocol protocol;
UInt32 flags;
UInt8 tagType;
UInt32 tag;
UInt32 resultmask;
UInt32 regmask;
UInt32 ataRegs[kMaxATARegs];
} ATATaskfile;
enum ATACmdFlags
{
kATACmdFlagTimingChanged = 0x00000001,
};
typedef struct ATACDBInfo
{
UInt32 cdbFlags;
UInt32 cdbLength;
UInt8 cdb[16];
UInt32 reserved[16];
} ATACDBInfo;
enum ATACDBFlags
{
};
typedef struct ATAResults
{
IOReturn returnCode;
UInt32 bytesTransferred;
enum ATAReturnCode adapterStatus;
Boolean requestSenseDone;
UInt32 requestSenseLength;
UInt32 ataRegs[kMaxATARegs];
UInt32 reserved[16];
} ATAResults;
#endif