coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
fsp-acpi.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <acpi/acpi.h>
4 #include <amdblocks/acpi.h>
5 #include <console/console.h>
6 #include <fsp/util.h>
7 #include <string.h>
8 #include <types.h>
9 
15  uint16_t hob_payload[0xffc8]; /* maximum payload size */
17 
18 uintptr_t add_agesa_fsp_acpi_table(guid_t guid, const char *name, acpi_rsdp_t *rsdp,
19  uintptr_t current)
20 {
21  const struct amd_fsp_acpi_hob_info *data;
22  void *table = (void *)current;
23  size_t hob_size;
24 
25  data = fsp_find_extension_hob_by_guid(guid.b, &hob_size);
26  if (!data) {
27  printk(BIOS_ERR, "AGESA %s ACPI table was not found.\n", name);
28  return current;
29  }
30 
31  if (data->table_size_in_bytes > sizeof(data->hob_payload)) {
32  printk(BIOS_ERR, "AGESA %s ACPI table size larger than maximum HOB payload "
33  "size.\n", name);
34  return current;
35  }
36 
37  printk(BIOS_INFO, "ACPI: * %s (AGESA).\n", name);
38 
39  memcpy(table, data->hob_payload, data->table_size_in_bytes);
40 
41  current += data->table_size_in_bytes;
42  acpi_add_table(rsdp, table);
43  current = acpi_align_current(current);
44 
45  return current;
46 }
void acpi_add_table(acpi_rsdp_t *rsdp, void *table)
Add an ACPI table to the RSDT (and XSDT) structure, recalculate length and checksum.
Definition: acpi.c:49
const char * name
Definition: mmu.c:92
void * memcpy(void *dest, const void *src, size_t n)
Definition: memcpy.c:7
#define printk(level,...)
Definition: stdlib.h:16
uintptr_t add_agesa_fsp_acpi_table(guid_t guid, const char *name, acpi_rsdp_t *rsdp, uintptr_t current)
Definition: fsp-acpi.c:18
struct amd_fsp_acpi_hob_info __packed
const void * fsp_find_extension_hob_by_guid(const uint8_t *guid, size_t *size)
static uintptr_t acpi_align_current(uintptr_t current)
Definition: acpi.h:1435
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
unsigned short uint16_t
Definition: stdint.h:11
unsigned int uint32_t
Definition: stdint.h:14
unsigned long uintptr_t
Definition: stdint.h:21
unsigned char uint8_t
Definition: stdint.h:8
Definition: acpi.h:82
uint8_t sequence_number
Definition: fsp-acpi.c:13
uint32_t table_size_in_bytes
Definition: fsp-acpi.c:11
uint8_t total_hobs_for_table
Definition: fsp-acpi.c:12
uint16_t hob_payload[0xffc8]
Definition: fsp-acpi.c:15