mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-17 02:15:02 +00:00

We should have a single place where we write the default value to the creator revision field. If we ever will have any table created by another tool, we can overwrite the value afterwards. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Write an ACPI Secondary System Descriptor Table (SSDT) table
|
|
*
|
|
* Copyright 2021 Google LLC
|
|
*/
|
|
|
|
#define LOG_CATEGORY LOGC_ACPI
|
|
|
|
#include <acpi/acpi_table.h>
|
|
#include <dm/acpi.h>
|
|
#include <tables_csum.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/string.h>
|
|
|
|
int acpi_write_ssdt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
|
|
{
|
|
struct acpi_table_header *ssdt;
|
|
int ret;
|
|
|
|
ssdt = ctx->current;
|
|
memset(ssdt, '\0', sizeof(struct acpi_table_header));
|
|
|
|
acpi_fill_header(ssdt, "SSDT");
|
|
ssdt->revision = acpi_get_table_revision(ACPITAB_SSDT);
|
|
ssdt->length = sizeof(struct acpi_table_header);
|
|
|
|
acpi_inc(ctx, sizeof(struct acpi_table_header));
|
|
|
|
ret = acpi_fill_ssdt(ctx);
|
|
if (ret) {
|
|
ctx->current = ssdt;
|
|
return log_msg_ret("fill", ret);
|
|
}
|
|
|
|
/* (Re)calculate length and checksum */
|
|
ssdt->length = ctx->current - (void *)ssdt;
|
|
ssdt->checksum = table_compute_checksum((void *)ssdt, ssdt->length);
|
|
log_debug("SSDT at %p, length %x\n", ssdt, ssdt->length);
|
|
|
|
/* Drop the table if it is empty */
|
|
if (ssdt->length == sizeof(struct acpi_table_header))
|
|
return log_msg_ret("fill", -ENOENT);
|
|
acpi_add_table(ctx, ssdt);
|
|
|
|
return 0;
|
|
}
|
|
ACPI_WRITER(6ssdt, "SSDT", acpi_write_ssdt, 0);
|