Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/acpi acpi: Add acpi_resource_parse_any().
details: https://anonhg.NetBSD.org/src/rev/f86ff9579642
branches: trunk
changeset: 1022786:f86ff9579642
user: jmcneill <jmcneill%NetBSD.org@localhost>
date: Sat Aug 07 18:39:40 2021 +0000
description:
acpi: Add acpi_resource_parse_any().
Like acpi_resource_parse(), but doesn't exclude "produced" resources.
diffstat:
sys/dev/acpi/acpi_resource.c | 54 +++++++++++++++++++++++++++++++++++++++----
sys/dev/acpi/acpivar.h | 4 ++-
2 files changed, 52 insertions(+), 6 deletions(-)
diffs (128 lines):
diff -r daf6902bb51c -r f86ff9579642 sys/dev/acpi/acpi_resource.c
--- a/sys/dev/acpi/acpi_resource.c Sat Aug 07 18:16:42 2021 +0000
+++ b/sys/dev/acpi/acpi_resource.c Sat Aug 07 18:39:40 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_resource.c,v 1.41 2019/12/31 17:26:04 jmcneill Exp $ */
+/* $NetBSD: acpi_resource.c,v 1.42 2021/08/07 18:39:40 jmcneill Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_resource.c,v 1.41 2019/12/31 17:26:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_resource.c,v 1.42 2021/08/07 18:39:40 jmcneill Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -83,6 +83,7 @@
struct resource_parse_callback_arg {
const struct acpi_resource_parse_ops *ops;
+ bool include_producer;
device_t dev;
void *context;
};
@@ -247,7 +248,8 @@
case ACPI_RESOURCE_TYPE_ADDRESS32:
/* XXX Only fixed size supported for now */
if (res->Data.Address32.Address.AddressLength == 0 ||
- res->Data.Address32.ProducerConsumer != ACPI_CONSUMER)
+ (!arg->include_producer &&
+ res->Data.Address32.ProducerConsumer != ACPI_CONSUMER))
break;
#define ADDRESS32_FIXED2(r) \
((r)->Data.Address32.MinAddressFixed == ACPI_ADDRESS_FIXED && \
@@ -302,7 +304,8 @@
#ifdef _LP64
/* XXX Only fixed size supported for now */
if (res->Data.Address64.Address.AddressLength == 0 ||
- res->Data.Address64.ProducerConsumer != ACPI_CONSUMER)
+ (!arg->include_producer &&
+ res->Data.Address64.ProducerConsumer != ACPI_CONSUMER))
break;
#define ADDRESS64_FIXED2(r) \
((r)->Data.Address64.MinAddressFixed == ACPI_ADDRESS_FIXED && \
@@ -357,7 +360,8 @@
break;
case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
- if (res->Data.ExtendedIrq.ProducerConsumer != ACPI_CONSUMER) {
+ if (!arg->include_producer &&
+ res->Data.ExtendedIrq.ProducerConsumer != ACPI_CONSUMER) {
ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES,
"ignored ExtIRQ producer\n"));
break;
@@ -420,6 +424,7 @@
cbarg.context = arg;
cbarg.ops = ops;
cbarg.dev = dev;
+ cbarg.include_producer = false;
rv = AcpiWalkResources(handle, path, acpi_resource_parse_callback,
&cbarg);
@@ -436,6 +441,45 @@
}
/*
+ * acpi_resource_parse_any:
+ *
+ * Parse a device node's resources and fill them in for the
+ * client. Like acpi_resource_parse, but doesn't skip ResourceProducer
+ * type resources.
+ */
+ACPI_STATUS
+acpi_resource_parse_any(device_t dev, ACPI_HANDLE handle, const char *path,
+ void *arg, const struct acpi_resource_parse_ops *ops)
+{
+ struct resource_parse_callback_arg cbarg;
+ ACPI_STATUS rv;
+
+ ACPI_FUNCTION_TRACE(__func__);
+
+ if (ops->init)
+ (*ops->init)(dev, arg, &cbarg.context);
+ else
+ cbarg.context = arg;
+ cbarg.ops = ops;
+ cbarg.dev = dev;
+ cbarg.include_producer = true;
+
+ rv = AcpiWalkResources(handle, path, acpi_resource_parse_callback,
+ &cbarg);
+ if (ACPI_FAILURE(rv)) {
+ aprint_error_dev(dev, "ACPI: unable to get %s resources: %s\n",
+ path, AcpiFormatException(rv));
+ return_ACPI_STATUS(rv);
+ }
+
+ if (ops->fini)
+ (*ops->fini)(dev, cbarg.context);
+
+ return_ACPI_STATUS(AE_OK);
+}
+
+
+/*
* acpi_resource_print:
*
* Print the resources assigned to a device.
diff -r daf6902bb51c -r f86ff9579642 sys/dev/acpi/acpivar.h
--- a/sys/dev/acpi/acpivar.h Sat Aug 07 18:16:42 2021 +0000
+++ b/sys/dev/acpi/acpivar.h Sat Aug 07 18:39:40 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpivar.h,v 1.86 2021/05/12 23:22:33 thorpej Exp $ */
+/* $NetBSD: acpivar.h,v 1.87 2021/08/07 18:39:40 jmcneill Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -330,6 +330,8 @@
ACPI_STATUS acpi_resource_parse(device_t, ACPI_HANDLE, const char *,
void *, const struct acpi_resource_parse_ops *);
+ACPI_STATUS acpi_resource_parse_any(device_t, ACPI_HANDLE, const char *,
+ void *, const struct acpi_resource_parse_ops *);
void acpi_resource_print(device_t, struct acpi_resources *);
void acpi_resource_cleanup(struct acpi_resources *);
Home |
Main Index |
Thread Index |
Old Index