Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/acpi Move the ACPI_ACTIVATE_DEV block around for cla...



details:   https://anonhg.NetBSD.org/src/rev/1fe045269859
branches:  trunk
changeset: 760493:1fe045269859
user:      jruoho <jruoho%NetBSD.org@localhost>
date:      Thu Jan 06 06:49:12 2011 +0000

description:
Move the ACPI_ACTIVATE_DEV block around for clarity.

diffstat:

 sys/dev/acpi/acpi.c |  336 ++++++++++++++++++++++++++-------------------------
 1 files changed, 169 insertions(+), 167 deletions(-)

diffs (truncated from 383 to 300 lines):

diff -r 99727c1baad8 -r 1fe045269859 sys/dev/acpi/acpi.c
--- a/sys/dev/acpi/acpi.c       Thu Jan 06 05:51:57 2011 +0000
+++ b/sys/dev/acpi/acpi.c       Thu Jan 06 06:49:12 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: acpi.c,v 1.227 2011/01/05 08:08:47 jruoho Exp $        */
+/*     $NetBSD: acpi.c,v 1.228 2011/01/06 06:49:12 jruoho Exp $        */
 
 /*-
  * Copyright (c) 2003, 2007 The NetBSD Foundation, Inc.
@@ -100,7 +100,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.227 2011/01/05 08:08:47 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.228 2011/01/06 06:49:12 jruoho Exp $");
 
 #include "opt_acpi.h"
 #include "opt_pcifixup.h"
@@ -214,11 +214,6 @@
 static ACPI_STATUS     acpi_make_devnode_post(ACPI_HANDLE, uint32_t,
                                               void *, void **);
 
-#ifdef ACPI_ACTIVATE_DEV
-static void            acpi_activate_device(ACPI_HANDLE, ACPI_DEVICE_INFO **);
-static ACPI_STATUS     acpi_allocate_resources(ACPI_HANDLE);
-#endif
-
 static int             acpi_rescan(device_t, const char *, const int *);
 static void            acpi_rescan_early(struct acpi_softc *);
 static void            acpi_rescan_nodes(struct acpi_softc *);
@@ -245,6 +240,9 @@
 void                   acpi_print_verbose_stub(struct acpi_softc *);
 void                   acpi_print_dev_stub(const char *);
 
+static void            acpi_activate_device(ACPI_HANDLE, ACPI_DEVICE_INFO **);
+ACPI_STATUS            acpi_allocate_resources(ACPI_HANDLE);
+
 void (*acpi_print_verbose)(struct acpi_softc *) = acpi_print_verbose_stub;
 void (*acpi_print_dev)(const char *) = acpi_print_dev_stub;
 
@@ -712,11 +710,7 @@
        switch (type) {
 
        case ACPI_TYPE_DEVICE:
-
-#ifdef ACPI_ACTIVATE_DEV
                acpi_activate_device(handle, &devinfo);
-#endif
-
        case ACPI_TYPE_PROCESSOR:
        case ACPI_TYPE_THERMAL:
        case ACPI_TYPE_POWER:
@@ -785,162 +779,6 @@
        return AE_OK;
 }
 
-#ifdef ACPI_ACTIVATE_DEV
-static void
-acpi_activate_device(ACPI_HANDLE handle, ACPI_DEVICE_INFO **di)
-{
-       static const int valid = ACPI_VALID_STA | ACPI_VALID_HID;
-       ACPI_DEVICE_INFO *newdi;
-       ACPI_STATUS rv;
-       uint32_t old;
-
-       /*
-        * If the device is valid and present,
-        * but not enabled, try to activate it.
-        */
-       if (((*di)->Valid & valid) != valid)
-               return;
-
-       old = (*di)->CurrentStatus;
-
-       if ((old & (ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED)) !=
-           ACPI_STA_DEVICE_PRESENT)
-               return;
-
-       rv = acpi_allocate_resources(handle);
-
-       if (ACPI_FAILURE(rv))
-               goto fail;
-
-       rv = AcpiGetObjectInfo(handle, &newdi);
-
-       if (ACPI_FAILURE(rv))
-               goto fail;
-
-       ACPI_FREE(*di);
-       *di = newdi;
-
-       aprint_verbose_dev(acpi_softc->sc_dev,
-           "%s activated, STA 0x%08X -> STA 0x%08X\n",
-           (*di)->HardwareId.String, old, (*di)->CurrentStatus);
-
-       return;
-
-fail:
-       aprint_error_dev(acpi_softc->sc_dev, "failed to "
-           "activate %s\n", (*di)->HardwareId.String);
-}
-
-/*
- * XXX: This very incomplete.
- */
-ACPI_STATUS
-acpi_allocate_resources(ACPI_HANDLE handle)
-{
-       ACPI_BUFFER bufp, bufc, bufn;
-       ACPI_RESOURCE *resp, *resc, *resn;
-       ACPI_RESOURCE_IRQ *irq;
-       ACPI_RESOURCE_EXTENDED_IRQ *xirq;
-       ACPI_STATUS rv;
-       uint delta;
-
-       rv = acpi_get(handle, &bufp, AcpiGetPossibleResources);
-       if (ACPI_FAILURE(rv))
-               goto out;
-       rv = acpi_get(handle, &bufc, AcpiGetCurrentResources);
-       if (ACPI_FAILURE(rv)) {
-               goto out1;
-       }
-
-       bufn.Length = 1000;
-       bufn.Pointer = resn = malloc(bufn.Length, M_ACPI, M_WAITOK);
-       resp = bufp.Pointer;
-       resc = bufc.Pointer;
-       while (resc->Type != ACPI_RESOURCE_TYPE_END_TAG &&
-              resp->Type != ACPI_RESOURCE_TYPE_END_TAG) {
-               while (resc->Type != resp->Type && resp->Type != ACPI_RESOURCE_TYPE_END_TAG)
-                       resp = ACPI_NEXT_RESOURCE(resp);
-               if (resp->Type == ACPI_RESOURCE_TYPE_END_TAG)
-                       break;
-               /* Found identical Id */
-               resn->Type = resc->Type;
-               switch (resc->Type) {
-               case ACPI_RESOURCE_TYPE_IRQ:
-                       memcpy(&resn->Data, &resp->Data,
-                              sizeof(ACPI_RESOURCE_IRQ));
-                       irq = (ACPI_RESOURCE_IRQ *)&resn->Data;
-                       irq->Interrupts[0] =
-                           ((ACPI_RESOURCE_IRQ *)&resp->Data)->
-                               Interrupts[irq->InterruptCount-1];
-                       irq->InterruptCount = 1;
-                       resn->Length = ACPI_RS_SIZE(ACPI_RESOURCE_IRQ);
-                       break;
-               case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
-                       memcpy(&resn->Data, &resp->Data,
-                              sizeof(ACPI_RESOURCE_EXTENDED_IRQ));
-                       xirq = (ACPI_RESOURCE_EXTENDED_IRQ *)&resn->Data;
-#if 0
-                       /*
-                        * XXX: Not duplicating the interrupt logic above
-                        *      because its not clear what it accomplishes.
-                        */
-                       xirq->Interrupts[0] =
-                           ((ACPI_RESOURCE_EXT_IRQ *)&resp->Data)->
-                           Interrupts[irq->NumberOfInterrupts-1];
-                       xirq->NumberOfInterrupts = 1;
-#endif
-                       resn->Length = ACPI_RS_SIZE(ACPI_RESOURCE_EXTENDED_IRQ);
-                       break;
-               case ACPI_RESOURCE_TYPE_IO:
-                       memcpy(&resn->Data, &resp->Data,
-                              sizeof(ACPI_RESOURCE_IO));
-                       resn->Length = resp->Length;
-                       break;
-               default:
-                       aprint_error_dev(acpi_softc->sc_dev,
-                           "%s: invalid type %u\n", __func__, resc->Type);
-                       rv = AE_BAD_DATA;
-                       goto out2;
-               }
-               resc = ACPI_NEXT_RESOURCE(resc);
-               resn = ACPI_NEXT_RESOURCE(resn);
-               resp = ACPI_NEXT_RESOURCE(resp);
-               delta = (uint8_t *)resn - (uint8_t *)bufn.Pointer;
-               if (delta >=
-                   bufn.Length-ACPI_RS_SIZE(ACPI_RESOURCE_DATA)) {
-                       bufn.Length *= 2;
-                       bufn.Pointer = realloc(bufn.Pointer, bufn.Length,
-                                              M_ACPI, M_WAITOK);
-                       resn = (ACPI_RESOURCE *)((uint8_t *)bufn.Pointer +
-                           delta);
-               }
-       }
-
-       if (resc->Type != ACPI_RESOURCE_TYPE_END_TAG) {
-               aprint_error_dev(acpi_softc->sc_dev,
-                   "%s: resc not exhausted\n", __func__);
-               rv = AE_BAD_DATA;
-               goto out3;
-       }
-
-       resn->Type = ACPI_RESOURCE_TYPE_END_TAG;
-       rv = AcpiSetCurrentResources(handle, &bufn);
-
-       if (ACPI_FAILURE(rv))
-               aprint_error_dev(acpi_softc->sc_dev, "%s: failed to set "
-                   "resources: %s\n", __func__, AcpiFormatException(rv));
-
-out3:
-       free(bufn.Pointer, M_ACPI);
-out2:
-       ACPI_FREE(bufc.Pointer);
-out1:
-       ACPI_FREE(bufp.Pointer);
-out:
-       return rv;
-}
-#endif /* ACPI_ACTIVATE_DEV */
-
 /*
  * Device attachment.
  */
