| // SPDX-License-Identifier: GPL-2.0+ | |
| /* | |
| * Write an ACPI Core System Resource Table (CSRT) | |
| * | |
| * Copyright 2021 Google LLC | |
| */ | |
| #define LOG_CATEGORY LOGC_ACPI | |
| #include <mapmem.h> | |
| #include <tables_csum.h> | |
| #include <acpi/acpi_table.h> | |
| #include <dm/acpi.h> | |
| #include <linux/string.h> | |
| __weak int acpi_fill_csrt(struct acpi_ctx *ctx) | |
| { | |
| return 0; | |
| } | |
| int acpi_write_csrt(struct acpi_ctx *ctx, const struct acpi_writer *entry) | |
| { | |
| struct acpi_table_header *header; | |
| struct acpi_csrt *csrt; | |
| int ret; | |
| csrt = ctx->current; | |
| header = &csrt->header; | |
| memset(csrt, '\0', sizeof(struct acpi_csrt)); | |
| /* Fill out header fields */ | |
| acpi_fill_header(header, "CSRT"); | |
| header->revision = 0; | |
| acpi_inc(ctx, sizeof(*header)); | |
| ret = acpi_fill_csrt(ctx); | |
| if (ret) | |
| return log_msg_ret("fill", ret); | |
| /* (Re)calculate length and checksum */ | |
| header->length = (ulong)ctx->current - (ulong)csrt; | |
| acpi_update_checksum(header); | |
| acpi_add_table(ctx, csrt); | |
| return 0; | |
| } | |
| ACPI_WRITER(5csrt, "CSRT", acpi_write_csrt, 0); |