fixup for missing C1 in _CST

Moore, Robert robert.moore at intel.com
Thu Nov 11 20:20:11 UTC 2010


It's not clear to me from reading the ACPI spec that the Cstate sub-packages 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 at freebsd.org [mailto:owner-freebsd-
>acpi at freebsd.org] On Behalf Of Andriy Gapon
>Sent: Thursday, November 11, 2010 9:21 AM
>To: freebsd-acpi at 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 supplies
>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 !=
>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 = ACPI_STATE_C1;
>+	sc->cpu_cx_states[0].trans_lat = 0;
>+	sc->cpu_cx_states[0].power = 0;
>+	sc->cpu_cx_states[0].p_lvlx = NULL;
>+	sc->cpu_cx_states[0].res_type = 0;
>+	sc->cpu_cx_count++;
>+	if (sc->cpu_cx_states[1].type <= ACPI_STATE_C2)
>+	    sc->cpu_non_c3++;
>+    }
>+
>+    AcpiOsFree(buf.Pointer);
>     return (0);
> }
>
>
>--
>Andriy Gapon
>_______________________________________________
>freebsd-acpi at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
>To unsubscribe, send any mail to "freebsd-acpi-unsubscribe at freebsd.org"


More information about the freebsd-acpi mailing list