@@ -1901,3 +1739,167 @@
        if (acpi_verbose_loaded != 0)
                acpi_print_dev(pnpstr);
 }
+
+/*
+ * ACPI_ACTIVATE_DEV.
+ */
+static void
+acpi_activate_device(ACPI_HANDLE handle, ACPI_DEVICE_INFO **di)
+{
+
+#ifndef ACPI_ACTIVATE_DEV
+       return;
+}
+#else
+       static const int valid = ACPI_VALID_STA | ACPI_VALID_HID;
+       ACPI_DEVICE_INFO *newdi;
+       ACPI_STATUS rv;
+       uint32_t old;
+
+       /*
+        * If the device is valid and present,
+        * but not enabled, try to activate it.
+        */
+       if (((*di)->Valid & valid) != valid)
+               return;
+
+       old = (*di)->CurrentStatus;
+
+       if ((old & (ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED)) !=
+           ACPI_STA_DEVICE_PRESENT)
+               return;
+
+       rv = acpi_allocate_resources(handle);
+
+       if (ACPI_FAILURE(rv))
+               goto fail;
+
+       rv = AcpiGetObjectInfo(handle, &newdi);
+
+       if (ACPI_FAILURE(rv))
+               goto fail;
+
+       ACPI_FREE(*di);
+       *di = newdi;
+
+       aprint_verbose_dev(acpi_softc->sc_dev,
+           "%s activated, STA 0x%08X -> STA 0x%08X\n",
+           (*di)->HardwareId.String, old, (*di)->CurrentStatus);
+
+       return;
+
+fail:
+       aprint_error_dev(acpi_softc->sc_dev, "failed to "
+           "activate %s\n", (*di)->HardwareId.String);
+}
+
+/*
+ * XXX: This very incomplete.
+ */
+ACPI_STATUS
+acpi_allocate_resources(ACPI_HANDLE handle)
+{
+       ACPI_BUFFER bufp, bufc, bufn;
+       ACPI_RESOURCE *resp, *resc, *resn;
+       ACPI_RESOURCE_IRQ *irq;
+       ACPI_RESOURCE_EXTENDED_IRQ *xirq;
+       ACPI_STATUS rv;
+       uint delta;
+
+       rv = acpi_get(handle, &bufp, AcpiGetPossibleResources);
+       if (ACPI_FAILURE(rv))
+               goto out;
+       rv = acpi_get(handle, &bufc, AcpiGetCurrentResources);
+       if (ACPI_FAILURE(rv)) {
+               goto out1;
+       }
+
+       bufn.Length = 1000;
+       bufn.Pointer = resn = malloc(bufn.Length, M_ACPI, M_WAITOK);
+       resp = bufp.Pointer;
+       resc = bufc.Pointer;
+       while (resc->Type != ACPI_RESOURCE_TYPE_END_TAG &&
+              resp->Type != ACPI_RESOURCE_TYPE_END_TAG) {



Home | Main Index | Thread Index | Old Index