|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: File: IOFWRegs.h ! 24: ! 25: Contains: Definitions of standard FireWire CSR registers. ! 26: ! 27: Version: 1.0 ! 28: ! 29: Copyright: � 1996-1999 by Apple Computer, Inc., all rights reserved. ! 30: ! 31: */ ! 32: ! 33: #ifndef __IOFWREGS_H__ ! 34: #define __IOFWREGS_H__ ! 35: ! 36: #ifndef __IOKIT_IOTYPES_H ! 37: #include <IOKit/IOTypes.h> ! 38: #endif ! 39: ! 40: // Something we should add to IOTypes? ! 41: //typedef SInt8 * Ptr; ! 42: //typedef UInt8 Boolean; ! 43: ! 44: // Generic bit defs. ! 45: ! 46: enum ! 47: { ! 48: kBit0 = (1 << 0), ! 49: kBit1 = (1 << 1), ! 50: kBit2 = (1 << 2), ! 51: kBit3 = (1 << 3), ! 52: kBit4 = (1 << 4), ! 53: kBit5 = (1 << 5), ! 54: kBit6 = (1 << 6), ! 55: kBit7 = (1 << 7), ! 56: kBit8 = (1 << 8), ! 57: kBit9 = (1 << 9), ! 58: kBit10 = (1 << 10), ! 59: kBit11 = (1 << 11), ! 60: kBit12 = (1 << 12), ! 61: kBit13 = (1 << 13), ! 62: kBit14 = (1 << 14), ! 63: kBit15 = (1 << 15), ! 64: kBit16 = (1 << 16), ! 65: kBit17 = (1 << 17), ! 66: kBit18 = (1 << 18), ! 67: kBit19 = (1 << 19), ! 68: kBit20 = (1 << 20), ! 69: kBit21 = (1 << 21), ! 70: kBit22 = (1 << 22), ! 71: kBit23 = (1 << 23), ! 72: kBit24 = (1 << 24), ! 73: kBit25 = (1 << 25), ! 74: kBit26 = (1 << 26), ! 75: kBit27 = (1 << 27), ! 76: kBit28 = (1 << 28), ! 77: kBit29 = (1 << 29), ! 78: kBit30 = (1 << 30), ! 79: kBit31 = (1 << 31) ! 80: }; ! 81: ! 82: #define BitRange(start, end) \ ! 83: ( \ ! 84: ((((UInt32) 0xFFFFFFFF) << (31 - (end))) >> \ ! 85: ((31 - (end)) + (start))) << \ ! 86: (start) \ ! 87: ) ! 88: ! 89: #define BitRangePhase(start, end) \ ! 90: (start) ! 91: ! 92: ! 93: //////////////////////////////////////////////////////////////////////////////// ! 94: // ! 95: // Standard FireWire defs. ! 96: // ! 97: ! 98: // FireWire bit defs. ! 99: ! 100: enum ! 101: { ! 102: kFWBit0 = (1 << 31), ! 103: kFWBit1 = (1 << 30), ! 104: kFWBit2 = (1 << 29), ! 105: kFWBit3 = (1 << 28), ! 106: kFWBit4 = (1 << 27), ! 107: kFWBit5 = (1 << 26), ! 108: kFWBit6 = (1 << 25), ! 109: kFWBit7 = (1 << 24), ! 110: kFWBit8 = (1 << 23), ! 111: kFWBit9 = (1 << 22), ! 112: kFWBit10 = (1 << 21), ! 113: kFWBit11 = (1 << 20), ! 114: kFWBit12 = (1 << 19), ! 115: kFWBit13 = (1 << 18), ! 116: kFWBit14 = (1 << 17), ! 117: kFWBit15 = (1 << 16), ! 118: kFWBit16 = (1 << 15), ! 119: kFWBit17 = (1 << 14), ! 120: kFWBit18 = (1 << 13), ! 121: kFWBit19 = (1 << 12), ! 122: kFWBit20 = (1 << 11), ! 123: kFWBit21 = (1 << 10), ! 124: kFWBit22 = (1 << 9), ! 125: kFWBit23 = (1 << 8), ! 126: kFWBit24 = (1 << 7), ! 127: kFWBit25 = (1 << 6), ! 128: kFWBit26 = (1 << 5), ! 129: kFWBit27 = (1 << 4), ! 130: kFWBit28 = (1 << 3), ! 131: kFWBit29 = (1 << 2), ! 132: kFWBit30 = (1 << 1), ! 133: kFWBit31 = (1 << 0) ! 134: }; ! 135: ! 136: #define FWBitRange(start, end) \ ! 137: ( \ ! 138: ((((UInt32) 0xFFFFFFFF) << (start)) >> \ ! 139: ((start) + (31 - (end)))) << \ ! 140: (31 - (end)) \ ! 141: ) ! 142: ! 143: #define FWBitRangePhase(start, end) \ ! 144: (31 - end) ! 145: ! 146: ! 147: /*zzz Put in IEEE1212.h */ ! 148: //////////////////////////////////////////////////////////////////////////////// ! 149: // ! 150: // Define some CSR stuff. ! 151: // ! 152: ! 153: // CSR bit defs. ! 154: ! 155: enum ! 156: { ! 157: kCSRBit0 = (1 << 31), ! 158: kCSRBit1 = (1 << 30), ! 159: kCSRBit2 = (1 << 29), ! 160: kCSRBit3 = (1 << 28), ! 161: kCSRBit4 = (1 << 27), ! 162: kCSRBit5 = (1 << 26), ! 163: kCSRBit6 = (1 << 25), ! 164: kCSRBit7 = (1 << 24), ! 165: kCSRBit8 = (1 << 23), ! 166: kCSRBit9 = (1 << 22), ! 167: kCSRBit10 = (1 << 21), ! 168: kCSRBit11 = (1 << 20), ! 169: kCSRBit12 = (1 << 19), ! 170: kCSRBit13 = (1 << 18), ! 171: kCSRBit14 = (1 << 17), ! 172: kCSRBit15 = (1 << 16), ! 173: kCSRBit16 = (1 << 15), ! 174: kCSRBit17 = (1 << 14), ! 175: kCSRBit18 = (1 << 13), ! 176: kCSRBit19 = (1 << 12), ! 177: kCSRBit20 = (1 << 11), ! 178: kCSRBit21 = (1 << 10), ! 179: kCSRBit22 = (1 << 9), ! 180: kCSRBit23 = (1 << 8), ! 181: kCSRBit24 = (1 << 7), ! 182: kCSRBit25 = (1 << 6), ! 183: kCSRBit26 = (1 << 5), ! 184: kCSRBit27 = (1 << 4), ! 185: kCSRBit28 = (1 << 3), ! 186: kCSRBit29 = (1 << 2), ! 187: kCSRBit30 = (1 << 1), ! 188: kCSRBit31 = (1 << 0) ! 189: }; ! 190: ! 191: #define CSRBitRange(start, end) \ ! 192: ( \ ! 193: ((((UInt32) 0xFFFFFFFF) << (start)) >> \ ! 194: ((start) + (31 - (end)))) << \ ! 195: (31 - (end)) \ ! 196: ) ! 197: ! 198: #define CSRBitRangePhase(start, end) \ ! 199: (31 - end) ! 200: ! 201: // Core CSR registers. ! 202: ! 203: enum ! 204: { ! 205: kCSRStateUnitDepend = CSRBitRange (0, 15), ! 206: kCSRStateUnitDependPhase = CSRBitRangePhase (0, 15), ! 207: ! 208: kCSRStateBusDepend = CSRBitRange (16, 23), ! 209: kCSRStateBusDependPhase = CSRBitRangePhase (16, 23), ! 210: ! 211: kCSRStateLost = kCSRBit24, ! 212: kCSRStateDReq = kCSRBit25, ! 213: kCSRStateELog = kCSRBit27, ! 214: kCSRStateAtn = kCSRBit28, ! 215: kCSRStateOff = kCSRBit29, ! 216: ! 217: kCSRStateState = CSRBitRange (30, 31), ! 218: kCSRStateStatePhase = CSRBitRangePhase (30, 31), ! 219: kCSRStateStateRunning = 0, ! 220: kCSRStateStateInitializing = 1, ! 221: kCSRStateStateTesting = 2, ! 222: kCSRStateStateDead = 3 ! 223: }; ! 224: ! 225: // Key values. ! 226: ! 227: enum ! 228: { ! 229: kCSRTextualDescriptorKey = 0x01, ! 230: kCSRBusDependentInfoKey = 0x02, ! 231: kCSRModuleVendorIDKey = 0x03, ! 232: kCSRModuleHwVersionKey = 0x04, ! 233: kCSRModuleSpecIdKey = 0x05, ! 234: kCSRModuleSwVersionKey = 0x06, ! 235: kCSRModuleDependentInfoKey = 0x07, ! 236: kCSRNodeVendorIdKey = 0x08, ! 237: kCSRNodeHwVersionKey = 0x09, ! 238: kCSRNodeSpecIdKey = 0x0A, ! 239: kCSRNodeSwVersionKey = 0x0B, ! 240: kCSRNodeCapabilitiesKey = 0x0C, ! 241: kCSRNodeUniqueIdKey = 0x0D, ! 242: kCSRNodeUnitsExtentKey = 0x0E, ! 243: kCSRNodeMemoryExtentKey = 0x0F, ! 244: kCSRNodeDependentInfoKey = 0x10, ! 245: kCSRUnitDirectoryKey = 0x11, ! 246: kCSRUnitSpecIdKey = 0x12, ! 247: kCSRUnitSwVersionKey = 0x13, ! 248: kCSRUnitDependentInfoKey = 0x14, ! 249: kCSRUnitLocationKey = 0x15, ! 250: kCSRUnitPollMaskKey = 0x16 ! 251: }; ! 252: ! 253: ! 254: // Key value bits for searching. ! 255: ! 256: enum ! 257: { ! 258: kCSREveryKey = 0xFFFFFFFF, ! 259: ! 260: kCSRTextualDescriptorKeyLoBit = (1 << kCSRTextualDescriptorKey), ! 261: kCSRTextualDescriptorKeyHiBit = 0, ! 262: kCSRBusDependentInfoKeyLoBit = (1 << kCSRBusDependentInfoKey), ! 263: kCSRBusDependentInfoKeyHiBit = 0, ! 264: kCSRModuleVendorIDKeyLoBit = (1 << kCSRModuleVendorIDKey), ! 265: kCSRModuleVendorIDKeyHiBit = 0, ! 266: kCSRModuleHwVersionKeyLoBit = (1 << kCSRModuleHwVersionKey), ! 267: kCSRModuleHwVersionKeyHiBit = 0, ! 268: kCSRModuleSpecIdKeyLoBit = (1 << kCSRModuleSpecIdKey), ! 269: kCSRModuleSpecIdKeyHiBit = 0, ! 270: kCSRModuleSwVersionKeyLoBit = (1 << kCSRModuleSwVersionKey), ! 271: kCSRModuleSwVersionKeyHiBit = 0, ! 272: kCSRModuleDependentInfoKeyLoBit = (1 << kCSRModuleDependentInfoKey), ! 273: kCSRModuleDependentInfoKeyHiBit = 0, ! 274: kCSRNodeVendorIdKeyLoBit = (1 << kCSRNodeVendorIdKey), ! 275: kCSRNodeVendorIdKeyHiBit = 0, ! 276: kCSRNodeHwVersionKeyLoBit = (1 << kCSRNodeHwVersionKey), ! 277: kCSRNodeHwVersionKeyHiBit = 0, ! 278: kCSRNodeSpecIdKeyLoBit = (1 << kCSRNodeSpecIdKey), ! 279: kCSRNodeSpecIdKeyHiBit = 0, ! 280: kCSRNodeSwVersionKeyLoBit = (1 << kCSRNodeSwVersionKey), ! 281: kCSRNodeSwVersionKeyHiBit = 0, ! 282: kCSRNodeCapabilitiesKeyLoBit = (1 << kCSRNodeCapabilitiesKey), ! 283: kCSRNodeCapabilitiesKeyHiBit = 0, ! 284: kCSRNodeUniqueIdKeyLoBit = (1 << kCSRNodeUniqueIdKey), ! 285: kCSRNodeUniqueIdKeyHiBit = 0, ! 286: kCSRNodeUnitsExtentKeyLoBit = (1 << kCSRNodeUnitsExtentKey), ! 287: kCSRNodeUnitsExtentKeyHiBit = 0, ! 288: kCSRNodeMemoryExtentKeyLoBit = (1 << kCSRNodeMemoryExtentKey), ! 289: kCSRNodeMemoryExtentKeyHiBit = 0, ! 290: kCSRNodeDependentInfoKeyLoBit = (1 << kCSRNodeDependentInfoKey), ! 291: kCSRNodeDependentInfoKeyHiBit = 0, ! 292: kCSRUnitDirectoryKeyLoBit = (1 << kCSRUnitDirectoryKey), ! 293: kCSRUnitDirectoryKeyHiBit = 0, ! 294: kCSRUnitSpecIdKeyLoBit = (1 << kCSRUnitSpecIdKey), ! 295: kCSRUnitSpecIdKeyHiBit = 0, ! 296: kCSRUnitSwVersionKeyLoBit = (1 << kCSRUnitSwVersionKey), ! 297: kCSRUnitSwVersionKeyHiBit = 0, ! 298: kCSRUnitDependentInfoKeyLoBit = (1 << kCSRUnitDependentInfoKey), ! 299: kCSRUnitDependentInfoKeyHiBit = 0, ! 300: kCSRUnitLocationKeyLoBit = (1 << kCSRUnitLocationKey), ! 301: kCSRUnitLocationKeyHiBit = 0, ! 302: kCSRUnitPollMaskKeyLoBit = (1 << kCSRUnitPollMaskKey), ! 303: kCSRUnitPollMaskKeyHiBit = 0 ! 304: }; ! 305: ! 306: ! 307: // Key types. ! 308: ! 309: enum ! 310: { ! 311: kCSRImmediateKeyType = 0, ! 312: kCSROffsetKeyType = 1, ! 313: kCSRLeafKeyType = 2, ! 314: kCSRDirectoryKeyType = 3 ! 315: }; ! 316: ! 317: ! 318: // Key type bits for searching. ! 319: ! 320: enum ! 321: { ! 322: kCSREveryKeyType = 0xFFFFFFFF, ! 323: ! 324: kCSRImmediateKeyTypeBit = (1 << kCSRImmediateKeyType), ! 325: kCSROffsetKeyTypeBit = (1 << kCSROffsetKeyType), ! 326: kCSRLeafKeyTypeBit = (1 << kCSRLeafKeyType), ! 327: kCSRDirectoryKeyTypeBit = (1 << kCSRDirectoryKeyType) ! 328: }; ! 329: ! 330: // CSR ROM entry bit locations. ! 331: ! 332: enum ! 333: { ! 334: kCSRBusInfoBlockLength = CSRBitRange (0, 7), ! 335: kCSRBusInfoBlockLengthPhase = CSRBitRangePhase (0, 7), ! 336: ! 337: kCSRROMCRCLength = CSRBitRange (8, 15), ! 338: kCSRROMCRCLengthPhase = CSRBitRangePhase (8, 15), ! 339: ! 340: kCSRROMCRCValue = CSRBitRange (16, 31), ! 341: kCSRROMCRCValuePhase = CSRBitRangePhase (16, 31), ! 342: ! 343: kCSREntryKeyType = CSRBitRange (0, 1), ! 344: kCSREntryKeyTypePhase = CSRBitRangePhase (0, 1), ! 345: ! 346: kCSREntryKeyValue = CSRBitRange (2, 7), ! 347: kCSREntryKeyValuePhase = CSRBitRangePhase (2, 7), ! 348: ! 349: kCSREntryValue = CSRBitRange (8, 31), ! 350: kCSREntryValuePhase = CSRBitRangePhase (8, 31), ! 351: ! 352: kCSRLeafDirLength = CSRBitRange (0, 15), ! 353: kCSRLeafDirLengthPhase = CSRBitRangePhase (0, 15), ! 354: ! 355: kCSRLeafDirCRC = CSRBitRange (16, 31), ! 356: kCSRLeafDirCRCPhase = CSRBitRangePhase (16, 31) ! 357: }; ! 358: ! 359: // CSR 64-bit fixed address defs. ! 360: ! 361: enum ! 362: { ! 363: kCSRNodeID = CSRBitRange (0, 15), ! 364: kCSRNodeIDPhase = CSRBitRangePhase (0, 15), ! 365: ! 366: kCSRInitialMemorySpaceBaseAddressHi = 0x00000000, ! 367: kCSRInitialMemorySpaceBaseAddressLo = 0x00000000, ! 368: ! 369: kCSRPrivateSpaceBaseAddressHi = 0x0000FFFF, ! 370: kCSRPrivateSpaceBaseAddressLo = 0xE0000000, ! 371: ! 372: kCSRRegisterSpaceBaseAddressHi = 0x0000FFFF, ! 373: kCSRRegisterSpaceBaseAddressLo = 0xF0000000, ! 374: ! 375: kCSRCoreRegistersBaseAddress = kCSRRegisterSpaceBaseAddressLo, ! 376: kCSRStateClearAddress = kCSRCoreRegistersBaseAddress + 0x0000, ! 377: kCSRStateSetAddress = kCSRCoreRegistersBaseAddress + 0x0004, ! 378: kCSRNodeIDsAddress = kCSRCoreRegistersBaseAddress + 0x0008, ! 379: kCSRResetStartAddress = kCSRCoreRegistersBaseAddress + 0x000C, ! 380: kCSRIndirectAddressAddress = kCSRCoreRegistersBaseAddress + 0x0010, ! 381: kCSRIndirectDataAddress = kCSRCoreRegistersBaseAddress + 0x0014, ! 382: kCSRSplitTimeoutHiAddress = kCSRCoreRegistersBaseAddress + 0x0018, ! 383: kCSRSplitTimeoutLoAddress = kCSRCoreRegistersBaseAddress + 0x001C, ! 384: kCSRArgumentHiAddress = kCSRCoreRegistersBaseAddress + 0x0020, ! 385: kCSRArgumentLoAddress = kCSRCoreRegistersBaseAddress + 0x0024, ! 386: kCSRTestStartAddress = kCSRCoreRegistersBaseAddress + 0x0028, ! 387: kCSRTestStatusAddress = kCSRCoreRegistersBaseAddress + 0x002C, ! 388: kCSRUnitsBaseHiAddress = kCSRCoreRegistersBaseAddress + 0x0030, ! 389: kCSRUnitsBaseLoAddress = kCSRCoreRegistersBaseAddress + 0x0034, ! 390: kCSRUnitsBoundHiAddress = kCSRCoreRegistersBaseAddress + 0x0038, ! 391: kCSRUnitsBoundLoAddress = kCSRCoreRegistersBaseAddress + 0x003C, ! 392: kCSRMemoryBaseHiAddress = kCSRCoreRegistersBaseAddress + 0x0040, ! 393: kCSRMemoryBaseLoAddress = kCSRCoreRegistersBaseAddress + 0x0044, ! 394: kCSRMemoryBoundHiAddress = kCSRCoreRegistersBaseAddress + 0x0048, ! 395: kCSRMemoryBoundLoAddress = kCSRCoreRegistersBaseAddress + 0x004C, ! 396: kCSRInterruptTargetAddress = kCSRCoreRegistersBaseAddress + 0x0050, ! 397: kCSRInterruptMaskAddress = kCSRCoreRegistersBaseAddress + 0x0054, ! 398: kCSRClockValueHiAddress = kCSRCoreRegistersBaseAddress + 0x0058, ! 399: kCSRClockValueMidAddress = kCSRCoreRegistersBaseAddress + 0x005C, ! 400: kCSRClockTickPeriodMidAddress = kCSRCoreRegistersBaseAddress + 0x0060, ! 401: kCSRClockTickPeriodLoAddress = kCSRCoreRegistersBaseAddress + 0x0064, ! 402: kCSRClockStrobeArrivedHiAddress = kCSRCoreRegistersBaseAddress + 0x0068, ! 403: kCSRClockStrobeArrivedMidAddress = kCSRCoreRegistersBaseAddress + 0x006C, ! 404: kCSRClockInfo0Address = kCSRCoreRegistersBaseAddress + 0x0070, ! 405: kCSRClockInfo1Address = kCSRCoreRegistersBaseAddress + 0x0074, ! 406: kCSRClockInfo2Address = kCSRCoreRegistersBaseAddress + 0x0078, ! 407: kCSRClockInfo3Address = kCSRCoreRegistersBaseAddress + 0x007C, ! 408: kCSRMessageRequestAddress = kCSRCoreRegistersBaseAddress + 0x0080, ! 409: kCSRMessageResponseAddress = kCSRCoreRegistersBaseAddress + 0x00C0, ! 410: kCSRErrorLogBufferAddress = kCSRCoreRegistersBaseAddress + 0x0180, ! 411: ! 412: kCSRBusDependentRegistersBaseAddress ! 413: = kCSRRegisterSpaceBaseAddressLo + 0x0200, ! 414: kCSRBusyTimeout = kCSRRegisterSpaceBaseAddressLo + 0x0210, ! 415: kCSRBandwidthAvailable = kCSRRegisterSpaceBaseAddressLo + 0x0220, ! 416: kCSRChannelsAvailable31_0 = kCSRRegisterSpaceBaseAddressLo + 0x0224, ! 417: kCSRChannelsAvailable63_32 = kCSRRegisterSpaceBaseAddressLo + 0x0228, ! 418: kCSRROMBaseAddress = kCSRRegisterSpaceBaseAddressLo + 0x0400, ! 419: kCSRBIBHeaderAddress = kCSRROMBaseAddress, ! 420: kCSRBIBBusNameAddress = kCSRROMBaseAddress + 4 ! 421: }; ! 422: ! 423: ! 424: // CSR ROM search data types and structures. ! 425: ! 426: enum { ! 427: /* ! 428: ** Absolute locations ! 429: */ ! 430: kIterateRoot = 0x2L, ! 431: /* ! 432: ** "Upward" Relationships ! 433: */ ! 434: kIterateParents = 0x3L, /* include all parent(s) of entry */ ! 435: /* ! 436: ** "Downward" Relationships ! 437: */ ! 438: kIterateChildren = 0x4L, /* include all children */ ! 439: kIterateSubTrees = 0x5L, /* include all sub trees of entry */ ! 440: kIterateDescendants = 0x5L, /* include all descendants of entry */ ! 441: /* ! 442: ** "Horizontal" Relationships ! 443: */ ! 444: kIterateSibling = 0x6L, /* include all siblings */ ! 445: /* ! 446: ** Keep doing the same thing ! 447: */ ! 448: kIterateContinue = 0x1L ! 449: }; ! 450: ! 451: enum ! 452: { ! 453: kInvalidCSRROMIterator = 0 ! 454: }; ! 455: ! 456: enum ! 457: { ! 458: kCSRROMSearchForKey = 1 ! 459: }; ! 460: ! 461: enum ! 462: { ! 463: kInvalidCSRROMEntryType = 0xFFFFFFFF, ! 464: kImmediateCSRROMEntryType = 0, ! 465: kOffsetCSRROMEntryType = 1, ! 466: kLeafCSRROMEntryType = 2, ! 467: kDirectoryCSRROMEntryType = 3 ! 468: }; ! 469: ! 470: // CSR defined 64 bit unique ID. ! 471: ! 472: typedef UInt64 CSRNodeUniqueID; ! 473: typedef CSRNodeUniqueID *CSRNodeUniqueIDPtr; ! 474: ! 475: typedef UInt32 CSRROMEntryIterator; ! 476: typedef UInt32 CSRROMIterationOp; ! 477: typedef struct OpaqueCSRROMEntryID* CSRROMEntryID; ! 478: #define kInvalidCSRROMEntryID ((CSRROMEntryID)0) ! 479: ! 480: struct CSRROMSearchCriteriaStruct ! 481: { ! 482: UInt32 csrROMSearchType; // Type of search record. ! 483: UInt32 keyType; // Key types to search for. ! 484: UInt32 keyHi; // Key values to search for. ! 485: UInt32 keyLo; //zzz ought to provide nice way to set these. ! 486: }; ! 487: typedef struct CSRROMSearchCriteriaStruct ! 488: CSRROMSearchCriteria, *CSRROMSearchCriteriaPtr; ! 489: ! 490: void FWCSRROMDisposeIterator (CSRROMEntryIterator csrROMIterator); ! 491: ! 492: IOReturn FWCSRROMSetIterator (CSRROMEntryIterator csrROMIterator, ! 493: CSRROMEntryID csrROMEntryID, CSRROMIterationOp relationship); ! 494: ! 495: IOReturn FWCSRROMEntrySearch (CSRROMEntryIterator csrROMIterator, CSRROMIterationOp relationship, ! 496: CSRROMEntryID *pEntryID, int *pDone, CSRROMSearchCriteriaPtr pSearchCriteria, ! 497: UInt8 * pEntryValue, UInt32 *pEntrySize); ! 498: ! 499: /*zzz End put in IEEE1212.h */ ! 500: ! 501: ! 502: //////////////////////////////////////////////////////////////////////////////// ! 503: // ! 504: // FireWire CSR defs. ! 505: // ! 506: ! 507: // FireWire core CSR registers. ! 508: ! 509: enum ! 510: { ! 511: kFWCSRStateGone = kFWBit16, ! 512: kFWCSRStateLinkOff = kFWBit22, ! 513: kFWCSRStateCMstr = kFWBit23 ! 514: }; ! 515: ! 516: // FireWire bus/nodeID address defs. ! 517: ! 518: enum ! 519: { ! 520: kFWAddressBusID = FWBitRange (16, 25) << kCSRNodeIDPhase, ! 521: kFWAddressBusIDPhase = FWBitRangePhase (16, 25) + kCSRNodeIDPhase, ! 522: ! 523: kFWAddressNodeID = FWBitRange (26, 31) << kCSRNodeIDPhase, ! 524: kFWAddressNodeIDPhase = FWBitRangePhase (26, 31) + kCSRNodeIDPhase, ! 525: ! 526: kFWLocalBusID = 1023, ! 527: kFWBroadcastNodeID = 63, ! 528: kFWBadNodeID = 0xffff, ! 529: ! 530: kFWLocalBusAddress = kFWLocalBusID << kFWAddressBusIDPhase, ! 531: kFWBroadcastAddress = kFWBroadcastNodeID << kFWAddressNodeIDPhase ! 532: }; ! 533: ! 534: #define FWNodeBaseAddress(busID, nodeID) \ ! 535: ( \ ! 536: (busID << kFWAddressBusIDPhase) | \ ! 537: (nodeID << kFWAddressNodeIDPhase) \ ! 538: ) ! 539: ! 540: #define FWNodeRegisterSpaceBaseAddressHi(busID, nodeID) \ ! 541: ( \ ! 542: FWNodeBaseAddress (busID, nodeID) | \ ! 543: kCSRRegisterSpaceBaseAddressHi \ ! 544: ) ! 545: ! 546: ! 547: // FireWire CSR bus info block defs. ! 548: ! 549: enum ! 550: { ! 551: kFWBIBHeaderAddress = kCSRBIBHeaderAddress, ! 552: kFWBIBBusNameAddress = kCSRBIBBusNameAddress, ! 553: kFWBIBNodeCapabilitiesAddress ! 554: = kCSRROMBaseAddress + 8, ! 555: kFWBIBNodeUniqueIDHiAddress = kCSRROMBaseAddress + 12, ! 556: kFWBIBNodeUniqueIDLoAddress = kCSRROMBaseAddress + 16, ! 557: ! 558: kFWBIBBusName = 0x31333934, //'1394' ! 559: ! 560: kFWBIBIrmc = kFWBit0, ! 561: kFWBIBCmc = kFWBit1, ! 562: kFWBIBIsc = kFWBit2, ! 563: kFWBIBBmc = kFWBit3, ! 564: kFWBIBCycClkAcc = FWBitRange (8, 15), ! 565: kFWBIBCycClkAccPhase = FWBitRangePhase (8, 15), ! 566: kFWBIBMaxRec = FWBitRange (16, 19), ! 567: kFWBIBMaxRecPhase = FWBitRangePhase (16, 19) ! 568: }; ! 569: ! 570: ! 571: //////////////////////////////////////////////////////////////////////////////// ! 572: // ! 573: // Define some bus management constants. ! 574: // ! 575: enum ! 576: { ! 577: kFWBusManagerArbitrationTimeoutDuration = 625 // durationMillisecond ! 578: }; ! 579: ! 580: //////////////////////////////////////////////////////////////////////////////// ! 581: // ! 582: // Define some bus characteristics. ! 583: // ! 584: ! 585: enum ! 586: { ! 587: kFWMaxBusses = 1023, ! 588: kFWMaxNodesPerBus = 63, ! 589: kFWMaxNodeHops = 16 ! 590: }; ! 591: ! 592: ! 593: //////////////////////////////////////////////////////////////////////////////// ! 594: // ! 595: // Packet defs. ! 596: // ! 597: ! 598: // Phy packet defs. ! 599: ! 600: enum ! 601: { ! 602: kFWPhyPacketID = FWBitRange (0, 1), ! 603: kFWPhyPacketIDPhase = FWBitRangePhase (0, 1), ! 604: ! 605: kFWPhyPacketPhyID = FWBitRange (2, 7), ! 606: kFWPhyPacketPhyIDPhase = FWBitRangePhase (2, 7) ! 607: }; ! 608: ! 609: enum ! 610: { ! 611: kSelfIDPacketSize = 8, ! 612: kMaxSelfIDs = 4 // SelfID 0,1,3,8 ! 613: }; ! 614: ! 615: enum ! 616: { ! 617: kFWConfigurationPacketID = 0, ! 618: kFWLinkOnPacketID = 1, ! 619: kFWSelfIDPacketID = 2 ! 620: }; ! 621: ! 622: enum ! 623: { ! 624: kFWPhyConfigurationR = kFWBit8, ! 625: kFWPhyConfigurationT = kFWBit9, ! 626: kFWPhyConfigurationGapCnt = FWBitRange (10, 15), ! 627: kFWPhyConfigurationGapCntPhase ! 628: = FWBitRangePhase (10, 15) ! 629: }; ! 630: ! 631: enum ! 632: { ! 633: kFWSelfIDPortStatusChild = 3, ! 634: kFWSelfIDPortStatusParent = 2, ! 635: kFWSelfIDPortStatusNotConnected = 1, ! 636: kFWSelfIDPortStatusNotPresent = 0, ! 637: ! 638: kFWSelfIDNoPower = 0, ! 639: kFWSelfIDSelfPowered15W = 1, ! 640: kFWSelfIDSelfPowered30W = 2, ! 641: kFWSelfIDSelfPowered45W = 3, ! 642: kFWSelfIDBusPowered1W = 4, ! 643: kFWSelfIDBusPowered3W = 5, ! 644: kFWSelfIDBusPowered6W = 6, ! 645: kFWSelfIDBusPowered10W = 7, ! 646: ! 647: kFWSelfIDPhyID = kFWPhyPacketPhyID,//zzz do we need or want this? ! 648: kFWSelfIDPhyIDPhase = kFWPhyPacketPhyIDPhase, ! 649: kFWSelfIDM = kFWBit31, ! 650: ! 651: kFWSelfID0L = kFWBit9, ! 652: kFWSelfID0GapCnt = FWBitRange (10, 15), ! 653: kFWSelfID0GapCntPhase = FWBitRangePhase (10, 15), ! 654: kFWSelfID0SP = FWBitRange (16, 17), ! 655: kFWSelfID0SPPhase = FWBitRangePhase (16, 17), ! 656: kFWSelfID0Del = FWBitRange (18, 19), ! 657: kFWSelfID0DelPhase = FWBitRangePhase (18, 19), ! 658: kFWSelfID0C = kFWBit20, ! 659: kFWSelfID0Pwr = FWBitRange (21, 23), ! 660: kFWSelfID0PwrPhase = FWBitRangePhase (21, 23), ! 661: kFWSelfID0P0 = FWBitRange (24, 25), ! 662: kFWSelfID0P0Phase = FWBitRangePhase (24, 25), ! 663: kFWSelfID0P1 = FWBitRange (26, 27), ! 664: kFWSelfID0P1Phase = FWBitRangePhase (26, 27), ! 665: kFWSelfID0P2 = FWBitRange (28, 29), ! 666: kFWSelfID0P2Phase = FWBitRangePhase (28, 29), ! 667: kFWSelfID0I = kFWBit30, ! 668: ! 669: kFWSelfIDPacketType = kFWBit8, ! 670: kFWSelfIDNN = FWBitRange (9, 11), ! 671: kFWSelfIDNNPhase = FWBitRangePhase (9, 11), ! 672: kFWSelfIDNPa = FWBitRange (14, 15), ! 673: kFWSelfIDNPaPhase = FWBitRangePhase (14, 15), ! 674: kFWSelfIDNPb = FWBitRange (16, 17), ! 675: kFWSelfIDNPbPhase = FWBitRangePhase (16, 17), ! 676: kFWSelfIDNPc = FWBitRange (18, 19), ! 677: kFWSelfIDNPcPhase = FWBitRangePhase (18, 19), ! 678: kFWSelfIDNPd = FWBitRange (20, 21), ! 679: kFWSelfIDNPdPhase = FWBitRangePhase (20, 21), ! 680: kFWSelfIDNPe = FWBitRange (22, 23), ! 681: kFWSelfIDNPePhase = FWBitRangePhase (22, 23), ! 682: kFWSelfIDNPf = FWBitRange (24, 25), ! 683: kFWSelfIDNPfPhase = FWBitRangePhase (24, 25), ! 684: kFWSelfIDNPg = FWBitRange (26, 27), ! 685: kFWSelfIDNPgPhase = FWBitRangePhase (26, 27), ! 686: kFWSelfIDNPh = FWBitRange (28, 29), ! 687: kFWSelfIDNPhPhase = FWBitRangePhase (28, 29), ! 688: kFWSelfIDMore = kFWBit31 ! 689: }; ! 690: ! 691: // Primary packet defs. ! 692: enum ! 693: { ! 694: kFWPacketTCode = FWBitRange (24, 27), ! 695: kFWPacketTCodePhase = FWBitRangePhase (24, 27) ! 696: }; ! 697: ! 698: ! 699: enum ! 700: { ! 701: kFWAsynchSpd = FWBitRange (14, 15), ! 702: kFWAsynchSpdPhase = FWBitRangePhase (14, 15), ! 703: ! 704: kFWAsynchTLabel = FWBitRange (16, 21), ! 705: kFWAsynchTLabelPhase = FWBitRangePhase (16, 21), ! 706: kFWAsynchTTotal = ((0xffffffff & kFWAsynchTLabel) >> kFWAsynchTLabelPhase)+1, ! 707: kFWAsynchRt = FWBitRange (22, 23), ! 708: kFWAsynchRtPhase = FWBitRangePhase (22, 23), ! 709: kFWAsynchNew = 0, ! 710: kFWAsynchRetryA = 2, ! 711: kTIAsycnhRetryB = 3, ! 712: ! 713: kFWAsynchPriority = FWBitRange (28, 31), ! 714: kFWAsynchPriorityPhase = FWBitRangePhase (28, 31), ! 715: ! 716: kFWAsynchDestinationID = FWBitRange (0, 15), ! 717: kFWAsynchDestinationIDPhase = FWBitRangePhase (0, 15), ! 718: ! 719: kFWAsynchSourceID = FWBitRange (0, 15), ! 720: kFWAsynchSourceIDPhase = FWBitRangePhase (0, 15), ! 721: ! 722: kFWAsynchDestinationOffsetHigh = FWBitRange (16, 31), ! 723: kFWAsynchDestinationOffsetHighPhase = FWBitRangePhase (16, 31), ! 724: ! 725: kFWAsynchDestinationOffsetLow = FWBitRange (0, 31), ! 726: kFWAsynchDestinationOffsetLowPhase = FWBitRangePhase (0, 31), ! 727: ! 728: kFWAsynchDataLength = FWBitRange (0, 15), ! 729: kFWAsynchDataLengthPhase = FWBitRangePhase (0, 15), ! 730: ! 731: kFWAsynchExtendedTCode = FWBitRange (16, 31), ! 732: kFWAsynchExtendedTCodePhase = FWBitRangePhase (16, 31), ! 733: ! 734: kFWAsynchAckSent = FWBitRange (28, 31), ! 735: kFWAsynchAckSentPhase = FWBitRangePhase (28, 31), ! 736: ! 737: kFWAsynchRCode = FWBitRange (16, 19), ! 738: kFWAsynchRCodePhase = FWBitRangePhase (16, 19) ! 739: }; ! 740: ! 741: ! 742: typedef enum ! 743: { ! 744: kFWSpeed100MBit = 0, ! 745: kFWSpeed200MBit = 1, ! 746: kFWSpeed400MBit = 2, ! 747: kFWSpeedMaximum = 0x7FFFFFFF, //zzz what are the best numbers??? ! 748: kFWSpeedInvalid = 0x80000000 ! 749: } IOFWSpeed; ! 750: ! 751: enum ! 752: { ! 753: kFWTCodeWriteQuadlet = 0, ! 754: kFWTCodeWriteBlock = 1, ! 755: kFWTCodeWriteResponse = 2, ! 756: kFWTCodeReadQuadlet = 4, ! 757: kFWTCodeReadBlock = 5, ! 758: kFWTCodeReadQuadletResponse = 6, ! 759: kFWTCodeReadBlockResponse = 7, ! 760: kFWTCodeCycleStart = 8, ! 761: kFWTCodeLock = 9, ! 762: kFWTCodeIsochronousBlock = 10, ! 763: kFWTCodeLockResponse = 11, ! 764: kFWTCodePHYPacket = 14 ! 765: }; ! 766: ! 767: enum ! 768: { ! 769: kFWExtendedTCodeMaskSwap = 1, ! 770: kFWExtendedTCodeCompareSwap = 2, ! 771: kFWExtendedTCodeFetchAdd = 3, ! 772: kFWExtendedTCodeLittleAdd = 4, ! 773: kFWExtendedTCodeBoundedAdd = 5, ! 774: kFWExtendedTCodeWrapAdd = 6, ! 775: kFWExtendedTCodeVendorDependent = 7 ! 776: }; ! 777: ! 778: enum ! 779: { ! 780: kFWResponseComplete = 0, // OK! ! 781: kFWResponseConflictError = 4, // Resource conflict, may retry ! 782: kFWResponseDataError = 5, // Data not available ! 783: kFWResponseTypeError = 6, // Operation not supported ! 784: kFWResponseAddressError = 7, // Address not valid in target device ! 785: kFWResponseBusResetError = 16 // Psuedo response generated locally ! 786: }; ! 787: ! 788: enum ! 789: { ! 790: kFWAckTimeout = -1, // Psuedo ack generated locally ! 791: kFWAckComplete = 1, ! 792: kFWAckPending = 2, ! 793: kFWAckBusyX = 4, ! 794: kFWAckBusyA = 5, ! 795: kFWAckBusyB = 6, ! 796: kFWAckDataError = 13, ! 797: kFWAckTypeError = 14 ! 798: }; ! 799: ! 800: ! 801: enum ! 802: { ! 803: kFWIsochDataLength = FWBitRange (0, 15), ! 804: kFWIsochDataLengthPhase = FWBitRangePhase (0, 15), ! 805: ! 806: kFWIsochTag = FWBitRange (16, 17), ! 807: kFWIsochTagPhase = FWBitRangePhase (16, 17), ! 808: ! 809: kFWIsochChanNum = FWBitRange (18, 23), ! 810: kFWIsochChanNumPhase = FWBitRangePhase (18, 23), ! 811: ! 812: kFWIsochTCode = FWBitRange (24, 27), ! 813: kFWIsochTCodePhase = FWBitRangePhase (24, 27), ! 814: ! 815: kFWIsochSy = FWBitRange (28, 31), ! 816: kFWIsochSyPhase = FWBitRangePhase (28, 31) ! 817: }; ! 818: ! 819: struct FWAddressStruct ! 820: { ! 821: UInt16 nodeID; // bus/node ! 822: UInt16 addressHi; // Top 16 bits of node address. ! 823: UInt32 addressLo; // Bottom 32 bits of node address ! 824: #ifdef __cplusplus ! 825: FWAddressStruct(UInt16 h=0xdead, UInt32 l=0xcafebabe) : ! 826: nodeID(0), addressHi(h), addressLo(l) {}; ! 827: #endif ! 828: }; ! 829: typedef struct FWAddressStruct FWAddress, *FWAddressPtr; ! 830: ! 831: ! 832: #define iokit_fw_err(return) (sys_iokit|sub_iokit_firewire|return) ! 833: #define kIOFireWireResponseBase iokit_fw_err(0x10) /* Base of Response error codes */ ! 834: #define kIOFireWireBusReset (kIOFireWireResponseBase+kFWResponseBusResetError) ! 835: /* Bus reset during command execution */ ! 836: ! 837: //zzz Put in Errors.h ! 838: ! 839: enum { ! 840: inUseErr = -4160, // Item already in use ! 841: notFoundErr = -4161, // Item not found ! 842: timeoutErr = -4162, // Something timed out ! 843: busReconfiguredErr = -4163, // Bus was reconfigured ! 844: insufficientBandwidthErr = -4164, // Not enough bandwidth was available ! 845: invalidIDErr = -4165, // Given ID is not valid. ! 846: invalidIDTypeErr = -4166, // Given ID is of an invalid type for the requested operation. ! 847: accessErr = -4167, // Requested access not allowed. ! 848: alreadyRegisteredErr = -4168, // Item has already been registered. ! 849: disconnectedErr = -4169, // Target of request has been disconnected. ! 850: retryExceededErr = -4170, // Retry limit was exceeded. ! 851: addressRangeErr = -4171, // Address is not in range. ! 852: addressAlignmentErr = -4172, // Address is not of proper alignment. ! 853: ! 854: multipleTalkerErr = -4180, // Tried to install multiple talkers ! 855: channelActiveErr = -4181, // Operation not permitted when channel is active ! 856: noListenerOrTalkerErr = -4182, // Every isochronous channel must have one talker and at least ! 857: // one listener ! 858: noChannelsAvailableErr = -4183, // No supported isochronous channels are available ! 859: channelNotAvailableErr = -4184, // Required channel was not available. ! 860: invalidIsochPortIDErr = -4185, // An isochronous port ID is invalid. ! 861: invalidFWReferenceTypeErr = -4186, // Operation does not support type of given reference ID ! 862: separateBusErr = -4187, // Two or more entities are on two or more busses and cannot be associated with eachother. ! 863: badSelfIDsErr = -4188, // Received self IDs are bad. ! 864: ! 865: //zzz Do we own these next ID numbers? ! 866: cableVoltageTooLowErr = -4190, // Cable power below device's minimum voltage ! 867: cablePowerInsufficientErr = -4191 // Can't grant power request at this time ! 868: }; ! 869: ! 870: // end - Put in Errors.h ! 871: ! 872: #endif /* __IOFWREGS_H */ ! 873:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.