blob: 9781642c7492425294b78cf692cc2e836eba6b06 [file] [log] [blame]
Kyösti Mälkkib6585482020-06-01 15:11:14 +03001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <arch/io.h>
4#include <console/console.h>
5#include <cpu/x86/smm.h>
Elyes Haouas45d32052022-10-07 10:07:12 +02006#include <stdint.h>
Kyösti Mälkkib6585482020-06-01 15:11:14 +03007
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +02008static void apmc_log(const char *fn, u8 cmd)
Kyösti Mälkkib6585482020-06-01 15:11:14 +03009{
Kyösti Mälkkib6585482020-06-01 15:11:14 +030010 switch (cmd) {
Kyösti Mälkkib6585482020-06-01 15:11:14 +030011 case APM_CNT_ACPI_DISABLE:
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020012 printk(BIOS_DEBUG, "%s: Disabling ACPI.\n", fn);
Kyösti Mälkkib6585482020-06-01 15:11:14 +030013 break;
14 case APM_CNT_ACPI_ENABLE:
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020015 printk(BIOS_DEBUG, "%s: Enabling ACPI.\n", fn);
Kyösti Mälkkib6585482020-06-01 15:11:14 +030016 break;
Kyösti Mälkkib6585482020-06-01 15:11:14 +030017 case APM_CNT_FINALIZE:
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020018 printk(BIOS_DEBUG, "%s: Finalizing SMM.\n", fn);
Kyösti Mälkkib6585482020-06-01 15:11:14 +030019 break;
20 case APM_CNT_ELOG_GSMI:
21 break;
22 case APM_CNT_SMMSTORE:
23 break;
24 case APM_CNT_SMMINFO:
25 break;
26 default:
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020027 printk(BIOS_DEBUG, "%s: Unknown APMC 0x%02x.\n", fn, cmd);
Kyösti Mälkkib6585482020-06-01 15:11:14 +030028 break;
29 }
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020030}
31
32int apm_control(u8 cmd)
33{
34 /* Never proceed inside SMI handler or without one. */
35 if (ENV_SMM || !CONFIG(HAVE_SMI_HANDLER))
36 return -1;
37
38 apmc_log(__func__, cmd);
Kyösti Mälkkib6585482020-06-01 15:11:14 +030039
40 /* Now raise the SMI. */
Felix Heldc4fbc912023-12-14 20:59:54 +010041 outb(cmd, pm_acpi_smi_cmd_port());
Kyösti Mälkkib6585482020-06-01 15:11:14 +030042
43 printk(BIOS_DEBUG, "APMC done.\n");
44 return 0;
45}
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020046
47u8 apm_get_apmc(void)
48{
Felix Heldc4fbc912023-12-14 20:59:54 +010049 /* Read command byte from APMC SMI IO port */
50 u8 cmd = inb(pm_acpi_smi_cmd_port());
Kyösti Mälkki9a1620f2021-01-08 13:27:33 +020051
52 apmc_log("SMI#", cmd);
53 return cmd;
54}