coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
ebda.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <stdint.h>
4 #include <acpi/acpi.h>
5 #include <arch/ebda.h>
6 #include <commonlib/endian.h>
7 
8 static void *get_ebda_start(void)
9 {
10  return (void *)((uintptr_t)DEFAULT_EBDA_SEGMENT << 4);
11 }
12 
13 /*
14  * EBDA area is representing a 1KB memory area just below
15  * the top of conventional memory (below 1MB)
16  */
17 
18 static void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size)
19 {
20  u16 low_memory_kb;
21  u16 ebda_kb;
22  void *ebda;
23 
24  if (!low_memory_size || !ebda_segment || !ebda_size)
25  return;
26 
27  low_memory_kb = low_memory_size >> 10;
28  ebda_kb = ebda_size >> 10;
29  ebda = get_ebda_start();
30 
31  /* clear BIOS DATA AREA */
33 
34  /* Avoid unaligned write16() since it's undefined behavior */
35  write_le16(X86_EBDA_LOWMEM, low_memory_kb);
36  write_le16(X86_EBDA_SEGMENT, ebda_segment);
37 
38  /* Set up EBDA */
39  zero_n(ebda, ebda_size);
40  write_le16(ebda, ebda_kb);
41 }
42 
44 {
45  if (acpi_is_wakeup_s3())
46  return;
47 
51 }
static int acpi_is_wakeup_s3(void)
Definition: acpi.h:9
static void zero_n(void *dest, size_t n)
Definition: endian.h:245
static void write_le16(void *dest, uint16_t val)
Definition: endian.h:176
static void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size)
Definition: ebda.c:18
void setup_default_ebda(void)
Definition: ebda.c:43
static void * get_ebda_start(void)
Definition: ebda.c:8
#define DEFAULT_EBDA_SIZE
Definition: ebda.h:15
#define DEFAULT_EBDA_SEGMENT
Definition: ebda.h:14
#define X86_BDA_BASE
Definition: ebda.h:9
#define X86_BDA_SIZE
Definition: ebda.h:8
#define X86_EBDA_SEGMENT
Definition: ebda.h:10
#define DEFAULT_EBDA_LOWMEM
Definition: ebda.h:13
#define X86_EBDA_LOWMEM
Definition: ebda.h:11
uint32_t u32
Definition: stdint.h:51
unsigned long uintptr_t
Definition: stdint.h:21
uint16_t u16
Definition: stdint.h:48