diff options
| author | Patrick Williams <iawillia@us.ibm.com> | 2012-01-11 10:25:12 -0600 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-01-18 09:52:45 -0600 |
| commit | b699fc329722088174afe6031351d3bddb559f6c (patch) | |
| tree | 62e2ad43fb7becba393346fbb2aeca1ba140efdf /src/kernel/vmmmgr.C | |
| parent | 811a7e18fb3630f4af77c545f057aa147b18334c (diff) | |
| download | blackbird-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.C | 42 |
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; +} + |

