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(1)
#define kIOFireWirePending iokit_fw_err(2)
#define kIOFireWireLastDCLToken iokit_fw_err(3)
#define kIOFireWireConfigROMInvalid iokit_fw_err(4)
#define kIOFireWireAlreadyRegistered iokit_fw_err(5)
#define kIOFireWireMultipleTalkers iokit_fw_err(6)
#define kIOFireWireChannelActive iokit_fw_err(7)
#define kIOFireWireNoListenerOrTalker iokit_fw_err(8)
#define kIOFireWireNoChannels iokit_fw_err(9)
#define kIOFireWireChannelNotAvailable iokit_fw_err(10)
#define kIOFireWireSeparateBus iokit_fw_err(11)
#define kIOFireWireBadSelfIDs iokit_fw_err(12)
#define kIOFireWireLowCableVoltage iokit_fw_err(13)
#define kIOFireWireInsufficientPower iokit_fw_err(14)
#define kIOFireWireOutOfTLabels iokit_fw_err(15)
#define kIOFireWireBogusDCLProgram iokit_fw_err(257)
#define kIOFireWireTalkingAndListening iokit_fw_err(258)
#define kIOFWMessageServiceIsRequestingClose (UInt32)iokit_fw_err(2000)
#define kIOFWMessagePowerStateChanged (UInt32)iokit_fw_err(2001)
#define kIOFWMessageTopologyChanged (UInt32)iofit_fw_err(2002)
#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
{
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)
};
#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)
} ;
#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,
kDCLSendPacketWithHeaderStartOp = 2,
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
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; UInt32 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
#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)
};
enum IOFWWriteFlags
{
kIOFWWriteFlagsNone = 0x0000000,
kIOFWWriteFlagsDeferredNotify = 0x00000001
};
enum IOFWSecurityMode
{
kIOFWSecurityModeNormal = 0,
kIOFWSecurityModeSecure = 1,
kIOFWSecurityModeSecurePermanent = 2
};
enum IOFWPhysicalAccessMode
{
kIOFWPhysicalAccessEnabled = 0,
kIOFWPhysicalAccessDisabled = 1,
kIOFWPhysicalAccessDisabledForGeneration = 2
};
#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__