diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2012-07-16 21:37:56 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-07-18 14:06:41 -0500 |
commit | 6f6561babb56d891e88dbcd07646c23af2563ddd (patch) | |
tree | 2a1d669781a0a02870cb2bbbb91b3b81d4aea16b /src/kernel/syscall.C | |
parent | dd8219097772fe68a6eb66ff20ef4f6ffb4e469f (diff) | |
download | talos-hostboot-6f6561babb56d891e88dbcd07646c23af2563ddd.tar.gz talos-hostboot-6f6561babb56d891e88dbcd07646c23af2563ddd.zip |
cpu_spr_value syscall for SLW image build.
Task 44887
Change-Id: If87b6e80b974bb4cbff13844d8a3f055a17282d2
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1378
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Reviewed-by: Mark W. Wenning <wenning@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel/syscall.C')
-rw-r--r-- | src/kernel/syscall.C | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C index 26a72cd35..061971f96 100644 --- a/src/kernel/syscall.C +++ b/src/kernel/syscall.C @@ -97,6 +97,7 @@ namespace Systemcalls void CpuCoreType(task_t *t); void CpuDDLevel(task_t *t); void CpuStartCore(task_t *t); + void CpuSprValue(task_t *t); void MmAllocBlock(task_t *t); void MmRemovePages(task_t *t); void MmSetPermission(task_t *t); @@ -131,6 +132,7 @@ namespace Systemcalls &CpuCoreType, // MISC_CPUCORETYPE &CpuDDLevel, // MISC_CPUDDLEVEL &CpuStartCore, // MISC_CPUSTARTCORE + &CpuSprValue, // MISC_CPUSPRVALUE &MmAllocBlock, // MM_ALLOC_BLOCK &MmRemovePages, // MM_REMOVE_PAGES @@ -640,6 +642,31 @@ namespace Systemcalls CpuManager::startCore(static_cast<uint64_t>(TASK_GETARG0(t)))); }; + /** Read SPR values. */ + void CpuSprValue(task_t *t) + { + uint64_t spr = TASK_GETARG0(t); + + switch (spr) + { + case CPU_SPR_MSR: + TASK_SETRTN(t, CpuManager::WAKEUP_MSR_VALUE); + break; + + case CPU_SPR_LPCR: + TASK_SETRTN(t, CpuManager::WAKEUP_LPCR_VALUE); + break; + + case CPU_SPR_HRMOR: + TASK_SETRTN(t, getHRMOR()); + break; + + default: + TASK_SETRTN(t, -1); + break; + } + }; + /** * Allocate a block of virtual memory within the base segment * @param[in] t: The task used to allocate a block in the base segment |