summaryrefslogtreecommitdiffstats
path: root/src/kernel/syscall.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-07-16 21:37:56 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-07-18 14:06:41 -0500
commit6f6561babb56d891e88dbcd07646c23af2563ddd (patch)
tree2a1d669781a0a02870cb2bbbb91b3b81d4aea16b /src/kernel/syscall.C
parentdd8219097772fe68a6eb66ff20ef4f6ffb4e469f (diff)
downloadtalos-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.C27
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
OpenPOWER on IntegriCloud