diff options
| author | Doug Gilbert <dgilbert@us.ibm.com> | 2011-08-22 17:14:23 -0500 |
|---|---|---|
| committer | Douglas R. Gilbert <dgilbert@us.ibm.com> | 2011-08-25 13:52:09 -0500 |
| commit | bf46e7954689c41cccc897b8b00bcc5db5245374 (patch) | |
| tree | c7807ff84dd5f8519fb0b065e03ba4939255d485 /src/kernel/block.C | |
| parent | 968add63523933786a85ab271b277d79dc5851e6 (diff) | |
| download | blackbird-hostboot-bf46e7954689c41cccc897b8b00bcc5db5245374.tar.gz blackbird-hostboot-bf46e7954689c41cccc897b8b00bcc5db5245374.zip | |
map virtual address to physical address in kernel
Change-Id: Id18e604facd517598a18968af3dff927026ad894
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/272
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/kernel/block.C')
| -rw-r--r-- | src/kernel/block.C | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/kernel/block.C b/src/kernel/block.C index 19d2962f8..9a38ba3b0 100644 --- a/src/kernel/block.C +++ b/src/kernel/block.C @@ -23,6 +23,7 @@ #include <limits.h> #include <assert.h> #include <string.h> +#include <errno.h> #include <sys/msg.h> @@ -184,3 +185,24 @@ void Block::addPTE(void* i_vaddr) (l_pte->isWritable() ? VmmManager::NORMAL_ACCESS : VmmManager::READ_O_ACCESS))); } + +uint64_t Block::findPhysicalAddress(uint64_t i_vaddr) const +{ + uint64_t paddr = -EFAULT; + + if(!isContained(i_vaddr)) + { + return (iv_nextBlock ? + iv_nextBlock->findPhysicalAddress(i_vaddr) : paddr); + } + + ShadowPTE* pte = getPTE(i_vaddr); + + if (pte->isPresent() && pte->getPage() != 0) + { + paddr = pte->getPageAddr(); + paddr += i_vaddr % PAGESIZE; + } + + return paddr; +} |

