svn commit: r336185 - head/usr.sbin/acpi/acpidump
Ben Widawsky
bwidawsk at freebsd.org
Wed Jul 11 01:38:11 UTC 2018
Here is sample output from the tool:
LPIT: Length=148, Revision=1, Checksum=32,
OEMID=INTEL, OEM Table ID=SKL, OEM Revision=0x0,
Creator ID=MSFT, Creator Revision=0x5f
Type=ACPI_LPIT_TYPE_NATIVE_CSTATE
Length=56
UniqueId=0x0000
Flags=
EntryTrigger=0x0000000000000060 (?) Residency=30000
Latency=3000
ResidencyCounter=0x0000000000000632 (?) CounterFrequency=TSC
Type=ACPI_LPIT_TYPE_NATIVE_CSTATE
Length=56
UniqueId=0x0001
Flags=
EntryTrigger=0x0000000000000060 (?) Residency=30000
Latency=3000
ResidencyCounter=0x0000000000000632 (?) CounterFrequency=TSC
On 18-07-11 01:37:01, Ben Widawsky wrote:
> Author: bwidawsk
> Date: Wed Jul 11 01:37:01 2018
> New Revision: 336185
> URL: https://svnweb.freebsd.org/changeset/base/336185
>
> Log:
> acpidump(8): Add ACPI LPIT (Low Power Idle Table)
>
> The LPIT is the part of the "standardized" way that one can enumerate
> various power state information on Intel platforms.
>
> The documentation for this change can be found here:
> http://www.uefi.org/sites/default/files/resources/Intel_ACPI_Low_Power_S0_Idle.pdf
>
> Reviewed By: jhb
> Approved By: jhb
> Differential Revision: https://reviews.freebsd.org/D15931
>
> Modified:
> head/usr.sbin/acpi/acpidump/acpi.c
> head/usr.sbin/acpi/acpidump/acpidump.8
>
> Modified: head/usr.sbin/acpi/acpidump/acpi.c
> ==============================================================================
> --- head/usr.sbin/acpi/acpidump/acpi.c Tue Jul 10 23:30:19 2018 (r336184)
> +++ head/usr.sbin/acpi/acpidump/acpi.c Wed Jul 11 01:37:01 2018 (r336185)
> @@ -68,6 +68,7 @@ static void acpi_handle_hpet(ACPI_TABLE_HEADER *sdp);
> static void acpi_handle_mcfg(ACPI_TABLE_HEADER *sdp);
> static void acpi_handle_slit(ACPI_TABLE_HEADER *sdp);
> static void acpi_handle_wddt(ACPI_TABLE_HEADER *sdp);
> +static void acpi_handle_lpit(ACPI_TABLE_HEADER *sdp);
> static void acpi_print_srat_cpu(uint32_t apic_id, uint32_t proximity_domain,
> uint32_t flags);
> static void acpi_print_srat_memory(ACPI_SRAT_MEM_AFFINITY *mp);
> @@ -716,6 +717,79 @@ acpi_handle_wddt(ACPI_TABLE_HEADER *sdp)
> }
>
> static void
> +acpi_print_native_lpit(ACPI_LPIT_NATIVE *nl)
> +{
> + printf("\tEntryTrigger=");
> + acpi_print_gas(&nl->EntryTrigger);
> + printf("\tResidency=%u\n", nl->Residency);
> + printf("\tLatency=%u\n", nl->Latency);
> + if (nl->Header.Flags & ACPI_LPIT_NO_COUNTER)
> + printf("\tResidencyCounter=Not Present");
> + else {
> + printf("\tResidencyCounter=");
> + acpi_print_gas(&nl->ResidencyCounter);
> + }
> + if (nl->CounterFrequency)
> + printf("\tCounterFrequency=%ju\n", nl->CounterFrequency);
> + else
> + printf("\tCounterFrequency=TSC\n");
> +}
> +
> +static void
> +acpi_print_lpit(ACPI_LPIT_HEADER *lpit)
> +{
> + if (lpit->Type == ACPI_LPIT_TYPE_NATIVE_CSTATE)
> + printf("\tType=ACPI_LPIT_TYPE_NATIVE_CSTATE\n");
> + else
> + warnx("unknown LPIT type %u", lpit->Type);
> +
> + printf("\tLength=%u\n", lpit->Length);
> + printf("\tUniqueId=0x%04x\n", lpit->UniqueId);
> +#define PRINTFLAG(var, flag) printflag((var), ACPI_LPIT_## flag, #flag)
> + printf("\tFlags=");
> + PRINTFLAG(lpit->Flags, STATE_DISABLED);
> + PRINTFLAG_END();
> +#undef PRINTFLAG
> +
> + if (lpit->Type == ACPI_LPIT_TYPE_NATIVE_CSTATE)
> + return acpi_print_native_lpit((ACPI_LPIT_NATIVE *)lpit);
> +}
> +
> +static void
> +acpi_walk_lpit(ACPI_TABLE_HEADER *table, void *first,
> + void (*action)(ACPI_LPIT_HEADER *))
> +{
> + ACPI_LPIT_HEADER *subtable;
> + char *end;
> +
> + subtable = first;
> + end = (char *)table + table->Length;
> + while ((char *)subtable < end) {
> + printf("\n");
> + if (subtable->Length < sizeof(ACPI_LPIT_HEADER)) {
> + warnx("invalid subtable length %u", subtable->Length);
> + return;
> + }
> + action(subtable);
> + subtable = (ACPI_LPIT_HEADER *)((char *)subtable +
> + subtable->Length);
> + }
> +}
> +
> +static void
> +acpi_handle_lpit(ACPI_TABLE_HEADER *sdp)
> +{
> + ACPI_TABLE_LPIT *lpit;
> +
> + printf(BEGIN_COMMENT);
> + acpi_print_sdt(sdp);
> + lpit = (ACPI_TABLE_LPIT *)sdp;
> + acpi_walk_lpit(sdp, (lpit + 1), acpi_print_lpit);
> +
> + printf(END_COMMENT);
> +}
> +
> +static void
> acpi_print_srat_cpu(uint32_t apic_id, uint32_t proximity_domain,
> uint32_t flags)
> {
> @@ -1693,6 +1767,8 @@ acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp)
> acpi_handle_nfit(sdp);
> else if (!memcmp(sdp->Signature, ACPI_SIG_WDDT, 4))
> acpi_handle_wddt(sdp);
> + else if (!memcmp(sdp->Signature, ACPI_SIG_LPIT, 4))
> + acpi_handle_lpit(sdp);
> else {
> printf(BEGIN_COMMENT);
> acpi_print_sdt(sdp);
>
> Modified: head/usr.sbin/acpi/acpidump/acpidump.8
> ==============================================================================
> --- head/usr.sbin/acpi/acpidump/acpidump.8 Tue Jul 10 23:30:19 2018 (r336184)
> +++ head/usr.sbin/acpi/acpidump/acpidump.8 Wed Jul 11 01:37:01 2018 (r336185)
> @@ -29,7 +29,7 @@
> .\"
> .\" $FreeBSD$
> .\"
> -.Dd June 20, 2018
> +.Dd July 10, 2018
> .Dt ACPIDUMP 8
> .Os
> .Sh NAME
> @@ -103,6 +103,7 @@ utility dumps contents of the following tables:
> .It FACS
> .It FADT
> .It HPET
> +.It LPIT
> .It MADT
> .It MCFG
> .It NFIT
> _______________________________________________
> svn-src-head at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at freebsd.org"
More information about the svn-src-all
mailing list