bool IOMapper::start(IOService *provider) { OSObject * obj; if (!super::start(provider)) return false; if (!initHardware(provider)) return false; fPageSize = getPageSize(); if (fIsSystem) { sMapperLock.lock(); IOMapper::gSystem = this; sMapperLock.wakeup(&IOMapper::gSystem); sMapperLock.unlock(); } if (provider) { obj = provider->getProperty("iommu-id"); if (!obj) obj = provider->getProperty("AAPL,phandle"); if (obj) setProperty(gIOMapperIDKey, obj); } return true; }
void IOMapper::waitForSystemMapper() { sMapperLock.lock(); while ((uintptr_t) IOMapper::gSystem & kWaitMask) sMapperLock.sleep(&IOMapper::gSystem); sMapperLock.unlock(); }
void IOMapper::waitForSystemMapper() { sMapperLock.lock(); while ((uintptr_t) IOMapper::gSystem & kWaitMask) { OSReportWithBacktrace("waitForSystemMapper"); sMapperLock.sleep(&IOMapper::gSystem); } sMapperLock.unlock(); }
void IOMapper::setMapperRequired(bool hasMapper) { if (hasMapper) IOMapper::gSystem = (IOMapper *) kHasMapper; else { sMapperLock.lock(); IOMapper::gSystem = (IOMapper *) kNoMapper; sMapperLock.unlock(); sMapperLock.wakeup(&IOMapper::gSystem); } }