coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
smihandler.c
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
3
#include <
console/console.h
>
4
#include <
cpu/x86/smm.h
>
5
#include <soc/nvs.h>
6
#include <
southbridge/intel/bd82x6x/pch.h
>
7
#include <
southbridge/intel/bd82x6x/me.h
>
8
#include <
southbridge/intel/common/pmbase.h
>
9
#include <
northbridge/intel/sandybridge/sandybridge.h
>
10
#include <
ec/smsc/mec1308/ec.h
>
11
#include "
ec.h
"
12
13
static
u8
mainboard_smi_ec
(
void
)
14
{
15
u8
cmd;
16
17
cmd =
read_ec_command_byte
(
EC_GET_SMI_CAUSE
);
18
19
switch
(cmd) {
20
case
EC_LID_CLOSE
:
21
printk
(
BIOS_DEBUG
,
"LID CLOSED, SHUTDOWN\n"
);
22
23
/* Go to S5 */
24
write_pmbase32
(
PM1_CNT
,
read_pmbase32
(
PM1_CNT
) | (0xf << 10));
25
break
;
26
}
27
28
return
cmd;
29
}
30
31
void
mainboard_smi_gpi
(
u32
gpi_sts)
32
{
33
if
(gpi_sts & (1 <<
EC_SMI_GPI
)) {
34
/* Process all pending EC requests */
35
ec_set_ports
(
EC_MAILBOX_PORT
,
EC_MAILBOX_PORT
+1);
36
while
(
mainboard_smi_ec
() != 0xff);
37
38
/* The EC may keep asserting SMI# for some
39
* period unless we kick it here.
40
*/
41
send_ec_command
(
EC_SMI_DISABLE
);
42
send_ec_command
(
EC_SMI_ENABLE
);
43
}
44
}
45
46
int
mainboard_smi_apmc
(
u8
apmc)
47
{
48
ec_set_ports
(
EC_MAILBOX_PORT
,
EC_MAILBOX_PORT
+1);
49
50
switch
(apmc) {
51
case
0xe1:
/* ACPI ENABLE */
52
send_ec_command
(
EC_SMI_DISABLE
);
53
send_ec_command
(
EC_ACPI_ENABLE
);
54
break
;
55
56
case
0x1e:
/* ACPI DISABLE */
57
send_ec_command
(
EC_SMI_ENABLE
);
58
send_ec_command
(
EC_ACPI_DISABLE
);
59
break
;
60
}
61
return
0;
62
}
PM1_CNT
#define PM1_CNT
Definition:
pm.h:27
printk
#define printk(level,...)
Definition:
stdlib.h:16
console.h
mainboard_smi_apmc
int __weak mainboard_smi_apmc(u8 data)
Definition:
smihandler.c:209
mainboard_smi_gpi
void __weak mainboard_smi_gpi(u32 gpi_sts)
Definition:
smihandler.c:208
send_ec_command
int send_ec_command(u8 command)
Definition:
ec.c:13
ec_set_ports
void ec_set_ports(u16 cmd_reg, u16 data_reg)
Definition:
ec.c:143
read_ec_command_byte
u8 read_ec_command_byte(u8 command)
Definition:
ec.c:65
ec.h
smm.h
BIOS_DEBUG
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition:
loglevel.h:128
EC_SMI_GPI
#define EC_SMI_GPI
Definition:
ec.h:10
EC_LID_CLOSE
#define EC_LID_CLOSE
Definition:
ec.h:21
EC_SMI_DISABLE
#define EC_SMI_DISABLE
Definition:
ec.h:8
EC_ACPI_DISABLE
#define EC_ACPI_DISABLE
Definition:
ec.h:10
EC_ACPI_ENABLE
#define EC_ACPI_ENABLE
Definition:
ec.h:9
EC_SMI_ENABLE
#define EC_SMI_ENABLE
Definition:
ec.h:7
EC_GET_SMI_CAUSE
#define EC_GET_SMI_CAUSE
Definition:
ec.h:27
EC_MAILBOX_PORT
#define EC_MAILBOX_PORT
Definition:
ec.h:6
mainboard_smi_ec
static u8 mainboard_smi_ec(void)
Definition:
smihandler.c:13
ec.h
read_pmbase32
u32 read_pmbase32(const u8 addr)
Definition:
pmbase.c:57
write_pmbase32
void write_pmbase32(const u8 addr, const u32 val)
Definition:
pmbase.c:36
pmbase.h
sandybridge.h
me.h
pch.h
u32
uint32_t u32
Definition:
stdint.h:51
u8
uint8_t u8
Definition:
stdint.h:45
src
mainboard
samsung
lumpy
smihandler.c
Generated by
1.9.1