> Date: Wed, 20 Dec 2023 12:00:47 +0100
> From: Henryk Paluch <[email protected]>
>
> Hello!
>
> > Ah, cool. That is a bit of a heck though. I did look into what is
> > needed to fix this properly. If I send you a diff, can you test it?
>
> Feel free to send me patches. I will test them.
>
> Best regards
> --Henryk Paluch
Can you try the attached diff?
Index: dev/acpi/acpi.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpi.c,v
retrieving revision 1.425
diff -u -p -r1.425 acpi.c
--- dev/acpi/acpi.c 8 Jul 2023 08:01:10 -0000 1.425
+++ dev/acpi/acpi.c 21 Dec 2023 16:37:18 -0000
@@ -1104,16 +1104,16 @@ acpi_attach_common(struct acpi_softc *sc
printf(" !DSDT");
p_dsdt = entry->q_table;
- acpi_parse_aml(sc, p_dsdt->aml, p_dsdt->hdr_length -
- sizeof(p_dsdt->hdr));
+ acpi_parse_aml(sc, NULL, p_dsdt->aml,
+ p_dsdt->hdr_length - sizeof(p_dsdt->hdr));
/* Load SSDT's */
SIMPLEQ_FOREACH(entry, &sc->sc_tables, q_next) {
if (memcmp(entry->q_table, SSDT_SIG,
sizeof(SSDT_SIG) - 1) == 0) {
p_dsdt = entry->q_table;
- acpi_parse_aml(sc, p_dsdt->aml, p_dsdt->hdr_length -
- sizeof(p_dsdt->hdr));
+ acpi_parse_aml(sc, NULL, p_dsdt->aml,
+ p_dsdt->hdr_length - sizeof(p_dsdt->hdr));
}
}
Index: dev/acpi/dsdt.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
retrieving revision 1.264
diff -u -p -r1.264 dsdt.c
--- dev/acpi/dsdt.c 9 Dec 2021 20:21:35 -0000 1.264
+++ dev/acpi/dsdt.c 21 Dec 2023 16:37:18 -0000
@@ -634,8 +634,9 @@ __aml_search(struct aml_node *root, uint
SIMPLEQ_INIT(&node->son);
SIMPLEQ_INSERT_TAIL(&root->son, node, sib);
+ return node;
}
- return node;
+ return NULL;
}
/* Get absolute pathname of AML node */
@@ -3742,8 +3743,6 @@ aml_loadtable(struct acpi_softc *sc, con
struct acpi_dsdt *p_dsdt;
struct acpi_q *entry;
- if (strlen(rootpath) > 0)
- aml_die("LoadTable: RootPathString unsupported");
if (strlen(parameterpath) > 0)
aml_die("LoadTable: ParameterPathString unsupported");
@@ -3755,8 +3754,8 @@ aml_loadtable(struct acpi_softc *sc, con
strncmp(hdr->oemtableid, oemtableid,
sizeof(hdr->oemtableid)) == 0) {
p_dsdt = entry->q_table;
- acpi_parse_aml(sc, p_dsdt->aml, p_dsdt->hdr_length -
- sizeof(p_dsdt->hdr));
+ acpi_parse_aml(sc, rootpath, p_dsdt->aml,
+ p_dsdt->hdr_length - sizeof(p_dsdt->hdr));
return aml_allocvalue(AML_OBJTYPE_DDBHANDLE, 0, 0);
}
}
@@ -4520,10 +4519,18 @@ parse_error:
}
int
-acpi_parse_aml(struct acpi_softc *sc, uint8_t *start, uint32_t length)
+acpi_parse_aml(struct acpi_softc *sc, const char *rootpath,
+ uint8_t *start, uint32_t length)
{
+ struct aml_node *root = &aml_root;
struct aml_scope *scope;
struct aml_value res;
+
+ if (rootpath) {
+ root = aml_searchname(&aml_root, rootpath);
+ if (root == NULL)
+ aml_die("Invalid RootPathName %s\n", rootpath);
+ }
aml_root.start = start;
memset(&res, 0, sizeof(res));
Index: dev/acpi/dsdt.h
===================================================================
RCS file: /cvs/src/sys/dev/acpi/dsdt.h,v
retrieving revision 1.80
diff -u -p -r1.80 dsdt.h
--- dev/acpi/dsdt.h 2 Apr 2023 11:32:48 -0000 1.80
+++ dev/acpi/dsdt.h 21 Dec 2023 16:37:18 -0000
@@ -56,8 +56,8 @@ void aml_walktree(struct aml_node *);
void aml_find_node(struct aml_node *, const char *,
int (*)(struct aml_node *, void *), void *);
-int acpi_parse_aml(struct acpi_softc *, u_int8_t *,
- uint32_t);
+int acpi_parse_aml(struct acpi_softc *, const char *,
+ u_int8_t *, uint32_t);
void aml_register_notify(struct aml_node *, const char *,
int (*)(struct aml_node *, int, void *), void *,
int);