From 6b1e267f6687a101260c241ce14304a0b45a992f Mon Sep 17 00:00:00 2001 From: jruoho Date: Tue, 26 Oct 2010 03:11:10 +0000 Subject: [PATCH] Refactor slightly and bump WARNS to 4. --- sys/dev/acpi/atk0110.c | 83 ++++++++++++++++++++------------------- sys/modules/aibs/Makefile | 4 +- 2 files changed, 45 insertions(+), 42 deletions(-) diff --git a/sys/dev/acpi/atk0110.c b/sys/dev/acpi/atk0110.c index 3e9d0a25f190..9cf96a37f549 100644 --- a/sys/dev/acpi/atk0110.c +++ b/sys/dev/acpi/atk0110.c @@ -1,4 +1,4 @@ -/* $NetBSD: atk0110.c,v 1.13 2010/10/25 17:06:58 jruoho Exp $ */ +/* $NetBSD: atk0110.c,v 1.14 2010/10/26 03:11:10 jruoho Exp $ */ /* $OpenBSD: atk0110.c,v 1.1 2009/07/23 01:38:16 cnst Exp $ */ /* @@ -18,7 +18,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: atk0110.c,v 1.13 2010/10/25 17:06:58 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: atk0110.c,v 1.14 2010/10/26 03:11:10 jruoho Exp $"); #include #include @@ -43,8 +43,6 @@ __KERNEL_RCSID(0, "$NetBSD: atk0110.c,v 1.13 2010/10/25 17:06:58 jruoho Exp $"); #define _COMPONENT ACPI_RESOURCE_COMPONENT ACPI_MODULE_NAME ("acpi_aibs") -#define AIBS_MORE_SENSORS - struct aibs_sensor { envsys_data_t s; ACPI_INTEGER i; @@ -138,14 +136,15 @@ static void aibs_attach_sif(device_t self, enum envsys_units st) { struct aibs_softc *sc = device_private(self); - ACPI_STATUS s; + ACPI_OBJECT *bp, *o, *oi; ACPI_BUFFER b; - ACPI_OBJECT *bp, *o; - int i, n; + ACPI_STATUS rv; + uint32_t i, n; char name[] = "?SIF"; struct aibs_sensor *as; switch (st) { + case ENVSYS_STEMP: name[0] = 'T'; break; @@ -159,50 +158,51 @@ aibs_attach_sif(device_t self, enum envsys_units st) return; } - b.Length = ACPI_ALLOCATE_BUFFER; - s = AcpiEvaluateObjectTyped(sc->sc_node->ad_handle, name, NULL, &b, - ACPI_TYPE_PACKAGE); - if (ACPI_FAILURE(s)) { - aprint_error_dev(self, "%s not found\n", name); - return; - } + rv = acpi_eval_struct(sc->sc_node->ad_handle, name, &b); + + if (ACPI_FAILURE(rv)) + goto out; bp = b.Pointer; + + if (bp->Type != ACPI_TYPE_PACKAGE) { + rv = AE_TYPE; + goto out; + } + o = bp->Package.Elements; + if (o[0].Type != ACPI_TYPE_INTEGER) { - aprint_error_dev(self, "%s[0]: invalid type\n", name); - ACPI_FREE(b.Pointer); - return; + rv = AE_TYPE; + goto out; + } + + if (o[0].Integer.Value > UINT32_MAX) { + rv = AE_AML_NUMERIC_OVERFLOW; + goto out; } n = o[0].Integer.Value; - if (bp->Package.Count - 1 < n) { - aprint_error_dev(self, "%s: invalid package\n", name); - ACPI_FREE(b.Pointer); - return; - } else if (bp->Package.Count - 1 > n) { - int on = n; -#ifdef AIBS_MORE_SENSORS - n = bp->Package.Count - 1; -#endif - aprint_error_dev(self, "%s: malformed package: %i/%i" - ", assume %i\n", name, on, bp->Package.Count - 1, n); + if (n == 0) { + rv = AE_LIMIT; + goto out; } - if (n < 1) { - aprint_error_dev(self, "%s: no members in the package\n", - name); - ACPI_FREE(b.Pointer); - return; + + if (bp->Package.Count - 1 != n) { + rv = AE_BAD_VALUE; + goto out; } as = malloc(sizeof(*as) * n, M_DEVBUF, M_NOWAIT | M_ZERO); + if (as == NULL) { - aprint_error_dev(self, "%s: malloc fail\n", name); - ACPI_FREE(b.Pointer); - return; + rv = AE_NO_MEMORY; + goto out; } + switch (st) { + case ENVSYS_STEMP: sc->sc_asens_temp = as; break; @@ -218,9 +218,7 @@ aibs_attach_sif(device_t self, enum envsys_units st) } for (i = 0, o++; i < n; i++, o++) { - ACPI_OBJECT *oi; - /* acpica5 automatically evaluates the referenced package */ if(o[0].Type != ACPI_TYPE_PACKAGE) { aprint_error_dev(self, "%s: %i: not a package: %u type\n", @@ -257,8 +255,13 @@ aibs_attach_sif(device_t self, enum envsys_units st) name[0], i); } - ACPI_FREE(b.Pointer); - return; +out: + if (b.Pointer != NULL) + ACPI_FREE(b.Pointer); + + if (ACPI_FAILURE(rv)) + aprint_error_dev(self, "failed to evaluate %s: %s\n", + name, AcpiFormatException(rv)); } static int diff --git a/sys/modules/aibs/Makefile b/sys/modules/aibs/Makefile index 22153c14709a..d7a09c89456c 100644 --- a/sys/modules/aibs/Makefile +++ b/sys/modules/aibs/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1 2010/10/25 17:17:57 jruoho Exp $ +# $NetBSD: Makefile,v 1.2 2010/10/26 03:11:10 jruoho Exp $ .include "../Makefile.inc" @@ -8,6 +8,6 @@ KMOD= aibs IOCONF= AIBS.ioconf SRCS= atk0110.c -WARNS= 3 +WARNS= 4 .include