aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/smm/smm_module_handler.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2014-03-10 16:13:58 -0500
committerStefan Reinauer <stefan.reinauer@coreboot.org>2014-03-20 23:55:55 +0100
commit3eb8eb7eba55cdfd64c8d50181ea066526ff6485 (patch)
tree6e465cb8cdd4c4f31450f387ae6560d65c9a8224 /src/cpu/x86/smm/smm_module_handler.c
parent4fde5a66b4a2b4117a45519ab0f63a9fd6bff835 (diff)
rmodules: use rmodtool to create rmodules
Start using the rmodtool for generating rmodules. rmodule_link() has been changed to create 2 rules: one for the passed in <name>, the other for creating <name>.rmod which is an ELF file in the format of an rmodule. Since the header is not compiled and linked together with an rmodule there needs to be a way of marking which symbol is the entry point. __rmodule_entry is the symbol used for knowing the entry point. There was a little churn in SMM modules to ensure an rmodule entry point symbol takes a single argument. Change-Id: Ie452ed866f6596bf13f137f5b832faa39f48d26e Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/5379 Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/cpu/x86/smm/smm_module_handler.c')
-rw-r--r--src/cpu/x86/smm/smm_module_handler.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/cpu/x86/smm/smm_module_handler.c b/src/cpu/x86/smm/smm_module_handler.c
index 444e3352c7..79863d8fef 100644
--- a/src/cpu/x86/smm/smm_module_handler.c
+++ b/src/cpu/x86/smm/smm_module_handler.c
@@ -20,6 +20,7 @@
#include <arch/io.h>
#include <console/console.h>
#include <cpu/x86/smm.h>
+#include <rmodule.h>
typedef enum { SMI_LOCKED, SMI_UNLOCKED } smi_semaphore;
@@ -113,8 +114,16 @@ void *smm_get_save_state(int cpu)
return base;
}
-void smm_handler_start(void *arg, int cpu, const struct smm_runtime *runtime)
+void asmlinkage smm_handler_start(void *arg)
{
+ const struct smm_module_params *p;
+ const struct smm_runtime *runtime;
+ int cpu;
+
+ p = arg;
+ runtime = p->runtime;
+ cpu = p->cpu;
+
/* Make sure to set the global runtime. It's OK to race as the value
* will be the same across CPUs as well as multiple SMIs. */
if (smm_runtime == NULL)
@@ -157,6 +166,8 @@ void smm_handler_start(void *arg, int cpu, const struct smm_runtime *runtime)
smi_set_eos();
}
+RMODULE_ENTRY(smm_handler_start);
+
/* Provide a default implementation for all weak handlers so that relocation
* entries in the modules make sense. Without default implementations the
* weak relocations w/o a symbol have a 0 address which is where the modules