aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/lib/acpi_table.c7
-rw-r--r--include/asm-generic/global_data.h13
2 files changed, 19 insertions, 1 deletions
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index 6d405b0..f0f342d 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -494,7 +494,7 @@ void acpi_create_ssdt(struct acpi_ctx *ctx, struct acpi_table_header *ssdt,
*/
ulong write_acpi_tables(ulong start_addr)
{
- struct acpi_ctx sctx, *ctx = &sctx;
+ struct acpi_ctx *ctx;
struct acpi_facs *facs;
struct acpi_table_header *dsdt;
struct acpi_fadt *fadt;
@@ -509,6 +509,11 @@ ulong write_acpi_tables(ulong start_addr)
int ret;
int i;
+ ctx = calloc(1, sizeof(*ctx));
+ if (!ctx)
+ return log_msg_ret("mem", -ENOMEM);
+ gd->acpi_ctx = ctx;
+
start = map_sysmem(start_addr, 0);
debug("ACPI: Writing ACPI tables at %lx\n", start_addr);
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index f392043..87d827d 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -24,6 +24,7 @@
#include <membuff.h>
#include <linux/list.h>
+struct acpi_ctx;
struct driver_rt;
typedef struct global_data gd_t;
@@ -420,6 +421,12 @@ struct global_data {
*/
struct udevice *watchdog_dev;
#endif
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+ /**
+ * @acpi_ctx: ACPI context pointer
+ */
+ struct acpi_ctx *acpi_ctx;
+#endif
};
/**
@@ -452,6 +459,12 @@ struct global_data {
#define gd_dm_driver_rt() NULL
#endif
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+#define gd_acpi_ctx() gd->acpi_ctx
+#else
+#define gd_acpi_ctx() NULL
+#endif
+
/**
* enum gd_flags - global data flags
*