Re: [PATCH v3 05/16] acpi: Move the table-finding functions into the libary

2023-05-04 Thread Bin Meng
On Mon, Mar 27, 2023 at 12:16 PM Simon Glass  wrote:
>
> This is useful for other features. Move the function into library code
> so it can be used outside just the 'acpi' command.
>
> Signed-off-by: Simon Glass 
> ---
>
> Changes in v3:
> - Avoid a build error with the ASL compiler
>
> Changes in v2:
> - Add new patch to move acpi-table-finding functions into the library
>
>  cmd/acpi.c| 40 +-
>  include/acpi/acpi_table.h |  8 +++
>  lib/acpi/Makefile |  2 ++
>  lib/acpi/acpi.c   | 45 +++
>  4 files changed, 56 insertions(+), 39 deletions(-)
>  create mode 100644 lib/acpi/acpi.c
>

Reviewed-by: Bin Meng 


[PATCH v3 05/16] acpi: Move the table-finding functions into the libary

2023-03-26 Thread Simon Glass
This is useful for other features. Move the function into library code
so it can be used outside just the 'acpi' command.

Signed-off-by: Simon Glass 
---

Changes in v3:
- Avoid a build error with the ASL compiler

Changes in v2:
- Add new patch to move acpi-table-finding functions into the library

 cmd/acpi.c| 40 +-
 include/acpi/acpi_table.h |  8 +++
 lib/acpi/Makefile |  2 ++
 lib/acpi/acpi.c   | 45 +++
 4 files changed, 56 insertions(+), 39 deletions(-)
 create mode 100644 lib/acpi/acpi.c

diff --git a/cmd/acpi.c b/cmd/acpi.c
index 991b5235e289..e70913e40bfe 100644
--- a/cmd/acpi.c
+++ b/cmd/acpi.c
@@ -36,49 +36,11 @@ static void dump_hdr(struct acpi_table_header *hdr)
}
 }
 
-/**
- * find_table() - Look up an ACPI table
- *
- * @sig: Signature of table (4 characters, upper case)
- * Return: pointer to table header, or NULL if not found
- */
-struct acpi_table_header *find_table(const char *sig)
-{
-   struct acpi_rsdp *rsdp;
-   struct acpi_rsdt *rsdt;
-   int len, i, count;
-
-   rsdp = map_sysmem(gd_acpi_start(), 0);
-   if (!rsdp)
-   return NULL;
-   rsdt = map_sysmem(rsdp->rsdt_address, 0);
-   len = rsdt->header.length - sizeof(rsdt->header);
-   count = len / sizeof(u32);
-   for (i = 0; i < count; i++) {
-   struct acpi_table_header *hdr;
-
-   hdr = map_sysmem(rsdt->entry[i], 0);
-   if (!memcmp(hdr->signature, sig, ACPI_NAME_LEN))
-   return hdr;
-   if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) {
-   struct acpi_fadt *fadt = (struct acpi_fadt *)hdr;
-
-   if (!memcmp(sig, "DSDT", ACPI_NAME_LEN) && fadt->dsdt)
-   return map_sysmem(fadt->dsdt, 0);
-   if (!memcmp(sig, "FACS", ACPI_NAME_LEN) &&
-   fadt->firmware_ctrl)
-   return map_sysmem(fadt->firmware_ctrl, 0);
-   }
-   }
-
-   return NULL;
-}
-
 static int dump_table_name(const char *sig)
 {
struct acpi_table_header *hdr;
 
-   hdr = find_table(sig);
+   hdr = acpi_find_table(sig);
if (!hdr)
return -ENOENT;
printf("%.*s @ %08lx\n", ACPI_NAME_LEN, hdr->signature,
diff --git a/include/acpi/acpi_table.h b/include/acpi/acpi_table.h
index 4030d25c66a0..7ed0443c821a 100644
--- a/include/acpi/acpi_table.h
+++ b/include/acpi/acpi_table.h
@@ -923,6 +923,14 @@ int acpi_fill_csrt(struct acpi_ctx *ctx);
  */
 ulong write_acpi_tables(ulong start);
 
+/**
+ * acpi_find_table() - Look up an ACPI table
+ *
+ * @sig: Signature of table (4 characters, upper case)
+ * Return: pointer to table header, or NULL if not found
+ */
+struct acpi_table_header *acpi_find_table(const char *sig);
+
 #endif /* !__ACPI__*/
 
 #include 
diff --git a/lib/acpi/Makefile b/lib/acpi/Makefile
index 12337abaecfa..c1c9675b5d2a 100644
--- a/lib/acpi/Makefile
+++ b/lib/acpi/Makefile
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0+
 #
 
+obj-y += acpi.o
+
 ifdef CONFIG_$(SPL_TPL_)GENERATE_ACPI_TABLE
 
 obj-$(CONFIG_$(SPL_)ACPIGEN) += acpigen.o
diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c
new file mode 100644
index ..14b15754f492
--- /dev/null
+++ b/lib/acpi/acpi.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Utility functions for ACPI
+ *
+ * Copyright 2023 Google LLC
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct acpi_table_header *acpi_find_table(const char *sig)
+{
+   struct acpi_rsdp *rsdp;
+   struct acpi_rsdt *rsdt;
+   int len, i, count;
+
+   rsdp = map_sysmem(gd_acpi_start(), 0);
+   if (!rsdp)
+   return NULL;
+   rsdt = map_sysmem(rsdp->rsdt_address, 0);
+   len = rsdt->header.length - sizeof(rsdt->header);
+   count = len / sizeof(u32);
+   for (i = 0; i < count; i++) {
+   struct acpi_table_header *hdr;
+
+   hdr = map_sysmem(rsdt->entry[i], 0);
+   if (!memcmp(hdr->signature, sig, ACPI_NAME_LEN))
+   return hdr;
+   if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) {
+   struct acpi_fadt *fadt = (struct acpi_fadt *)hdr;
+
+   if (!memcmp(sig, "DSDT", ACPI_NAME_LEN) && fadt->dsdt)
+   return map_sysmem(fadt->dsdt, 0);
+   if (!memcmp(sig, "FACS", ACPI_NAME_LEN) &&
+   fadt->firmware_ctrl)
+   return map_sysmem(fadt->firmware_ctrl, 0);
+   }
+   }
+
+   return NULL;
+}
-- 
2.40.0.348.gf938b09366-goog