acpi: Move calculation of RSDP checksum into a function

Create a function for this checksumming, since it is not trivial. This
will allow the code to be shared with tests.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-07-08 05:05:23 +02:00
parent 0e44842ade
commit d0b607221f
2 changed files with 19 additions and 5 deletions

View File

@@ -1095,6 +1095,13 @@ int acpi_write_dbg2_pci_uart(struct acpi_ctx *ctx, struct udevice *dev,
void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
struct acpi_xsdt *xsdt);
/**
* acpi_udpate_rsdp_checksum() - Set up the checksum for the RSDP table
*
* @rsdp: Pointer to RSDP
*/
void acpi_udpate_rsdp_checksum(struct acpi_rsdp *rsdp);
/**
* acpi_fill_header() - Set up a table header
*

View File

@@ -15,6 +15,17 @@
#include <linux/errno.h>
#include <linux/string.h>
void acpi_udpate_rsdp_checksum(struct acpi_rsdp *rsdp)
{
rsdp->checksum = 0;
rsdp->ext_checksum = 0;
/* Calculate checksums */
rsdp->checksum = table_compute_checksum(rsdp, 20);
rsdp->ext_checksum = table_compute_checksum(rsdp,
sizeof(struct acpi_rsdp));
}
void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
struct acpi_xsdt *xsdt)
{
@@ -31,11 +42,7 @@ void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
rsdp->length = sizeof(struct acpi_rsdp);
rsdp->revision = ACPI_RSDP_REV_ACPI_2_0;
/* Calculate checksums */
rsdp->checksum = table_compute_checksum(rsdp, 20);
rsdp->ext_checksum = table_compute_checksum(rsdp,
sizeof(struct acpi_rsdp));
acpi_udpate_rsdp_checksum(rsdp);
}
static void acpi_write_rsdt(struct acpi_rsdt *rsdt)