Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Nov 2010 19:20:50 +0200
From:      Andriy Gapon <avg@freebsd.org>
To:        freebsd-acpi@freebsd.org
Subject:   fixup for missing C1 in _CST
Message-ID:  <4CDC25F2.6080409@freebsd.org>

next in thread | raw e-mail | index | archive | help

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



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