summaryrefslogtreecommitdiffstats
path: root/src/kernel/vmmmgr.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-01-11 10:25:12 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-01-18 09:52:45 -0600
commitb699fc329722088174afe6031351d3bddb559f6c (patch)
tree62e2ad43fb7becba393346fbb2aeca1ba140efdf /src/kernel/vmmmgr.C
parent811a7e18fb3630f4af77c545f057aa147b18334c (diff)
downloadblackbird-hostboot-b699fc329722088174afe6031351d3bddb559f6c.tar.gz
blackbird-hostboot-b699fc329722088174afe6031351d3bddb559f6c.zip
Support additional device segments and MMIO blocks
Change-Id: Icd2e9ed7de2c0227b25979622d0f37a77595570a Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/609 Tested-by: Jenkins Server Reviewed-by: MATTHEW S. BARTH <msbarth@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel/vmmmgr.C')
-rw-r--r--src/kernel/vmmmgr.C42
1 files changed, 30 insertions, 12 deletions
diff --git a/src/kernel/vmmmgr.C b/src/kernel/vmmmgr.C
index b0fe28415..b1f13f1a3 100644
--- a/src/kernel/vmmmgr.C
+++ b/src/kernel/vmmmgr.C
@@ -45,7 +45,11 @@ void VmmManager::init()
BaseSegment::init();
StackSegment::init();
- DeviceSegment::init();
+ for (size_t i = SegmentManager::MMIO_FIRST_SEGMENT_ID;
+ i < SegmentManager::MMIO_LAST_SEGMENT_ID; ++i)
+ {
+ new DeviceSegment(i); // Self-registers with SegmentManager.
+ }
SegmentManager::initSLB();
v.initPTEs();
@@ -82,23 +86,14 @@ void VmmManager::flushPageTable( void )
Singleton<VmmManager>::instance()._flushPageTable();
}
-
-/**
- * STATIC
- * @brief A facade to map a device into the device segment(2TB)
- */
void* VmmManager::devMap(void* ra, uint64_t i_devDataSize)
{
- return DeviceSegment::devMap(ra, i_devDataSize);
+ return Singleton<VmmManager>::instance()._devMap(ra, i_devDataSize);
}
-/**
- * STATIC
- * @brief A facade to unmap a device from the device segment(2TB)
- */
int VmmManager::devUnmap(void* ea)
{
- return DeviceSegment::devUnmap(ea);
+ return Singleton<VmmManager>::instance()._devUnmap(ea);
}
void VmmManager::initPTEs()
@@ -211,3 +206,26 @@ void VmmManager::_flushPageTable( void )
lock.unlock();
}
+
+void* VmmManager::_devMap(void* ra, uint64_t i_devDataSize)
+{
+ void* ea = NULL;
+
+ lock.lock();
+ ea = SegmentManager::devMap(ra, i_devDataSize);
+ lock.unlock();
+
+ return ea;
+}
+
+int VmmManager::_devUnmap(void* ea)
+{
+ int rc = 0;
+
+ lock.lock();
+ rc = SegmentManager::devUnmap(ea);
+ lock.unlock();
+
+ return rc;
+}
+
OpenPOWER on IntegriCloud