summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/x86/smm/Makefile.inc1
-rw-r--r--src/cpu/x86/smm/smi_trigger.c43
2 files changed, 44 insertions, 0 deletions
diff --git a/src/cpu/x86/smm/Makefile.inc b/src/cpu/x86/smm/Makefile.inc
index 500f169edb..dbe567a8a2 100644
--- a/src/cpu/x86/smm/Makefile.inc
+++ b/src/cpu/x86/smm/Makefile.inc
@@ -1,6 +1,7 @@
## SPDX-License-Identifier: GPL-2.0-only
ramstage-y += smm_module_loader.c
+ramstage-y += smi_trigger.c
ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
$(eval $(call create_class_compiler,smm,x86_32))
diff --git a/src/cpu/x86/smm/smi_trigger.c b/src/cpu/x86/smm/smi_trigger.c
new file mode 100644
index 0000000000..f1031a00f6
--- /dev/null
+++ b/src/cpu/x86/smm/smi_trigger.c
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <arch/io.h>
+#include <console/console.h>
+#include <cpu/x86/smm.h>
+
+int apm_control(u8 cmd)
+{
+ if (!CONFIG(HAVE_SMI_HANDLER))
+ return -1;
+
+ switch (cmd) {
+ case APM_CNT_CST_CONTROL:
+ break;
+ case APM_CNT_PST_CONTROL:
+ break;
+ case APM_CNT_ACPI_DISABLE:
+ printk(BIOS_DEBUG, "Disabling ACPI via APMC.\n");
+ break;
+ case APM_CNT_ACPI_ENABLE:
+ printk(BIOS_DEBUG, "Enabling ACPI via APMC.\n");
+ break;
+ case APM_CNT_GNVS_UPDATE:
+ break;
+ case APM_CNT_FINALIZE:
+ printk(BIOS_DEBUG, "Finalizing SMM.\n");
+ break;
+ case APM_CNT_ELOG_GSMI:
+ break;
+ case APM_CNT_SMMSTORE:
+ break;
+ case APM_CNT_SMMINFO:
+ break;
+ default:
+ break;
+ }
+
+ /* Now raise the SMI. */
+ outb(cmd, APM_CNT);
+
+ printk(BIOS_DEBUG, "APMC done.\n");
+ return 0;
+}