summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/acpi/acpidump/acpi.c24
-rw-r--r--usr.sbin/acpi/acpidump/acpidump.h12
2 files changed, 36 insertions, 0 deletions
diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c
index 6b1b2a9..6241dfd 100644
--- a/usr.sbin/acpi/acpidump/acpi.c
+++ b/usr.sbin/acpi/acpidump/acpi.c
@@ -377,6 +377,28 @@ acpi_handle_ecdt(struct ACPIsdt *sdp)
}
static void
+acpi_handle_mcfg(struct ACPIsdt *sdp)
+{
+ struct MCFGbody *mcfg;
+ u_int i, e;
+
+ printf(BEGIN_COMMENT);
+ acpi_print_sdt(sdp);
+ mcfg = (struct MCFGbody *) sdp->body;
+
+ e = (sdp->len - ((caddr_t)&mcfg->s[0] - (caddr_t)sdp)) /
+ sizeof(*mcfg->s);
+ for (i = 0; i < e; i++, mcfg++) {
+ printf("\n");
+ printf("\tBase Address= 0x%016jx\n", mcfg->s[i].baseaddr);
+ printf("\tSegment Group= 0x%04x\n", mcfg->s[i].seg_grp);
+ printf("\tStart Bus= %d\n", mcfg->s[i].start);
+ printf("\tEnd Bus= %d\n", mcfg->s[i].end);
+ }
+ printf(END_COMMENT);
+}
+
+static void
acpi_print_sdt(struct ACPIsdt *sdp)
{
printf(" ");
@@ -683,6 +705,8 @@ acpi_handle_rsdt(struct ACPIsdt *rsdp)
acpi_handle_hpet(sdp);
else if (!memcmp(sdp->signature, "ECDT", 4))
acpi_handle_ecdt(sdp);
+ else if (!memcmp(sdp->signature, "MCFG", 4))
+ acpi_handle_mcfg(sdp);
else {
printf(BEGIN_COMMENT);
acpi_print_sdt(sdp);
diff --git a/usr.sbin/acpi/acpidump/acpidump.h b/usr.sbin/acpi/acpidump/acpidump.h
index ca56398..0b7712a 100644
--- a/usr.sbin/acpi/acpidump/acpidump.h
+++ b/usr.sbin/acpi/acpidump/acpidump.h
@@ -293,6 +293,18 @@ struct ECDTbody {
u_char ec_id[1]; /* Variable length name string */
} __packed;
+/* Memory Mapped PCI config space base allocation structure */
+struct MCFGbody {
+ uint8_t rsvd[8];
+ struct {
+ uint64_t baseaddr; /* Base Address */
+ uint16_t seg_grp; /* Segment group number */
+ uint8_t start; /* Starting bus number */
+ uint8_t end; /* Ending bus number */
+ uint8_t rsvd[4]; /* Reserved */
+ } s[];
+} __packed;
+
/*
* Addresses to scan on ia32 for the RSD PTR. According to section 5.2.2
* of the ACPI spec, we only consider two regions for the base address:
OpenPOWER on IntegriCloud