git: 7cf0b203f57d - stable/13 - Revert "acpidump: dump AMD IVRS table describing IOMMU layout"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 17 Apr 2024 09:41:48 UTC
The branch stable/13 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=7cf0b203f57d9d6659a7da9c2c029ceca9946bc7
commit 7cf0b203f57d9d6659a7da9c2c029ceca9946bc7
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-04-17 09:39:36 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-04-17 09:40:04 +0000
Revert "acpidump: dump AMD IVRS table describing IOMMU layout"
and related helping commits on stable/13. This reverts commits
256ee428f5a3ccbe55c15a0b7a8551c41de3da80
f95a254aa7226160d41768112fd714a5c16bae61
f7fd7f8b88a15cd70e8d5b471264875d006fcd39
The acpi-ca version on stable/13 is too old.
---
usr.sbin/acpi/acpidump/acpi.c | 388 ------------------------------------------
1 file changed, 388 deletions(-)
diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c
index 1f3cb34b087f..5005c4bbe630 100644
--- a/usr.sbin/acpi/acpidump/acpi.c
+++ b/usr.sbin/acpi/acpidump/acpi.c
@@ -4,12 +4,8 @@
* Copyright (c) 1998 Doug Rabson
* Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org>
* Copyright (c) 2020 Alexander Motin <mav@FreeBSD.org>
- * Copyright (c) 2024 The FreeBSD Foundation
* All rights reserved.
*
- * Portions of this software were developed by Konstantin Belousov
- * under sponsorship from the FreeBSD Foundation.
- *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -40,7 +36,6 @@
#include <err.h>
#include <fcntl.h>
#include <paths.h>
-#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@@ -161,18 +156,6 @@ printflag(uint64_t var, uint64_t mask, const char *name)
}
}
-static void
-printfield(uint64_t var, int lbit, int hbit, const char *name)
-{
- uint64_t mask;
- int len;
-
- len = hbit - lbit + 1;
- mask = ((1 << (len + 1)) - 1) << lbit;
- printf("%c%s=%#jx", pf_sep, name, (uintmax_t)((var & mask) >> lbit));
- pf_sep = ',';
-}
-
static void
acpi_print_string(char *s, size_t length)
{
@@ -1501,375 +1484,6 @@ acpi_handle_dmar(ACPI_TABLE_HEADER *sdp)
printf(END_COMMENT);
}
-static void
-acpi_handle_ivrs_ivhd_header(ACPI_IVRS_HEADER *addr)
-{
- printf("\n\tIVHD Type=%#x IOMMUId=%x\n\tFlags=",
- addr->Type, addr->DeviceId);
-#define PRINTFLAG(flag, name) printflag(addr->Flags, flag, #name)
- PRINTFLAG(ACPI_IVHD_TT_ENABLE, HtTunEn);
- PRINTFLAG(ACPI_IVHD_ISOC, PassPW);
- PRINTFLAG(ACPI_IVHD_RES_PASS_PW, ResPassPW);
- PRINTFLAG(ACPI_IVHD_ISOC, Isoc);
- PRINTFLAG(ACPI_IVHD_TT_ENABLE, IotlbSup);
- PRINTFLAG((1 << 5), Coherent);
- PRINTFLAG((1 << 6), PreFSup);
- PRINTFLAG((1 << 7), PPRSup);
-#undef PRINTFLAG
- PRINTFLAG_END();
-}
-
-static void
-acpi_handle_ivrs_ivhd_dte(UINT8 dte)
-{
- if (dte == 0) {
- printf("\n");
- return;
- }
- printf(" DTE=");
-#define PRINTFLAG(flag, name) printflag(dte, flag, #name)
- PRINTFLAG(ACPI_IVHD_INIT_PASS, INITPass);
- PRINTFLAG(ACPI_IVHD_EINT_PASS, EIntPass);
- PRINTFLAG(ACPI_IVHD_NMI_PASS, NMIPass);
- PRINTFLAG(ACPI_IVHD_SYSTEM_MGMT, SysMgtPass);
- PRINTFLAG(ACPI_IVHD_LINT0_PASS, Lint0Pass);
- PRINTFLAG(ACPI_IVHD_LINT1_PASS, Lint1Pass);
-#undef PRINTFLAG
- PRINTFLAG_END();
-}
-
-static void
-acpi_handle_ivrs_ivhd_edte(UINT32 edte)
-{
- if (edte == 0)
- return;
- printf("\t\t ExtDTE=");
-#define PRINTFLAG(flag, name) printflag(edte, flag, #name)
- PRINTFLAG(ACPI_IVHD_ATS_DISABLED, AtsDisabled);
-#undef PRINTFLAG
- PRINTFLAG_END();
-}
-
-static const char *
-acpi_handle_ivrs_ivhd_variety(UINT8 v)
-{
- switch (v) {
- case ACPI_IVHD_IOAPIC:
- return ("IOAPIC");
- case ACPI_IVHD_HPET:
- return ("HPET");
- default:
- return ("UNKNOWN");
- }
-}
-
-static void
-acpi_handle_ivrs_ivhd_devs(ACPI_IVRS_DE_HEADER *d, char *de)
-{
- char *db;
- ACPI_IVRS_DEVICE4 *d4;
- ACPI_IVRS_DEVICE8A *d8a;
- ACPI_IVRS_DEVICE8B *d8b;
- ACPI_IVRS_DEVICE8C *d8c;
- ACPI_IVRS_DEVICE_HID *dh;
- size_t len;
- UINT32 x32;
-
- for (; (char *)d < de; d = (ACPI_IVRS_DE_HEADER *)(db + len)) {
- db = (char *)d;
- if (d->Type == ACPI_IVRS_TYPE_PAD4) {
- len = sizeof(*d4);
- } else if (d->Type == ACPI_IVRS_TYPE_ALL) {
- d4 = (ACPI_IVRS_DEVICE4 *)db;
- len = sizeof(*d4);
- printf("\t\tDev Type=%#x Id=ALL", d4->Header.Type);
- acpi_handle_ivrs_ivhd_dte(d4->Header.DataSetting);
- } else if (d->Type == ACPI_IVRS_TYPE_SELECT) {
- d4 = (ACPI_IVRS_DEVICE4 *)db;
- len = sizeof(*d4);
- printf("\t\tDev Type=%#x Id=%#06x", d4->Header.Type,
- d4->Header.Id);
- acpi_handle_ivrs_ivhd_dte(d4->Header.DataSetting);
- } else if (d->Type == ACPI_IVRS_TYPE_START) {
- d4 = (ACPI_IVRS_DEVICE4 *)db;
- len = 2 * sizeof(*d4);
- printf("\t\tDev Type=%#x Id=%#06x-%#06x",
- d4->Header.Type,
- d4->Header.Id, (d4 + 1)->Header.Id);
- acpi_handle_ivrs_ivhd_dte(d4->Header.DataSetting);
- } else if (d->Type == ACPI_IVRS_TYPE_END) {
- d4 = (ACPI_IVRS_DEVICE4 *)db;
- len = 2 * sizeof(*d4);
- printf("\t\tDev Type=%#x Id=%#06x BIOS BUG\n",
- d4->Header.Type, d4->Header.Id);
- } else if (d->Type == ACPI_IVRS_TYPE_PAD8) {
- len = sizeof(*d8a);
- } else if (d->Type == ACPI_IVRS_TYPE_ALIAS_SELECT) {
- d8a = (ACPI_IVRS_DEVICE8A *)db;
- len = sizeof(*d8a);
- printf("\t\tDev Type=%#x Id=%#06x AliasId=%#06x",
- d8a->Header.Type, d8a->Header.Id, d8a->UsedId);
- acpi_handle_ivrs_ivhd_dte(d8a->Header.DataSetting);
- } else if (d->Type == ACPI_IVRS_TYPE_ALIAS_START) {
- d8a = (ACPI_IVRS_DEVICE8A *)db;
- d4 = (ACPI_IVRS_DEVICE4 *)(db + sizeof(*d8a));
- len = sizeof(*d8a) + sizeof(*d4);
- printf("\t\tDev Type=%#x Id=%#06x-%#06x AliasId=%#06x",
- d8a->Header.Type, d8a->Header.Id, d4->Header.Id,
- d8a->UsedId);
- acpi_handle_ivrs_ivhd_dte(d8a->Header.DataSetting);
- } else if (d->Type == ACPI_IVRS_TYPE_EXT_SELECT) {
- d8b = (ACPI_IVRS_DEVICE8B *)db;
- len = sizeof(*d8b);
- printf("\t\tDev Type=%#x Id=%#06x",
- d8a->Header.Type, d8a->Header.Id);
- acpi_handle_ivrs_ivhd_dte(d8b->Header.DataSetting);
- printf("\t\t");
- acpi_handle_ivrs_ivhd_edte(d8b->ExtendedData);
- } else if (d->Type == ACPI_IVRS_TYPE_EXT_START) {
- d8b = (ACPI_IVRS_DEVICE8B *)db;
- len = sizeof(*d8b);
- d4 = (ACPI_IVRS_DEVICE4 *)(db + sizeof(*d8a));
- len = sizeof(*d8a) + sizeof(*d4);
- printf("\t\tDev Type=%#x Id=%#06x-%#06x",
- d8a->Header.Type, d8a->Header.Id, d4->Header.Id);
- acpi_handle_ivrs_ivhd_dte(d8b->Header.DataSetting);
- acpi_handle_ivrs_ivhd_edte(d8b->ExtendedData);
- } else if (d->Type == ACPI_IVRS_TYPE_SPECIAL) {
- d8c = (ACPI_IVRS_DEVICE8C *)db;
- len = sizeof(*d8c);
- printf("\t\tDev Type=%#x Id=%#06x Handle=%#x "
- "Variety=%d(%s)",
- d8c->Header.Type, d8c->UsedId, d8c->Handle,
- d8c->Variety,
- acpi_handle_ivrs_ivhd_variety(d8c->Variety));
- acpi_handle_ivrs_ivhd_dte(d8c->Header.DataSetting);
- } else if (d->Type == ACPI_IVRS_TYPE_HID) {
- dh = (ACPI_IVRS_DEVICE_HID *)db;
- len = sizeof(*dh) + dh->UidLength;
- printf("\t\tDev Type=%#x Id=%#06x HID=",
- dh->Header.Type, dh->Header.Id);
- acpi_print_string((char *)&dh->AcpiHid,
- sizeof(dh->AcpiHid));
- printf(" CID=");
- acpi_print_string((char *)&dh->AcpiCid,
- sizeof(dh->AcpiCid));
- printf(" UID=");
- switch (dh->UidType) {
- case ACPI_IVRS_UID_NOT_PRESENT:
- default:
- printf("none");
- break;
- case ACPI_IVRS_UID_IS_INTEGER:
- memcpy(&x32, dh + 1, sizeof(x32));
- printf("%#x", x32);
- break;
- case ACPI_IVRS_UID_IS_STRING:
- acpi_print_string((char *)(dh + 1),
- dh->UidLength);
- break;
- }
- acpi_handle_ivrs_ivhd_dte(dh->Header.DataSetting);
- } else {
- printf("\t\tDev Type=%#x Unknown\n", d->Type);
- if (d->Type <= 63)
- len = sizeof(*d4);
- else if (d->Type <= 127)
- len = sizeof(*d8a);
- else {
- printf("Abort, cannot advance iterator.\n");
- return;
- }
- }
- }
-}
-
-static void
-acpi_handle_ivrs_ivhd_10(ACPI_IVRS_HARDWARE1 *addr, bool efrsup)
-{
- acpi_handle_ivrs_ivhd_header(&addr->Header);
- printf("\tCapOffset=%#x Base=%#jx PCISeg=%#x Unit=%#x MSIlog=%d\n",
- addr->CapabilityOffset, (uintmax_t)addr->BaseAddress,
- addr->PciSegmentGroup, (addr->Info & ACPI_IVHD_UNIT_ID_MASK) >> 8,
- addr->Info & ACPI_IVHD_MSI_NUMBER_MASK);
- if (efrsup) {
-#define PRINTFLAG(flag, name) printflag(addr->FeatureReporting, flag, #name)
-#define PRINTFIELD(lbit, hbit, name) \
- printfield(addr->FeatureReporting, lbit, hbit, #name)
- PRINTFIELD(30, 31, HATS);
- PRINTFIELD(28, 29, GATS);
- PRINTFIELD(23, 27, MsiNumPPR);
- PRINTFIELD(17, 22, PNBanks);
- PRINTFIELD(13, 16, PNCounters);
- PRINTFIELD(8, 12, PASmax);
- PRINTFLAG(1 << 7, HESup);
- PRINTFLAG(1 << 6, GASup);
- PRINTFLAG(1 << 5, UASup);
- PRINTFIELD(3, 2, GLXSup);
- PRINTFLAG(1 << 1, NXSup);
- PRINTFLAG(1 << 0, XTSup);
-#undef PRINTFLAG
-#undef PRINTFIELD
- PRINTFLAG_END();
- }
- acpi_handle_ivrs_ivhd_devs((ACPI_IVRS_DE_HEADER *)(addr + 1),
- (char *)addr + addr->Header.Length);
-}
-
-static void
-acpi_handle_ivrs_ivhd_info_11(ACPI_IVRS_HARDWARE2 *addr)
-{
- acpi_handle_ivrs_ivhd_header(&addr->Header);
- printf("\tCapOffset=%#x Base=%#jx PCISeg=%#x Unit=%#x MSIlog=%d\n",
- addr->CapabilityOffset, (uintmax_t)addr->BaseAddress,
- addr->PciSegmentGroup, (addr->Info >> 8) & 0x1f,
- addr->Info & 0x5);
- printf("\tAttr=");
-#define PRINTFIELD(lbit, hbit, name) \
- printfield(addr->Attributes, lbit, hbit, #name)
- PRINTFIELD(23, 27, MsiNumPPR);
- PRINTFIELD(17, 22, PNBanks);
- PRINTFIELD(13, 16, PNCounters);
-#undef PRINTFIELD
- PRINTFLAG_END();
-}
-
-static void
-acpi_handle_ivrs_ivhd_11(ACPI_IVRS_HARDWARE2 *addr)
-{
- acpi_handle_ivrs_ivhd_info_11(addr);
- printf("\tEFRreg=%#018jx\n", (uintmax_t)addr->EfrRegisterImage);
- acpi_handle_ivrs_ivhd_devs((ACPI_IVRS_DE_HEADER *)(addr + 1),
- (char *)addr + addr->Header.Length);
-}
-
-static void
-acpi_handle_ivrs_ivhd_40(ACPI_IVRS_HARDWARE2 *addr)
-{
- acpi_handle_ivrs_ivhd_info_11(addr);
- printf("\tEFRreg=%#018jx EFR2reg=%#018jx\n",
- (uintmax_t)addr->EfrRegisterImage, (uintmax_t)addr->Reserved);
- acpi_handle_ivrs_ivhd_devs((ACPI_IVRS_DE_HEADER *)(addr + 1),
- (char *)addr + addr->Header.Length);
-}
-
-static const char *
-acpi_handle_ivrs_ivmd_type(ACPI_IVRS_MEMORY *addr)
-{
- switch (addr->Header.Type) {
- case ACPI_IVRS_TYPE_MEMORY1:
- return ("ALL");
- case ACPI_IVRS_TYPE_MEMORY2:
- return ("specified");
- case ACPI_IVRS_TYPE_MEMORY3:
- return ("range");
- default:
- return ("unknown");
- }
-}
-
-static void
-acpi_handle_ivrs_ivmd(ACPI_IVRS_MEMORY *addr)
-{
- printf("\tMem Type=%#x(%s) ",
- addr->Header.Type, acpi_handle_ivrs_ivmd_type(addr));
- switch (addr->Header.Type) {
- case ACPI_IVRS_TYPE_MEMORY2:
- printf("Id=%#06x PCISeg=%#x ", addr->Header.DeviceId,
- *(UINT16 *)&addr->Reserved);
- break;
- case ACPI_IVRS_TYPE_MEMORY3:
- printf("Id=%#06x-%#06x PCISeg=%#x", addr->Header.DeviceId,
- addr->AuxData, *(UINT16 *)&addr->Reserved);
- break;
- }
- printf("Start=%#18jx Length=%#jx Flags=",
- (uintmax_t)addr->StartAddress, (uintmax_t)addr->MemoryLength);
-#define PRINTFLAG(flag, name) printflag(addr->Header.Flags, flag, #name)
- PRINTFLAG(ACPI_IVMD_EXCLUSION_RANGE, ExclusionRange);
- PRINTFLAG(ACPI_IVMD_WRITE, IW);
- PRINTFLAG(ACPI_IVMD_READ, IR);
- PRINTFLAG(ACPI_IVMD_UNITY, Unity);
-#undef PRINTFLAG
- PRINTFLAG_END();
-}
-
-static int
-acpi_handle_ivrs_blocks(void *addr, int remaining, bool efrsup)
-{
- ACPI_IVRS_HEADER *hdr = addr;
-
- if (remaining < (int)sizeof(ACPI_IVRS_HEADER))
- return (-1);
-
- if (remaining < hdr->Length)
- return (-1);
-
- switch (hdr->Type) {
- case ACPI_IVRS_TYPE_HARDWARE1:
- acpi_handle_ivrs_ivhd_10(addr, efrsup);
- break;
- case ACPI_IVRS_TYPE_HARDWARE2:
- if (!efrsup)
- printf("\t!! Found IVHD block 0x11 but !EFRsup\n");
- acpi_handle_ivrs_ivhd_11(addr);
- break;
- case ACPI_IVRS_TYPE_HARDWARE3:
- if (!efrsup)
- printf("\t!! Found IVHD block 0x40 but !EFRsup\n");
- acpi_handle_ivrs_ivhd_40(addr);
- break;
- case ACPI_IVRS_TYPE_MEMORY1:
- case ACPI_IVRS_TYPE_MEMORY2:
- case ACPI_IVRS_TYPE_MEMORY3:
- acpi_handle_ivrs_ivmd(addr);
- break;
- default:
- printf("\n");
- printf("\tType=%d\n", hdr->Type);
- printf("\tLength=%d\n", hdr->Length);
- break;
- }
- return (hdr->Length);
-}
-
-#define ACPI_IVRS_DMAREMAP 0x00000002
-#define ACPI_IVRS_EFRSUP 0x00000001
-#define ACPI_IVRS_GVA_SIZE 0x000000e0
-
-static void
-acpi_handle_ivrs(ACPI_TABLE_HEADER *sdp)
-{
- ACPI_TABLE_IVRS *ivrs;
- char *cp;
- int remaining, consumed;
- bool efrsup;
-
- printf(BEGIN_COMMENT);
- acpi_print_sdt(sdp);
- ivrs = (ACPI_TABLE_IVRS *)sdp;
- efrsup = (ivrs->Info & ACPI_IVRS_EFRSUP) != 0;
- printf("\tVAsize=%d PAsize=%d GVAsize=%d\n",
- (ivrs->Info & ACPI_IVRS_VIRTUAL_SIZE) >> 15,
- (ivrs->Info & ACPI_IVRS_PHYSICAL_SIZE) >> 8,
- (ivrs->Info & ACPI_IVRS_GVA_SIZE) >> 5);
- printf("\tATS_resp_res=%d DMA_preboot_remap=%d EFRsup=%d\n",
- (ivrs->Info & ACPI_IVRS_ATS_RESERVED) != 0,
- (ivrs->Info & ACPI_IVRS_DMAREMAP) != 0, efrsup);
-
- remaining = sdp->Length - sizeof(ACPI_TABLE_IVRS);
- while (remaining > 0) {
- cp = (char *)sdp + sdp->Length - remaining;
- consumed = acpi_handle_ivrs_blocks(cp, remaining, efrsup);
- if (consumed <= 0)
- break;
- else
- remaining -= consumed;
- }
-
- printf(END_COMMENT);
-}
-
static void
acpi_print_srat_memory(ACPI_SRAT_MEM_AFFINITY *mp)
{
@@ -2460,8 +2074,6 @@ acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp)
acpi_handle_tcpa(sdp);
else if (!memcmp(sdp->Signature, ACPI_SIG_DMAR, 4))
acpi_handle_dmar(sdp);
- else if (!memcmp(sdp->Signature, ACPI_SIG_IVRS, 4))
- acpi_handle_ivrs(sdp);
else if (!memcmp(sdp->Signature, ACPI_SIG_NFIT, 4))
acpi_handle_nfit(sdp);
else if (!memcmp(sdp->Signature, ACPI_SIG_WDDT, 4))