• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/IOPCIFamily-239.1.2/

Lines Matching refs:bridge

98 #define BRIDGE_IDENT(bridge)	\
99 bridge->id, PCI_ADDRESS_TUPLE(bridge), bridge->secBusNum, bridge->subBusNum
481 IOPCIConfigEntry * bridge;
486 bridge = IONew(IOPCIConfigEntry, 1);
487 if (!bridge) return (kIOReturnNoMemory);
489 memset(bridge, 0, sizeof(*bridge));
490 bridge->id = ++fNextID;
491 bridge->classCode = 0x060000;
492 bridge->headerType = kPCIHeaderType1;
493 bridge->secBusNum = hostBridge->firstBusNum();
494 bridge->subBusNum = hostBridge->lastBusNum();
496 // if (bridge->subBusNum > 250) bridge->subBusNum = 52;
497 bridge->space = hostBridge->getBridgeSpace();
499 bridge->dtNub = hostBridge->getProvider();
500 bridge->dtEntry = bridge->dtNub;
502 bridge->acpiDevice = IOPCICopyACPIDevice(bridge->dtNub);
504 bridge->isHostBridge = true;
505 bridge->isBridge = true;
506 bridge->supportsHotPlug = false;
508 if (OSDynamicCast(IOPCIDevice, bridge->dtNub)) panic("!host bridge");
510 // fix - all config cycles use first host bridge
527 start = bridge->secBusNum;
528 size = bridge->subBusNum - bridge->secBusNum + 1;
530 DLOG("host bridge acpi bus range 0x%llx len 0x%llx\n", start, size);
533 bridge->ranges[kIOPCIRangeBridgeBusNumber] = range;
535 DLOG("added(%s) host bridge resource %s 0x%llx len 0x%llx\n",
549 DLOG("reported host bridge resource %s 0x%llx len 0x%llx\n",
554 DLOG("added(%s) host bridge resource %s 0x%llx len 0x%llx\n",
561 if (bridge->acpiDevice)
562 removeFixedRanges(bridge->acpiDevice);
565 bridge->deviceState |= kPCIDeviceStateConfigurationDone;
567 bridgeAddChild(fRoot, bridge);
732 { "pci-bridge", 0xffff00, 0x060400 },
977 IOPCIConfigEntry * bridge;
983 IOPCIConfigEntry * bridge = context->bridge;
987 assert(bridge);
1000 FOREACH_CHILD(bridge, child)
1027 dtEntry->getName(), 0, bridge->secBusNum, deviceNum, functionNum, 0, 0);
1039 IOPCIConfigEntry * bridge = context->bridge;
1043 assert(bridge);
1055 FOREACH_CHILD( bridge, child )
1080 dtEntry->getName(), 0, bridge->secBusNum, deviceNum, functionNum, 0, 0);
1088 void CLASS::bridgeConnectDeviceTree(IOPCIConfigEntry * bridge)
1090 IORegistryEntry * dtBridge = bridge->dtEntry;
1098 if ((kPCIHotPlugTunnel != bridge->supportsHotPlug)
1099 || (kPCIHotPlugTunnelRoot == bridge->parent->supportsHotPlug))
1102 context.bridge = bridge;
1108 if (gIOPCIACPIPlane && bridge->acpiDevice)
1110 bridge->acpiDevice->applyToChildren(&matchACPIEntry, &context, gIOPCIACPIPlane);
1115 oneChild = (bridge->child && !bridge->child->peer);
1117 FOREACH_CHILD(bridge, child)
1124 if ((kPCIHotPlugTunnelRoot == bridge->supportsHotPlug)
1125 && (child == bridge->child))
1128 bridge->child->supportsHotPlug = kPCIStatic;
1129 bridge->child->linkInterrupts = false;
1130 DLOG("tunnel controller "D()"\n", DEVICE_IDENT(bridge->child));
1150 if ((kPCIHotPlugTunnelRoot == bridge->supportsHotPlug)
1151 || (kPCIHotPlugTunnel == bridge->supportsHotPlug))
1157 if ((kPCIHotPlugRoot == bridge->supportsHotPlug)
1158 || (kPCIHotPlug == bridge->supportsHotPlug))
1176 bridge->countMaximize = 0;
1179 FOREACH_CHILD(bridge, child)
1182 || (kPCIHotPlugTunnelRoot == child->supportsHotPlug)) bridge->countMaximize++;
1185 for (parent = bridge; parent; parent = parent->parent)
1194 FOREACH_CHILD(bridge, child)
1200 DLOG("bridge "D()" supportsHotPlug %d, linkInterrupts %d\n",
1233 bool CLASS::bridgeConstructDeviceTree(void * unused, IOPCIConfigEntry * bridge)
1235 IORegistryEntry * dtBridge = bridge->dtNub;
1241 // DLOG("bridgeConstructDeviceTree(%p)\n", bridge);
1251 FOREACH_CHILD( bridge, child )
1392 void CLASS::bridgeScanBus(IOPCIConfigEntry * bridge, uint8_t busNum, uint32_t resetMask)
1409 if (bridge->expressCapBlock) do
1411 bootDefer = (bridge->linkInterrupts
1416 linkStatus = configRead16(bridge, bridge->expressCapBlock + 0x12);
1417 if ((kLinkCapDataLinkLayerActiveReportingCapable & bridge->linkCaps)
1423 if ((kPCIDeviceStateNoLink & bridge->deviceState) != noLink)
1425 bridge->deviceState &= ~kPCIDeviceStateNoLink;
1426 bridge->deviceState |= noLink;
1427 bridge->rangeBaseChanges |= ((1 << kIOPCIRangeBridgeMemory)
1431 DLOG("bridge "D()" %s%s linkStatus 0x%04x, linkCaps 0x%04x\n",
1432 DEVICE_IDENT(bridge),
1435 linkStatus, bridge->linkCaps);
1439 if (kPCIHotPlugTunnel <= bridge->supportsHotPlug)
1441 configWrite32(bridge, kPCI2PCIMemoryRange, 0);
1442 configWrite32(bridge, kPCI2PCIPrefetchMemoryRange, 0);
1443 configWrite32(bridge, kPCI2PCIPrefetchUpperBase, 0);
1444 configWrite32(bridge, kPCI2PCIPrefetchUpperLimit, 0);
1447 for (child = bridge->child; child; child = next)
1450 bridgeDeadChild(bridge, child);
1473 bridgeProbeChild(bridge, space, resetMask);
1502 void CLASS::bridgeAddChild(IOPCIConfigEntry * bridge, IOPCIConfigEntry * child)
1504 IOPCIConfigEntry ** prev = &bridge->child;
1513 child->parent = bridge;
1520 bridge->deviceState |= kPCIDeviceStateChildChanged | kPCIDeviceStateChildAdded;
1525 bool CLASS::bridgeDeallocateChildRanges(IOPCIConfigEntry * bridge, IOPCIConfigEntry * dead,
1553 range = bridgeGetRange(bridge, childRange->type);
1566 bridge->haveAllocs |= (1 << childRange->type);
1583 void CLASS::bridgeRemoveChild(IOPCIConfigEntry * bridge, IOPCIConfigEntry * dead,
1599 DLOG("bridge "B()" removing child %p "D()"\n",
1600 BRIDGE_IDENT(bridge), dead, DEVICE_IDENT(dead));
1608 prev = &bridge->child;
1621 bridge->deviceState |= kPCIDeviceStateChildChanged;
1622 bridge->deviceState &= ~(kPCIDeviceStateTotalled | kPCIDeviceStateAllocated);
1624 didKeep = bridgeDeallocateChildRanges(bridge, dead, deallocTypes, freeTypes);
1696 void CLASS::bridgeDeadChild(IOPCIConfigEntry * bridge, IOPCIConfigEntry * dead)
1703 DLOG("bridge %p dead child at "D()"\n", bridge, DEVICE_IDENT(dead));
1705 bridgeRemoveChild(bridge, dead,
1709 bridgeMoveChildren(bridge, pendingList);
1715 void CLASS::bridgeProbeChild( IOPCIConfigEntry * bridge, IOPCIAddressSpace space, uint32_t resetMask )
1723 if ((kPCIStatic != bridge->supportsHotPlug)
1730 for (child = bridge->child; child; child = child->peer)
1736 DLOG("bridge %p scan existing child at "D()" state 0x%x\n",
1737 bridge, DEVICE_IDENT(child), child->deviceState);
1754 bridgeDeadChild(bridge, dead);
1836 if ((kPCIHotPlugTunnel <= bridge->supportsHotPlug)
1856 bridgeAddChild(bridge, child);
2225 void CLASS::bridgeProbeBusRange(IOPCIConfigEntry * bridge, uint32_t resetMask)
2230 // Record the bridge secondary and subordinate bus numbers
2233 bridge->secBusNum = 0;
2234 bridge->subBusNum = 0;
2238 bridge->secBusNum = configRead8(bridge, kPCI2PCISecondaryBus);
2239 bridge->subBusNum = configRead8(bridge, kPCI2PCISubordinateBus);
2243 start = bridge->secBusNum;
2244 size = bridge->subBusNum - bridge->secBusNum + 1;
2246 bridge->ranges[kIOPCIRangeBridgeBusNumber] = range;
2251 void CLASS::bridgeProbeRanges( IOPCIConfigEntry * bridge, uint32_t resetMask )
2256 bridgeProbeBusRange(bridge, resetMask);
2258 // Probe bridge BAR0 and BAR1
2259 safeProbeBaseAddressRegister(bridge, kIOPCIRangeBAR1, resetMask);
2262 // test bridge BARs
2263 if ((5 == bridge->space.s.busNum) && (0 == bridge->space.s.deviceNum) && (0 == bridge->space.s.functionNum))
2267 bridge->ranges[barNum] = IOPCIRangeAlloc();
2268 IOPCIRangeInit(bridge->ranges[barNum], kIOPCIResourceTypeMemory, 0, 0x40000, 0x40000);
2273 DLOG_RANGE(" bridge BAR0", bridge->ranges[kIOPCIRangeBAR0]);
2274 DLOG_RANGE(" bridge BAR1", bridge->ranges[kIOPCIRangeBAR1]);
2278 end = configRead32(bridge, kPCI2PCIMemoryRange);
2291 bridge->ranges[kIOPCIRangeBridgeMemory] = range;
2295 end = configRead32(bridge, kPCI2PCIPrefetchMemoryRange);
2299 bridge->clean64 = (0x1 == (end & 0xf));
2300 if (bridge->clean64)
2302 upper = configRead32(bridge, kPCI2PCIPrefetchUpperBase);
2304 upper = configRead32(bridge, kPCI2PCIPrefetchUpperLimit);
2319 if (bridge->clean64 && (kIOPCIConfiguratorPFM64 & fFlags))
2321 bridge->ranges[BRN(kIOPCIResourceTypePrefetchMemory)] = range;
2326 end = configRead32(bridge, kPCI2PCIIORange);
2331 // If bridge does not implement an I/O address range, then both
2355 // on the secondary side of the bridge. Or when BIOS has failed to
2356 // assign I/O resources to devices behind the bridge.
2367 bridge->ranges[kIOPCIRangeBridgeIO] = range;
2370 DLOG_RANGE(" BUS", bridge->ranges[kIOPCIRangeBridgeBusNumber]);
2371 DLOG_RANGE(" I/O", bridge->ranges[kIOPCIRangeBridgeIO]);
2372 DLOG_RANGE(" MEM", bridge->ranges[kIOPCIRangeBridgeMemory]);
2373 DLOG_RANGE(" PFM", bridge->ranges[kIOPCIRangeBridgePFMemory]);
2378 void CLASS::cardbusProbeRanges(IOPCIConfigEntry * bridge, uint32_t resetMask)
2382 bridgeProbeBusRange(bridge, resetMask);
2386 range = bridge->ranges[kIOPCIRangeBridgeBusNumber];
2393 bridge->ranges[kIOPCIRangeBAR0] = range;
2400 bridge->ranges[kIOPCIRangeBridgeIO] = range;
2405 bridge->ranges[kIOPCIRangeBridgeMemory] = range;
2411 int32_t CLASS::scanProc(void * ref, IOPCIConfigEntry * bridge)
2418 if (kPCIDeviceStateDead & bridge->deviceState) return (ok);
2420 if (!(kPCIDeviceStateScanned & bridge->deviceState))
2422 haveBus = ((bridge->secBusNum || bridge->isHostBridge)
2423 && ((bootScan && bridge->ranges[kIOPCIRangeBridgeBusNumber]->proposedSize)
2424 || ((!bootScan) && bridge->ranges[kIOPCIRangeBridgeBusNumber]->size)));
2427 DLOG("scan %s"B()"\n", bootScan ? "(boot) " : "", BRIDGE_IDENT(bridge));
2429 if (kPCIStatic != bridge->supportsHotPlug)
2436 bridgeScanBus(bridge, bridge->secBusNum, resetMask);
2437 bridge->deviceState |= kPCIDeviceStateScanned;
2438 if (kPCIDeviceStateChildChanged & bridge->deviceState)
2440 DLOG("bridge "B()" child change\n", BRIDGE_IDENT(bridge));
2443 for (parents = bridge;
2447 bridge->parent->deviceState &= ~(kPCIDeviceStateTotalled | kPCIDeviceStateAllocated);
2449 bridge->deviceState &= ~(kPCIDeviceStateTotalled | kPCIDeviceStateAllocated
2455 bridgeConnectDeviceTree(bridge);
2459 if (!(kPCIDeviceStateAllocatedBus & bridge->deviceState))
2461 FOREACH_CHILD(bridge, child) child->deviceState &= ~kPCIDeviceStateAllocatedBus;
2462 bridge->deviceState &= ~kPCIDeviceStateTotalled;
2463 ok = bridgeTotalResources(bridge, (1 << kIOPCIResourceTypeBusNumber));
2466 ok = bridgeAllocateResources(bridge, (1 << kIOPCIResourceTypeBusNumber));
2467 DLOG("bus alloc done (bridge "B()", state 0x%x, ok %d)\n",
2468 BRIDGE_IDENT(bridge), bridge->deviceState, ok);
2470 if (ok > 0) bridge->deviceState |= kPCIDeviceStateAllocatedBus;
2471 else bridge->parent->deviceState &= ~kPCIDeviceStateAllocatedBus;
2479 int32_t CLASS::bootResetProc(void * ref, IOPCIConfigEntry * bridge)
2484 if ((kPCIStatic != bridge->supportsHotPlug)
2485 && bridge->ranges[kIOPCIRangeBridgeBusNumber]
2486 && !bridge->ranges[kIOPCIRangeBridgeBusNumber]->nextSubRange)
2488 bridge->ranges[kIOPCIRangeBridgeBusNumber]->start = 0;
2489 bridge->ranges[kIOPCIRangeBridgeBusNumber]->size = 0;
2490 bridge->ranges[kIOPCIRangeBridgeBusNumber]->totalSize = 1;
2491 bridge->ranges[kIOPCIRangeBridgeBusNumber]->proposedSize = 1;
2492 if (kPCIHotPlugTunnelRootParent != bridge->supportsHotPlug)
2494 DLOG("boot reset "B()"\n", BRIDGE_IDENT(bridge));
2495 reg32 = configRead32(bridge, kPCI2PCIPrimaryBus);
2497 configWrite32(bridge, kPCI2PCIPrimaryBus, reg32);
2505 int32_t CLASS::totalProc(void * ref, IOPCIConfigEntry * bridge)
2509 if (!(kPCIDeviceStateAllocatedBus & bridge->deviceState)) return (true);
2510 if (kPCIDeviceStateTotalled & bridge->deviceState) return (true);
2512 ok = bridgeTotalResources(bridge,
2517 if (!ok) bridge->parent->deviceState &= ~kPCIDeviceStateAllocated;
2518 bridge->deviceState |= kPCIDeviceStateTotalled;
2525 int32_t CLASS::allocateProc(void * ref, IOPCIConfigEntry * bridge)
2529 if (!(kPCIDeviceStateAllocatedBus & bridge->deviceState)) return (ok);
2530 if (kPCIDeviceStateAllocated & bridge->deviceState) return (ok);
2532 FOREACH_CHILD(bridge, child) child->deviceState &= ~kPCIDeviceStateAllocated;
2534 ok = bridgeAllocateResources(bridge,
2538 DLOG("alloc done (bridge "B()", state 0x%x, ok %d)\n",
2539 BRIDGE_IDENT(bridge), bridge->deviceState, ok);
2541 if (ok > 0) bridge->deviceState |= kPCIDeviceStateAllocated;
2542 else bridge->parent->deviceState &= ~kPCIDeviceStateAllocated;
2587 // DLOG("iterate(bridge "B()", state 0x%x, parent 0x%x)\n", BRIDGE_IDENT(device), device->iterator, parent ? parent->iterator : 0);
2724 IOPCIRange * CLASS::bridgeGetRange(IOPCIConfigEntry * bridge, uint32_t type)
2728 if (bridge->isHostBridge && (type != kIOPCIResourceTypeBusNumber))
2731 bridge = fRoot;
2736 range = bridge->ranges[BRN(kIOPCIResourceTypePrefetchMemory)];
2742 range = bridge->ranges[BRN(kIOPCIResourceTypeMemory)];
2747 range = bridge->ranges[BRN(type)];
2779 bool CLASS::bridgeTotalResources(IOPCIConfigEntry * bridge, uint32_t typeMask)
2793 if (bridge == fRoot) return (ok);
2794 if (kPCIDeviceStateDead & bridge->deviceState) return (ok);
2796 DLOG("bridgeTotalResources(bridge "B()", iter 0x%x, state 0x%x, type 0x%x)\n",
2797 BRIDGE_IDENT(bridge), bridge->iterator, bridge->deviceState, typeMask);
2800 if (bridge != fRoot) totalSize[kIOPCIResourceTypeBusNumber] = 1;
2806 if (bridge->clean64 && (kIOPCIConfiguratorPFM64 & fFlags))
2816 if (!bridge->child) break;
2817 for (child = bridge->child; child; child = child->peer)
2822 // all children are dead, move reserved allocs to parent & free bridge ranges
2825 for (child = bridge->child; child; child = next)
2828 bridgeRemoveChild(bridge, child, kIOPCIRangeAllBarsMask, 0, &pendingList);
2830 bridgeDeallocateChildRanges(bridge->parent, bridge,
2833 bridgeMoveChildren(bridge->parent, pendingList);
2834 bridge->parent->deviceState &= ~(kPCIDeviceStateTotalled | kPCIDeviceStateAllocated);
2838 for (child = bridge->child; child; child = child->peer)
2845 range = bridgeGetRange(bridge, childRange->type);
2883 if (bridge->isHostBridge) continue;
2884 range = bridgeGetRange(bridge, type);
2901 bridge->rangeSizeChanges |= (1 << BRN(type));
2902 bridge->rangeRequestChanges |= (1 << type);
2975 int32_t CLASS::bridgeAllocateResources(IOPCIConfigEntry * bridge, uint32_t typeMask)
2993 DLOG("bridgeAllocateResources(bridge "B()", state 0x%x, type 0x%x)\n",
2994 BRIDGE_IDENT(bridge), bridge->deviceState, typeMask);
2996 if (bridge == fRoot) return (true);
2997 if (kPCIDeviceStateDead & bridge->deviceState) return (true);
2999 if (treeInState(bridge, kPCIDeviceStateRequestPause,
3006 haveAllocs = bridge->haveAllocs;
3007 bridge->haveAllocs = 0;
3010 FOREACH_CHILD(bridge, child)
3046 && (range = bridgeGetRange(bridge, kIOPCIResourceTypeBusNumber))
3047 && !bridge->busResv.nextSubRange)
3049 IOPCIRangeInit(&bridge->busResv, kIOPCIResourceTypeBusNumber,
3050 bridge->secBusNum, 1, kPCIBridgeBusNumberAlignment);
3051 ok = IOPCIRangeListAllocateSubRange(range, &bridge->busResv);
3052 DLOG(" BUS: reserved(%sok) 0x%llx\n", ok ? "" : "!", bridge->busResv.start);
3057 FOREACH_CHILD(bridge, child)
3064 range = bridgeGetRange(bridge, childRange->type);
3076 if (bridge->isHostBridge && range && expressCards
3116 if (bridge->isHostBridge
3149 FOREACH_CHILD(bridge, child)
3158 range = bridgeGetRange(bridge, childRange->type);
3177 FOREACH_CHILD(bridge, child)
3184 FOREACH_CHILD(bridge, child)
3194 range = bridgeGetRange(bridge, childRange->type);
3216 range = bridgeGetRange(bridge, type);
3256 if (bridge->isHostBridge)
3264 if (bridge->isHostBridge) continue;
3281 bridge->rangeSizeChanges |= (1 << BRN(type));
3282 bridge->rangeRequestChanges |= (1 << type);
3304 bridge->rangeSizeChanges |= (1 << BRN(type));
3305 bridge->rangeRequestChanges |= (1 << type);
3314 if (failTypes && !(bridge->rangeRequestChanges & typeMask))
3317 FOREACH_CHILD(bridge, child)
3340 bridge->rangeRequestChanges &= ~typeMask;
3344 FOREACH_CHILD(bridge, child)
3460 void CLASS::bridgeApplyConfiguration(IOPCIConfigEntry * bridge, uint32_t typeMask, bool dolog)
3477 DLOGI("Applying config for bridge "B()" (disabled %d)\n",
3478 BRIDGE_IDENT(bridge), accessDisabled);
3480 commandReg = disableAccess(bridge, accessDisabled);
3482 // Program bridge BAR0 and BAR1
3487 range = bridge->ranges[rangeIndex];
3492 if ((1 << rangeIndex) & bridge->rangeBaseChanges)
3497 configWrite32(bridge, bar, start);
3500 start & 0xFFFFFFFF, configRead32(bridge, bar));
3506 configWrite32(bridge, bar, start);
3509 start, configRead32(bridge, bar));
3512 bridge->rangeBaseChanges &= ~(1 << thisIndex);
3513 bridge->rangeSizeChanges &= ~(1 << thisIndex);
3517 && ((1 << kIOPCIRangeBridgeBusNumber) & (bridge->rangeBaseChanges | bridge->rangeSizeChanges)))
3519 range = bridge->ranges[kIOPCIRangeBridgeBusNumber];
3523 bridge->secBusNum = range->start;
3524 bridge->subBusNum = range->start + range->size - 1;
3528 bridge->secBusNum = bridge->subBusNum = 0;
3533 FOREACH_CHILD(bridge, child)
3535 child->space.s.busNum = bridge->secBusNum;
3540 configRead8(bridge, kPCI2PCIPrimaryBus),
3541 configRead8(bridge, kPCI2PCISecondaryBus),
3542 configRead8(bridge, kPCI2PCISubordinateBus));
3544 // Program bridge bus numbers
3546 uint32_t reg32 = configRead32(bridge, kPCI2PCIPrimaryBus);
3548 reg32 |= bridge->space.s.busNum | (bridge->secBusNum << 8) | (bridge->subBusNum << 16);
3549 configWrite32(bridge, kPCI2PCIPrimaryBus, reg32);
3552 configRead8(bridge, kPCI2PCIPrimaryBus),
3553 configRead8(bridge, kPCI2PCISecondaryBus),
3554 configRead8(bridge, kPCI2PCISubordinateBus));
3556 bridge->rangeBaseChanges &= ~(1 << kIOPCIRangeBridgeBusNumber);
3557 bridge->rangeSizeChanges &= ~(1 << kIOPCIRangeBridgeBusNumber);
3561 if (kPCIHeaderType2 == bridge->headerType) break;
3564 && ((1 << kIOPCIRangeBridgeIO) & (bridge->rangeBaseChanges | bridge->rangeSizeChanges)))
3568 DLOGI_RANGE(" I/O", bridge->ranges[kIOPCIRangeBridgeIO]);
3571 range = bridge->ranges[kIOPCIRangeBridgeIO];
3583 configWrite16(bridge, kPCI2PCIIORange, baselim16);
3584 configWrite32(bridge, kPCI2PCIUpperIORange, 0);
3587 configRead16(bridge, kPCI2PCIIORange));
3589 bridge->rangeBaseChanges &= ~(1 << kIOPCIRangeBridgeIO);
3590 bridge->rangeSizeChanges &= ~(1 << kIOPCIRangeBridgeIO);
3594 && ((1 << kIOPCIRangeBridgeMemory) & (bridge->rangeBaseChanges | bridge->rangeSizeChanges)))
3598 DLOGI_RANGE(" MEM", bridge->ranges[kIOPCIRangeBridgeMemory]);
3601 range = bridge->ranges[kIOPCIRangeBridgeMemory];
3602 if (range && range->size && !(kPCIDeviceStateNoLink & bridge->deviceState))
3612 configWrite32(bridge, kPCI2PCIMemoryRange, baselim32);
3615 configRead32(bridge, kPCI2PCIMemoryRange));
3617 bridge->rangeBaseChanges &= ~(1 << kIOPCIRangeBridgeMemory);
3618 bridge->rangeSizeChanges &= ~(1 << kIOPCIRangeBridgeMemory);
3622 && ((1 << kIOPCIRangeBridgePFMemory) & (bridge->rangeBaseChanges | bridge->rangeSizeChanges)))
3626 DLOGI_RANGE(" PFM", bridge->ranges[kIOPCIRangeBridgePFMemory]);
3632 if ((1 << kIOPCIRangeBridgePFMemory) & bridge->rangeBaseChanges)
3634 configWrite32(bridge, kPCI2PCIPrefetchUpperBase, -1U);
3635 configWrite32(bridge, kPCI2PCIPrefetchUpperLimit, -1U);
3636 configWrite32(bridge, kPCI2PCIPrefetchMemoryRange, baselim32);
3638 range = bridge->ranges[kIOPCIRangeBridgePFMemory];
3639 if (range && range->size && !(kPCIDeviceStateNoLink & bridge->deviceState))
3649 configWrite32(bridge, kPCI2PCIPrefetchMemoryRange, baselim32);
3650 configWrite32(bridge, kPCI2PCIPrefetchUpperLimit, (end >> 32));
3651 configWrite32(bridge, kPCI2PCIPrefetchUpperBase, (start >> 32));
3654 (uint32_t)configRead32(bridge, kPCI2PCIPrefetchMemoryRange),
3655 (uint32_t)configRead32(bridge, kPCI2PCIPrefetchUpperBase),
3656 (uint32_t)configRead32(bridge, kPCI2PCIPrefetchUpperLimit));
3658 bridge->rangeBaseChanges &= ~(1 << kIOPCIRangeBridgePFMemory);
3659 bridge->rangeSizeChanges &= ~(1 << kIOPCIRangeBridgePFMemory);
3666 DLOGI("Enabling bridge "B()"\n", BRIDGE_IDENT(bridge));
3668 if (kPCIHeaderType2 == bridge->headerType)
3683 bridgeControl = configRead16(bridge, kPCI2PCIBridgeControl);
3687 configWrite16(bridge, kPCI2PCIBridgeControl, bridgeControl);
3689 configRead16(bridge, kPCI2PCIBridgeControl));
3693 restoreAccess(bridge, commandReg);
3696 configRead32(bridge, kIOPCIConfigCommand));
3761 // Bridges can act as an initiator on either side of the bridge,
3779 int32_t CLASS::bridgeFinalizeConfigProc(void * unused, IOPCIConfigEntry * bridge)
3783 if (!(kPCIDeviceStateAllocated & bridge->deviceState)) return (true);
3784 bridge->deviceState &= ~kPCIDeviceStateChildChanged;
3787 if (bridge->supportsHotPlug >= kPCIHotPlug)
3790 FOREACH_CHILD(bridge, child)
3813 if ((kPCIDeviceStateChildAdded & bridge->deviceState) && !fWaitingPause)
3815 bridge->deviceState &= ~kPCIDeviceStateChildAdded;
3816 markChanged(bridge);
3826 parent = bridge;
3830 FOREACH_CHILD(bridge, child)
3858 return (bridgeConstructDeviceTree(unused, bridge));