mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-17 10:24:49 +00:00

The fields Creator ID and Creator Revision contain information about the tool that created an ACPI table. This may be the ASL compiler for some tables but it is not for others. Naming these fields aslc_id and aslc_revision is misleading. It is usual to see diverse values of Creator ID. On a laptop I saw these: 'AMD ', 'INTL, 'MSFT', 'PTEC'. Obviously not all relate to the Intel ASL compiler. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
49 lines
1.2 KiB
C
49 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->creator_revision = 1;
|
|
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);
|