Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Nov 2010 12:20:07 -0800
From:      "Moore, Robert" <robert.moore@intel.com>
To:        Andriy Gapon <avg@freebsd.org>, "freebsd-acpi@freebsd.org" <freebsd-acpi@freebsd.org>
Cc:        "Lin, Ming M" <ming.m.lin@intel.com>
Subject:   RE: fixup for missing C1 in _CST
Message-ID:  <4911F71203A09E4D9981D27F9D830858BC5E94D3@orsmsx503.amr.corp.intel.com>
In-Reply-To: <4CDC25F2.6080409@freebsd.org>
References:  <4CDC25F2.6080409@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
It's not clear to me from reading the ACPI spec that the Cstate sub-package=
s are required to be in any specific order.

This means that

sc->cpu_cx_states[0]

Does not necessarily have to be of type ACPI_STATE_C1, if ACPI_STATE_C1 is =
present on the machine. (unless the driver has sorted the list already.)

This looks like an area where ACPICA could sort the packages by type before=
 handing off the _CST package to the driver.

Bob


>-----Original Message-----
>From: owner-freebsd-acpi@freebsd.org [mailto:owner-freebsd-
>acpi@freebsd.org] On Behalf Of Andriy Gapon
>Sent: Thursday, November 11, 2010 9:21 AM
>To: freebsd-acpi@freebsd.org
>Subject: fixup for missing C1 in _CST
>
>
>Dear fellow FreeBSD ACPI hackers,
>what is your opinion about the following patch?
>
>The idea is to add a C1 state to available states if a bugggy BIOS supplie=
s
>us
>with _CST that has states with C2, C3, etc types, but no state with C1
>type.
>
>Thanks!
>
>diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c
>index 3c675df..6c771d9 100644
>--- a/sys/dev/acpica/acpi_cpu.c
>+++ b/sys/dev/acpica/acpi_cpu.c
>@@ -724,8 +724,21 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *sc)
> 	    sc->cpu_cx_count++;
> 	}
>     }
>-    AcpiOsFree(buf.Pointer);
>
>+    if (sc->cpu_cx_count > 0 && sc->cpu_cx_states[0].type !=3D
>ACPI_STATE_C1) {
>+	memmove(&sc->cpu_cx_states[1], &sc->cpu_cx_states[0],
>+	    sc->cpu_cx_count * sizeof(sc->cpu_cx_states[0]));
>+	sc->cpu_cx_states[0].type =3D ACPI_STATE_C1;
>+	sc->cpu_cx_states[0].trans_lat =3D 0;
>+	sc->cpu_cx_states[0].power =3D 0;
>+	sc->cpu_cx_states[0].p_lvlx =3D NULL;
>+	sc->cpu_cx_states[0].res_type =3D 0;
>+	sc->cpu_cx_count++;
>+	if (sc->cpu_cx_states[1].type <=3D ACPI_STATE_C2)
>+	    sc->cpu_non_c3++;
>+    }
>+
>+    AcpiOsFree(buf.Pointer);
>     return (0);
> }
>
>
>--
>Andriy Gapon
>_______________________________________________
>freebsd-acpi@freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
>To unsubscribe, send any mail to "freebsd-acpi-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4911F71203A09E4D9981D27F9D830858BC5E94D3>