IOFireWireFamilyCommon.h [plain text]
#ifndef __IOFireWireFamilyCommon_H__
#define __IOFireWireFamilyCommon_H__
#ifdef KERNEL
#ifndef __IOKIT_IOTYPES_H
#include <IOKit/IOTypes.h>
#endif
#else
#include <IOKit/IOKitLib.h>
#endif
#define FW_OLD_DCL_DEFS
#define FW_OLD_BIT_DEFS
#pragma mark -
#pragma mark BITS
#define BIT(x) ( 1 << (x) )
#define FW_BIT(x) ( 1 << (31 - (x) ) )
#define FWBitRange(start, end) \
( \
((((UInt32) 0xFFFFFFFF) << (start)) >> \
((start) + (31 - (end)))) << \
(31 - (end)) \
)
#define FWBitRangePhase(start, end) \
(31 - (end))
#define BitRange(start, end) \
( \
((((UInt32) 0xFFFFFFFF) << (31 - (end))) >> \
((31 - (end)) + (start))) << \
(start) \
)
#define BitRangePhase(start, end) \
(start)
#pragma mark -
#pragma mark MESSAGES AND ERRORS
#define iokit_fw_err(return) (sys_iokit|sub_iokit_firewire|return)
#define kIOFireWireResponseBase iokit_fw_err(0x10)
#define kIOFireWireBusReset (kIOFireWireResponseBase+kFWResponseBusResetError)
#define kIOConfigNoEntry iokit_fw_err(0x1)
#define kIOFireWirePending iokit_fw_err(0x2)
#define kIOFireWireLastDCLToken iokit_fw_err(0x3)
#define kIOFireWireConfigROMInvalid iokit_fw_err(0x4)
#define kIOFireWireAlreadyRegistered iokit_fw_err(0x5)
#define kIOFireWireMultipleTalkers iokit_fw_err(0x6)
#define kIOFireWireChannelActive iokit_fw_err(0x7)
#define kIOFireWireNoListenerOrTalker iokit_fw_err(0x8)
#define kIOFireWireNoChannels iokit_fw_err(0x9)
#define kIOFireWireChannelNotAvailable iokit_fw_err(0xA)
#define kIOFireWireSeparateBus iokit_fw_err(0xB)
#define kIOFireWireBadSelfIDs iokit_fw_err(0xC)
#define kIOFireWireLowCableVoltage iokit_fw_err(0xD)
#define kIOFireWireInsufficientPower iokit_fw_err(0xE)
#define kIOFireWireOutOfTLabels iokit_fw_err(0xF)
#define kIOFireWireBogusDCLProgram iokit_fw_err(0x101)
#define kIOFireWireTalkingAndListening iokit_fw_err(0x102)
#define kIOFireWireHardwareSlept iokit_fw_err(0x103)
#define kIOFireWireCompleting iokit_fw_err(0x104)
#define kIOFireWireInvalidResponseLength iokit_fw_err(0x105)
#define kIOFireWireIsochBandwidthNotAvailable iokit_fw_err(0x106)
#define kIOFWMessageServiceIsRequestingClose (UInt32)iokit_fw_err(0x7D0)
#define kIOFWMessagePowerStateChanged (UInt32)iokit_fw_err(0x7D1)
#define kIOFWMessageTopologyChanged (UInt32)iokit_fw_err(0x7D2)
#pragma mark -
#pragma mark PSEDUO ADDRESS SPACE RESPONSE CODES
enum
{
kFWResponseComplete = 0, kFWResponseConflictError = 4, kFWResponseDataError = 5, kFWResponseTypeError = 6, kFWResponseAddressError = 7, kFWResponseBusResetError = 16, kFWResponsePending = 17 };
enum
{
kFWAckTimeout = -1, kFWAckComplete = 1,
kFWAckPending = 2,
kFWAckBusyX = 4,
kFWAckBusyA = 5,
kFWAckBusyB = 6,
kFWAckDataError = 13,
kFWAckTypeError = 14
};
#pragma mark -
#pragma mark BUS SPEED NUMBERS
typedef enum
{
kFWSpeed100MBit = 0,
kFWSpeed200MBit = 1,
kFWSpeed400MBit = 2,
kFWSpeed800MBit = 3,
kFWSpeedReserved = 3,
kFWSpeedUnknownMask = 0x80,
kFWSpeedMaximum = 0x7FFFFFFF,
kFWSpeedInvalid = 0x80000000
} IOFWSpeed;
#pragma mark -
#pragma mark FWADDRESS
typedef struct FWAddressStruct
{
UInt16 nodeID; UInt16 addressHi; UInt32 addressLo;
#ifdef __cplusplus
FWAddressStruct(const FWAddressStruct & a):
nodeID(a.nodeID), addressHi(a.addressHi), addressLo(a.addressLo) {};
FWAddressStruct(UInt16 h=0xdead, UInt32 l=0xcafebabe) :
nodeID(0), addressHi(h), addressLo(l) {};
FWAddressStruct(UInt16 h, UInt32 l, UInt16 n) :
nodeID(n), addressHi(h), addressLo(l) {};
#endif
} FWAddress, *FWAddressPtr ;
#pragma mark -
#pragma mark CONFIG ROM
#define CSR_BIT(x) FW_BIT(x)
#define CSRBitRange(start, end) \
( \
((((UInt32) 0xFFFFFFFF) << (start)) >> \
((start) + (31 - (end)))) << \
(31 - (end)) \
)
#define CSRBitRangePhase(start, end) \
(31 - end)
typedef enum
{
kConfigImmediateKeyType = 0,
kConfigOffsetKeyType = 1,
kConfigLeafKeyType = 2,
kConfigDirectoryKeyType = 3,
kInvalidConfigROMEntryType = 0xff
} IOConfigKeyType;
enum
{
kConfigTextualDescriptorKey = 0x01,
kConfigBusDependentInfoKey = 0x02,
kConfigModuleVendorIdKey = 0x03,
kConfigModuleHwVersionKey = 0x04,
kConfigModuleSpecIdKey = 0x05,
kConfigModuleSwVersionKey = 0x06,
kConfigModuleDependentInfoKey = 0x07,
kConfigNodeVendorIdKey = 0x08,
kConfigNodeHwVersionKey = 0x09,
kConfigNodeSpecIdKey = 0x0A,
kConfigNodeSwVersionKey = 0x0B,
kConfigNodeCapabilitiesKey = 0x0C,
kConfigNodeUniqueIdKey = 0x0D,
kConfigNodeUnitsExtentKey = 0x0E,
kConfigNodeMemoryExtentKey = 0x0F,
kConfigNodeDependentInfoKey = 0x10,
kConfigUnitDirectoryKey = 0x11,
kConfigUnitSpecIdKey = 0x12,
kConfigUnitSwVersionKey = 0x13,
kConfigUnitDependentInfoKey = 0x14,
kConfigUnitLocationKey = 0x15,
kConfigUnitPollMaskKey = 0x16,
kConfigModelIdKey = 0x17,
kConfigGenerationKey = 0x38,
kConfigRootDirectoryKey = 0xffff };
enum
{
kConfigSBP2LUN = 0x14,
kConfigSBP2Revision = 0x21,
kConfigSBP2MAO = 0x54
};
enum
{
kCSRStateUnitDepend = CSRBitRange(0, 15),
kCSRStateUnitDependPhase = CSRBitRangePhase(0, 15),
kCSRStateBusDepend = CSRBitRange(16, 23),
kCSRStateBusDependPhase = CSRBitRangePhase(16, 23),
kCSRStateLost = CSR_BIT(24),
kCSRStateDReq = CSR_BIT(25),
kCSRStateELog = CSR_BIT(27),
kCSRStateAtn = CSR_BIT(28),
kCSRStateOff = CSR_BIT(29),
kCSRStateState = CSRBitRange(30, 31),
kCSRStateStatePhase = CSRBitRangePhase(30, 31),
kCSRStateStateRunning = 0,
kCSRStateStateInitializing = 1,
kCSRStateStateTesting = 2,
kCSRStateStateDead = 3
};
enum
{
kConfigBusInfoBlockLength = CSRBitRange (0, 7),
kConfigBusInfoBlockLengthPhase = CSRBitRangePhase (0, 7),
kConfigROMCRCLength = CSRBitRange (8, 15),
kConfigROMCRCLengthPhase = CSRBitRangePhase (8, 15),
kConfigROMCRCValue = CSRBitRange (16, 31),
kConfigROMCRCValuePhase = CSRBitRangePhase (16, 31),
kConfigEntryKeyType = CSRBitRange (0, 1),
kConfigEntryKeyTypePhase = CSRBitRangePhase (0, 1),
kConfigEntryKeyValue = CSRBitRange (2, 7),
kConfigEntryKeyValuePhase = CSRBitRangePhase (2, 7),
kConfigEntryValue = CSRBitRange (8, 31),
kConfigEntryValuePhase = CSRBitRangePhase (8, 31),
kConfigLeafDirLength = CSRBitRange (0, 15),
kConfigLeafDirLengthPhase = CSRBitRangePhase (0, 15),
kConfigLeafDirCRC = CSRBitRange (16, 31),
kConfigLeafDirCRCPhase = CSRBitRangePhase (16, 31)
};
typedef enum
{
kCSRImmediateKeyType = 0,
kCSROffsetKeyType = 1,
kCSRLeafKeyType = 2,
kCSRDirectoryKeyType = 3,
kInvalidCSRROMEntryType = 0xff
} IOCSRKeyType;
enum
{
kCSRNodeID = CSRBitRange (0, 15),
kCSRNodeIDPhase = CSRBitRangePhase (0, 15),
kCSRInitialMemorySpaceBaseAddressHi = 0x00000000,
kCSRInitialMemorySpaceBaseAddressLo = 0x00000000,
kCSRPrivateSpaceBaseAddressHi = 0x0000FFFF,
kCSRPrivateSpaceBaseAddressLo = 0xE0000000,
kCSRRegisterSpaceBaseAddressHi = 0x0000FFFF,
kCSRRegisterSpaceBaseAddressLo = 0xF0000000,
kCSRCoreRegistersBaseAddress = kCSRRegisterSpaceBaseAddressLo,
kCSRStateClearAddress = kCSRCoreRegistersBaseAddress + 0x0000,
kCSRStateSetAddress = kCSRCoreRegistersBaseAddress + 0x0004,
kCSRNodeIDsAddress = kCSRCoreRegistersBaseAddress + 0x0008,
kCSRResetStartAddress = kCSRCoreRegistersBaseAddress + 0x000C,
kCSRIndirectAddressAddress = kCSRCoreRegistersBaseAddress + 0x0010,
kCSRIndirectDataAddress = kCSRCoreRegistersBaseAddress + 0x0014,
kCSRSplitTimeoutHiAddress = kCSRCoreRegistersBaseAddress + 0x0018,
kCSRSplitTimeoutLoAddress = kCSRCoreRegistersBaseAddress + 0x001C,
kCSRArgumentHiAddress = kCSRCoreRegistersBaseAddress + 0x0020,
kCSRArgumentLoAddress = kCSRCoreRegistersBaseAddress + 0x0024,
kCSRTestStartAddress = kCSRCoreRegistersBaseAddress + 0x0028,
kCSRTestStatusAddress = kCSRCoreRegistersBaseAddress + 0x002C,
kCSRUnitsBaseHiAddress = kCSRCoreRegistersBaseAddress + 0x0030,
kCSRUnitsBaseLoAddress = kCSRCoreRegistersBaseAddress + 0x0034,
kCSRUnitsBoundHiAddress = kCSRCoreRegistersBaseAddress + 0x0038,
kCSRUnitsBoundLoAddress = kCSRCoreRegistersBaseAddress + 0x003C,
kCSRMemoryBaseHiAddress = kCSRCoreRegistersBaseAddress + 0x0040,
kCSRMemoryBaseLoAddress = kCSRCoreRegistersBaseAddress + 0x0044,
kCSRMemoryBoundHiAddress = kCSRCoreRegistersBaseAddress + 0x0048,
kCSRMemoryBoundLoAddress = kCSRCoreRegistersBaseAddress + 0x004C,
kCSRInterruptTargetAddress = kCSRCoreRegistersBaseAddress + 0x0050,
kCSRInterruptMaskAddress = kCSRCoreRegistersBaseAddress + 0x0054,
kCSRClockValueHiAddress = kCSRCoreRegistersBaseAddress + 0x0058,
kCSRClockValueMidAddress = kCSRCoreRegistersBaseAddress + 0x005C,
kCSRClockTickPeriodMidAddress = kCSRCoreRegistersBaseAddress + 0x0060,
kCSRClockTickPeriodLoAddress = kCSRCoreRegistersBaseAddress + 0x0064,
kCSRClockStrobeArrivedHiAddress = kCSRCoreRegistersBaseAddress + 0x0068,
kCSRClockStrobeArrivedMidAddress = kCSRCoreRegistersBaseAddress + 0x006C,
kCSRClockInfo0Address = kCSRCoreRegistersBaseAddress + 0x0070,
kCSRClockInfo1Address = kCSRCoreRegistersBaseAddress + 0x0074,
kCSRClockInfo2Address = kCSRCoreRegistersBaseAddress + 0x0078,
kCSRClockInfo3Address = kCSRCoreRegistersBaseAddress + 0x007C,
kCSRMessageRequestAddress = kCSRCoreRegistersBaseAddress + 0x0080,
kCSRMessageResponseAddress = kCSRCoreRegistersBaseAddress + 0x00C0,
kCSRErrorLogBufferAddress = kCSRCoreRegistersBaseAddress + 0x0180,
kCSRBusDependentRegistersBaseAddress = kCSRRegisterSpaceBaseAddressLo + 0x0200,
kCSRBusyTimeout = kCSRRegisterSpaceBaseAddressLo + 0x0210,
kCSRBusManagerID = kCSRRegisterSpaceBaseAddressLo + 0x021C,
kCSRBandwidthAvailable = kCSRRegisterSpaceBaseAddressLo + 0x0220,
kCSRChannelsAvailable31_0 = kCSRRegisterSpaceBaseAddressLo + 0x0224,
kCSRChannelsAvailable63_32 = kCSRRegisterSpaceBaseAddressLo + 0x0228,
kCSRBroadcastChannel = kCSRRegisterSpaceBaseAddressLo + 0x0234,
kConfigROMBaseAddress = kCSRRegisterSpaceBaseAddressLo + 0x0400,
kConfigBIBHeaderAddress = kConfigROMBaseAddress,
kConfigBIBBusNameAddress = kConfigROMBaseAddress + 4,
kPCRBaseAddress = kCSRRegisterSpaceBaseAddressLo + 0x900,
kFCPCommandAddress = kCSRRegisterSpaceBaseAddressLo + 0xb00,
kFCPResponseAddress = kCSRRegisterSpaceBaseAddressLo + 0xd00
};
#define kBroadcastChannelInitialValues 0x8000001f
#define kBroadcastChannelValidMask 0x40000000
typedef UInt64 CSRNodeUniqueID;
enum
{
kFWCSRStateGone = FW_BIT(16),
kFWCSRStateLinkOff = FW_BIT(22),
kFWCSRStateCMstr = FW_BIT(23)
};
enum
{
kFWAddressBusID = FWBitRange (16, 25) << kCSRNodeIDPhase,
kFWAddressBusIDPhase = FWBitRangePhase (16, 25) + kCSRNodeIDPhase,
kFWAddressNodeID = FWBitRange (26, 31) << kCSRNodeIDPhase,
kFWAddressNodeIDPhase = FWBitRangePhase (26, 31) + kCSRNodeIDPhase,
kFWLocalBusID = 1023,
kFWBroadcastNodeID = 63,
kFWBadNodeID = 0xffff,
kFWLocalBusAddress = kFWLocalBusID << kFWAddressBusIDPhase,
kFWBroadcastAddress = kFWBroadcastNodeID << kFWAddressNodeIDPhase
};
#define FWNodeBaseAddress(busID, nodeID) \
( \
(busID << kFWAddressBusIDPhase) | \
(nodeID << kFWAddressNodeIDPhase) \
)
#define FWNodeRegisterSpaceBaseAddressHi(busID, nodeID) \
( \
FWNodeBaseAddress (busID, nodeID) | \
kCSRRegisterSpaceBaseAddressHi \
)
enum
{
kFWBIBHeaderAddress = kConfigBIBHeaderAddress,
kFWBIBBusNameAddress = kConfigBIBBusNameAddress,
kFWBIBNodeCapabilitiesAddress = kConfigROMBaseAddress + 8,
kFWBIBNodeUniqueIDHiAddress = kConfigROMBaseAddress + 12,
kFWBIBNodeUniqueIDLoAddress = kConfigROMBaseAddress + 16,
kFWBIBBusName = 0x31333934,
kFWBIBIrmc = FW_BIT(0),
kFWBIBCmc = FW_BIT(1),
kFWBIBIsc = FW_BIT(2),
kFWBIBBmc = FW_BIT(3),
kFWBIBCycClkAcc = FWBitRange (8, 15),
kFWBIBCycClkAccPhase = FWBitRangePhase (8, 15),
kFWBIBMaxRec = FWBitRange (16, 19),
kFWBIBMaxRecPhase = FWBitRangePhase (16, 19),
kFWBIBMaxROM = FWBitRange (20, 21),
kFWBIBMaxROMPhase = FWBitRangePhase (20, 21),
kFWBIBGeneration = FWBitRange (24, 27),
kFWBIBGenerationPhase = FWBitRangePhase (24, 27),
kFWBIBLinkSpeed = FWBitRange (29, 31),
kFWBIBLinkSpeedPhase = FWBitRangePhase (29, 31)
};
enum
{
kConfigUnitSpecAppleA27 = 0x000a27,
kConfigUnitSpec1394TA1 = 0x00a02d,
kConfigUnitSWVersMacintosh10 = 10,
kConfigUnitSWVersIIDC100 = 0x000100,
kConfigUnitSWVersIIDC101 = 0x000101,
kConfigUnitSWVersIIDC102 = 0x000102
};
#pragma mark -
#pragma mark ISOCH
enum
{
kFWIsochDataLength = FWBitRange (0, 15),
kFWIsochDataLengthPhase = FWBitRangePhase (0, 15),
kFWIsochTag = FWBitRange (16, 17),
kFWIsochTagPhase = FWBitRangePhase (16, 17),
kFWIsochChanNum = FWBitRange (18, 23),
kFWIsochChanNumPhase = FWBitRangePhase (18, 23),
kFWIsochTCode = FWBitRange (24, 27),
kFWIsochTCodePhase = FWBitRangePhase (24, 27),
kFWIsochSy = FWBitRange (28, 31),
kFWIsochSyPhase = FWBitRangePhase (28, 31)
};
#define CHAN_BIT(x) (((UInt64)1) << (63 - (x))
#define CHAN_MASK(x) (~CHAN_BIT(X))
typedef enum
{
kFWNeverMultiMode = 0,
kFWAllowMultiMode,
kFWSuggestMultiMode,
kFWAlwaysMultiMode,
kFWDefaultIsochResourceFlags = kFWNeverMultiMode
} IOFWIsochResourceFlags ;
enum
{
kFWIsochChannelDefaultFlags = 0,
kFWIsochChannelDoNotResumeOnWake = BIT(1)
} ;
typedef enum
{
kFWIsochPortDefaultOptions = 0,
kFWIsochPortUseSeparateKernelThread = BIT(1),
kFWIsochEnableRobustness = BIT(2),
kFWIsochBigEndianUpdates = BIT(3), kFWIsochRequireLastContext = BIT(4), } IOFWIsochPortOptions ;
#pragma mark -
#pragma mark DCL OPCODES
enum
{
kFWDCLImmediateEvent = 0,
kFWDCLCycleEvent = 1,
kFWDCLSyBitsEvent = 2
};
typedef enum
{
kFWDCLInvalidNotification = 0
, kFWDCLUpdateNotification = 1
, kFWDCLModifyNotification = 2
, kFWNuDCLModifyNotification = 3
, kFWNuDCLModifyJumpNotification = 4
, kFWNuDCLUpdateNotification = 5
} IOFWDCLNotificationType ;
enum
{
kFWDCLOpDynamicFlag = BIT(16),
kFWDCLOpVendorDefinedFlag = BIT(17),
kFWDCLOpFlagMask = BitRange (16, 31),
kFWDCLOpFlagPhase = BitRangePhase (16, 31)
};
enum
{
kDCLInvalidOp = 0,
kDCLSendPacketStartOp = 1,
kDCLSendPacketOp = 3,
kDCLSendBufferOp = 4, kDCLReceivePacketStartOp = 5,
kDCLReceivePacketOp = 6,
kDCLReceiveBufferOp = 7, kDCLCallProcOp = 8,
kDCLLabelOp = 9,
kDCLJumpOp = 10,
kDCLSetTagSyncBitsOp = 11,
kDCLUpdateDCLListOp = 12,
kDCLTimeStampOp = 13,
kDCLPtrTimeStampOp = 14,
kDCLSkipCycleOp = 15,
kDCLNuDCLLeaderOp = 20 };
#ifdef FW_OLD_DCL_DEFS
#else
#endif
#pragma mark -
#pragma mark DCL
#ifdef __LP64__
typedef void* DCLCallProcDataType;
#else
typedef UInt32 DCLCallProcDataType;
#endif
typedef struct DCLCommandStruct
{
struct DCLCommandStruct * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt32 operands[1]; } DCLCommand;
typedef void (DCLCallCommandProc)(DCLCommand * command);
typedef struct DCLTransferPacketStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; void * buffer; UInt32 size; } DCLTransferPacket ;
typedef struct DCLTransferBufferStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; void * buffer; UInt32 size; UInt16 packetSize; UInt16 reserved;
UInt32 bufferOffset; } DCLTransferBuffer ;
typedef struct DCLCallProcStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; DCLCallCommandProc * proc; DCLCallProcDataType procData; } DCLCallProc;
typedef struct DCLLabelStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; } DCLLabel;
typedef struct DCLJumpStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; DCLLabel * pJumpDCLLabel; } DCLJump;
typedef struct DCLSetTagSyncBitsStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt16 tagBits; UInt16 syncBits; } DCLSetTagSyncBits;
typedef struct DCLUpdateDCLListStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; DCLCommand ** dclCommandList; UInt32 numDCLCommands; } DCLUpdateDCLList;
typedef struct DCLTimeStampStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt32 timeStamp; } DCLTimeStamp;
typedef struct DCLPtrTimeStampStruct
{
DCLCommand * pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt32 * timeStampPtr; } DCLPtrTimeStamp ;
typedef struct
{
DCLCommand * pNextDCLCommand ; UInt32 compilerData; UInt32 opcode ; void* program ; } DCLNuDCLLeader ;
#ifdef FW_OLD_DCL_DEFS
typedef DCLCommand* DCLCommandPtr ;
typedef DCLTransferBuffer* DCLTransferBufferPtr ;
typedef DCLTransferPacket* DCLTransferPacketPtr ;
typedef DCLCallProc* DCLCallProcPtr ;
typedef DCLLabel* DCLLabelPtr ;
typedef DCLJump* DCLJumpPtr ;
typedef DCLSetTagSyncBits* DCLSetTagSyncBitsPtr ;
typedef DCLUpdateDCLList* DCLUpdateDCLListPtr ;
typedef DCLTimeStamp* DCLTimeStampPtr ;
typedef DCLPtrTimeStamp* DCLPtrTimeStampPtr ;
typedef DCLCallCommandProc* DCLCallCommandProcPtr ;
#endif
typedef struct UserExportDCLCommandStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt32 operands[1]; } __attribute__ ((packed)) UserExportDCLCommand;
typedef void (UserExportDCLCallCommandProc)(UserExportDCLCommand * command);
typedef struct UserExportDCLTransferPacketStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; mach_vm_address_t buffer; UInt32 size; } __attribute__ ((packed)) UserExportDCLTransferPacket ;
typedef struct UserExportDCLTransferBufferStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; mach_vm_address_t buffer; UInt32 size; UInt16 packetSize; UInt16 reserved;
UInt32 bufferOffset; } __attribute__ ((packed)) UserExportDCLTransferBuffer ;
typedef struct UserExportDCLCallProcStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; mach_vm_address_t proc; uint64_t procData; } __attribute__ ((packed)) UserExportDCLCallProc;
typedef struct UserExportDCLLabelStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; } __attribute__ ((packed)) UserExportDCLLabel;
typedef struct UserExportDCLJumpStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; mach_vm_address_t pJumpDCLLabel; } __attribute__ ((packed)) UserExportDCLJump;
typedef struct UserExportDCLSetTagSyncBitsStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt16 tagBits; UInt16 syncBits; } __attribute__ ((packed)) UserExportDCLSetTagSyncBits;
typedef struct UserExportDCLUpdateDCLListStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; mach_vm_address_t dclCommandList; UInt32 numDCLCommands; } __attribute__ ((packed)) UserExportDCLUpdateDCLList;
typedef struct UserExportDCLTimeStampStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; UInt32 timeStamp; } __attribute__ ((packed)) UserExportDCLTimeStamp;
typedef struct UserExportDCLPtrTimeStampStruct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand; UInt32 compilerData; UInt32 opcode; mach_vm_address_t timeStampPtr; } __attribute__ ((packed)) UserExportDCLPtrTimeStamp ;
typedef struct
{
mach_vm_address_t pClientDCLStruct; mach_vm_address_t pNextDCLCommand ; UInt32 compilerData; UInt32 opcode ; mach_vm_address_t program ; } __attribute__ ((packed)) UserExportDCLNuDCLLeader ;
#pragma mark -
#pragma mark NUDCL
typedef struct __NuDCL * NuDCLRef ;
typedef NuDCLRef NuDCLSendPacketRef ;
typedef NuDCLRef NuDCLSkipCycleRef ;
typedef NuDCLRef NuDCLReceivePacketRef ;
typedef void (*NuDCLCallback)( void* refcon, NuDCLRef dcl );
typedef enum
{
kNuDCLDynamic = BIT( 1 ),
kNuDCLUpdateBeforeCallback = BIT( 2 )
} NuDCLFlags ;
#pragma mark -
#pragma mark MISCELLANEOUS
typedef void* FWClientCommandID ;
typedef struct IOFireWireSessionRefOpaqueStuct* IOFireWireSessionRef ;
enum
{
kFWBusManagerArbitrationTimeoutDuration = 625 };
enum
{
kFWMaxBusses = 1023,
kFWMaxNodesPerBus = 63,
kFWMaxNodeHops = 16
};
enum
{
kIOFWDisablePhysicalAccess = (1 << 0),
kIOFWDisableAllPhysicalAccess = (1 << 1),
kIOFWEnableRetryOnAckD = (1 << 2),
kIOFWLimitAsyncPacketSize = (1 << 3),
kIOFWDisablePhyOnSleep = (1 << 4),
kIOFWMustBeRoot = (1 << 5),
kIOFWMustNotBeRoot = (1 << 6),
kIOFWMustHaveGap63 = (1 << 7)
};
enum IOFWWriteFlags
{
kIOFWWriteFlagsNone = 0x00000000,
kIOFWWriteFlagsDeferredNotify = 0x00000001,
kIOFWWriteFastRetryOnBusy = 0x00000002,
kIOFWWriteBlockRequest = 0x00000003, };
enum IOFWReadFlags
{
kIOFWReadFlagsNone = 0x00000000,
kIOFWReadBlockRequest = 0x00000003 };
enum IOFWSecurityMode
{
kIOFWSecurityModeNormal = 0,
kIOFWSecurityModeSecure = 1,
kIOFWSecurityModeSecurePermanent = 2
};
enum IOFWPhysicalAccessMode
{
kIOFWPhysicalAccessEnabled = 0,
kIOFWPhysicalAccessDisabled = 1,
kIOFWPhysicalAccessDisabledForGeneration = 2
};
enum
{
kIOFWSpecID_AAPL = 0xa27,
kIOFWSWVers_KPF = 0x40
};
#ifdef FW_OLD_BIT_DEFS
#define kBit0 BIT(0)
#define kBit1 BIT(1)
#define kBit2 BIT(2)
#define kBit3 BIT(3)
#define kBit4 BIT(4)
#define kBit5 BIT(5)
#define kBit6 BIT(6)
#define kBit7 BIT(7)
#define kBit8 BIT(8)
#define kBit9 BIT(9)
#define kBit10 BIT(10)
#define kBit11 BIT(11)
#define kBit12 BIT(12)
#define kBit13 BIT(13)
#define kBit14 BIT(14)
#define kBit15 BIT(15)
#define kBit16 BIT(16)
#define kBit17 BIT(17)
#define kBit18 BIT(18)
#define kBit19 BIT(19)
#define kBit20 BIT(20)
#define kBit21 BIT(21)
#define kBit22 BIT(22)
#define kBit23 BIT(23)
#define kBit24 BIT(24)
#define kBit25 BIT(25)
#define kBit26 BIT(26)
#define kBit27 BIT(27)
#define kBit28 BIT(28)
#define kBit29 BIT(29)
#define kBit30 BIT(30)
#define kBit31 BIT(31)
#endif
#endif //__IOFireWireFamilyCommon_H__