1167802Sjkim/****************************************************************************** 2167802Sjkim * 3167802Sjkim * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code 4167802Sjkim * 5167802Sjkim *****************************************************************************/ 6167802Sjkim 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9167802Sjkim * All rights reserved. 10167802Sjkim * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25167802Sjkim * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29167802Sjkim * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43167802Sjkim 44193529Sjkim#include <contrib/dev/acpica/include/acpi.h> 45193529Sjkim#include <contrib/dev/acpica/include/accommon.h> 46193529Sjkim#include <contrib/dev/acpica/include/acdisasm.h> 47193529Sjkim#include <contrib/dev/acpica/include/actables.h> 48167802Sjkim 49167802Sjkim/* This module used for application-level code only */ 50167802Sjkim 51167802Sjkim#define _COMPONENT ACPI_CA_DISASSEMBLER 52167802Sjkim ACPI_MODULE_NAME ("dmtbdump") 53167802Sjkim 54167802Sjkim 55239340Sjkim/* Local prototypes */ 56239340Sjkim 57218590Sjkimstatic void 58218590SjkimAcpiDmValidateFadtLength ( 59218590Sjkim UINT32 Revision, 60218590Sjkim UINT32 Length); 61218590Sjkim 62218590Sjkim 63167802Sjkim/******************************************************************************* 64167802Sjkim * 65239340Sjkim * FUNCTION: AcpiDmDumpBuffer 66239340Sjkim * 67239340Sjkim * PARAMETERS: Table - ACPI Table or subtable 68239340Sjkim * BufferOffset - Offset of buffer from Table above 69239340Sjkim * Length - Length of the buffer 70239340Sjkim * AbsoluteOffset - Offset of buffer in the main ACPI table 71239340Sjkim * Header - Name of the buffer field (printed on the 72239340Sjkim * first line only.) 73239340Sjkim * 74239340Sjkim * RETURN: None 75239340Sjkim * 76239340Sjkim * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the 77239340Sjkim * disassembler output format.) 78239340Sjkim * 79239340Sjkim ******************************************************************************/ 80239340Sjkim 81281687Sjkimvoid 82239340SjkimAcpiDmDumpBuffer ( 83239340Sjkim void *Table, 84239340Sjkim UINT32 BufferOffset, 85239340Sjkim UINT32 Length, 86239340Sjkim UINT32 AbsoluteOffset, 87284460Sjkim char *Header) 88239340Sjkim{ 89239340Sjkim UINT8 *Buffer; 90239340Sjkim UINT32 i; 91239340Sjkim 92239340Sjkim 93239340Sjkim if (!Length) 94239340Sjkim { 95239340Sjkim return; 96239340Sjkim } 97239340Sjkim 98239340Sjkim Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset; 99239340Sjkim i = 0; 100239340Sjkim 101239340Sjkim while (i < Length) 102239340Sjkim { 103239340Sjkim if (!(i % 16)) 104239340Sjkim { 105284460Sjkim /* Insert a backslash - line continuation character */ 106284460Sjkim 107284460Sjkim if (Length > 16) 108281687Sjkim { 109281687Sjkim AcpiOsPrintf ("\\\n "); 110281687Sjkim } 111239340Sjkim } 112239340Sjkim 113239340Sjkim AcpiOsPrintf ("%.02X ", *Buffer); 114239340Sjkim i++; 115239340Sjkim Buffer++; 116239340Sjkim AbsoluteOffset++; 117239340Sjkim } 118239340Sjkim 119239340Sjkim AcpiOsPrintf ("\n"); 120239340Sjkim} 121239340Sjkim 122239340Sjkim 123239340Sjkim/******************************************************************************* 124239340Sjkim * 125284460Sjkim * FUNCTION: AcpiDmDumpUnicode 126284460Sjkim * 127284460Sjkim * PARAMETERS: Table - ACPI Table or subtable 128284460Sjkim * BufferOffset - Offset of buffer from Table above 129284460Sjkim * ByteLength - Length of the buffer 130284460Sjkim * 131284460Sjkim * RETURN: None 132284460Sjkim * 133284460Sjkim * DESCRIPTION: Validate and dump the contents of a buffer that contains 134284460Sjkim * unicode data. The output is a standard ASCII string. If it 135284460Sjkim * appears that the data is not unicode, the buffer is dumped 136284460Sjkim * as hex characters. 137284460Sjkim * 138284460Sjkim ******************************************************************************/ 139284460Sjkim 140284460Sjkimvoid 141284460SjkimAcpiDmDumpUnicode ( 142284460Sjkim void *Table, 143284460Sjkim UINT32 BufferOffset, 144284460Sjkim UINT32 ByteLength) 145284460Sjkim{ 146284460Sjkim UINT8 *Buffer; 147284460Sjkim UINT32 Length; 148284460Sjkim UINT32 i; 149284460Sjkim 150284460Sjkim 151284460Sjkim Buffer = ((UINT8 *) Table) + BufferOffset; 152284460Sjkim Length = ByteLength - 2; /* Last two bytes are the null terminator */ 153284460Sjkim 154284460Sjkim /* Ensure all low bytes are entirely printable ASCII */ 155284460Sjkim 156284460Sjkim for (i = 0; i < Length; i += 2) 157284460Sjkim { 158306536Sjkim if (!isprint (Buffer[i])) 159284460Sjkim { 160284460Sjkim goto DumpRawBuffer; 161284460Sjkim } 162284460Sjkim } 163284460Sjkim 164284460Sjkim /* Ensure all high bytes are zero */ 165284460Sjkim 166284460Sjkim for (i = 1; i < Length; i += 2) 167284460Sjkim { 168284460Sjkim if (Buffer[i]) 169284460Sjkim { 170284460Sjkim goto DumpRawBuffer; 171284460Sjkim } 172284460Sjkim } 173284460Sjkim 174284460Sjkim /* Dump the buffer as a normal string */ 175284460Sjkim 176284460Sjkim AcpiOsPrintf ("\""); 177284460Sjkim for (i = 0; i < Length; i += 2) 178284460Sjkim { 179284460Sjkim AcpiOsPrintf ("%c", Buffer[i]); 180284460Sjkim } 181306536Sjkim 182284460Sjkim AcpiOsPrintf ("\"\n"); 183284460Sjkim return; 184284460Sjkim 185284460SjkimDumpRawBuffer: 186284460Sjkim AcpiDmDumpBuffer (Table, BufferOffset, ByteLength, 187284460Sjkim BufferOffset, NULL); 188284460Sjkim AcpiOsPrintf ("\n"); 189284460Sjkim} 190284460Sjkim 191284460Sjkim 192284460Sjkim/******************************************************************************* 193284460Sjkim * 194167802Sjkim * FUNCTION: AcpiDmDumpRsdp 195167802Sjkim * 196167802Sjkim * PARAMETERS: Table - A RSDP 197167802Sjkim * 198209746Sjkim * RETURN: Length of the table (there is not always a length field, 199209746Sjkim * use revision or length if available (ACPI 2.0+)) 200167802Sjkim * 201167802Sjkim * DESCRIPTION: Format the contents of a RSDP 202167802Sjkim * 203167802Sjkim ******************************************************************************/ 204167802Sjkim 205167802SjkimUINT32 206167802SjkimAcpiDmDumpRsdp ( 207167802Sjkim ACPI_TABLE_HEADER *Table) 208167802Sjkim{ 209209746Sjkim ACPI_TABLE_RSDP *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table); 210209746Sjkim UINT32 Length = sizeof (ACPI_RSDP_COMMON); 211209746Sjkim UINT8 Checksum; 212306536Sjkim ACPI_STATUS Status; 213167802Sjkim 214167802Sjkim 215167802Sjkim /* Dump the common ACPI 1.0 portion */ 216167802Sjkim 217306536Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1); 218306536Sjkim if (ACPI_FAILURE (Status)) 219306536Sjkim { 220306536Sjkim return (Length); 221306536Sjkim } 222167802Sjkim 223209746Sjkim /* Validate the first checksum */ 224167802Sjkim 225209746Sjkim Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON), 226306536Sjkim Rsdp->Checksum); 227209746Sjkim if (Checksum != Rsdp->Checksum) 228167802Sjkim { 229209746Sjkim AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n", 230209746Sjkim Checksum); 231209746Sjkim } 232209746Sjkim 233209746Sjkim /* The RSDP for ACPI 2.0+ contains more data and has a Length field */ 234209746Sjkim 235209746Sjkim if (Rsdp->Revision > 0) 236209746Sjkim { 237209746Sjkim Length = Rsdp->Length; 238306536Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2); 239306536Sjkim if (ACPI_FAILURE (Status)) 240306536Sjkim { 241306536Sjkim return (Length); 242306536Sjkim } 243209746Sjkim 244209746Sjkim /* Validate the extended checksum over entire RSDP */ 245209746Sjkim 246209746Sjkim Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP), 247306536Sjkim Rsdp->ExtendedChecksum); 248209746Sjkim if (Checksum != Rsdp->ExtendedChecksum) 249209746Sjkim { 250209746Sjkim AcpiOsPrintf ( 251209746Sjkim "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n", 252209746Sjkim Checksum); 253209746Sjkim } 254167802Sjkim } 255167802Sjkim 256167802Sjkim return (Length); 257167802Sjkim} 258167802Sjkim 259167802Sjkim 260167802Sjkim/******************************************************************************* 261167802Sjkim * 262167802Sjkim * FUNCTION: AcpiDmDumpRsdt 263167802Sjkim * 264167802Sjkim * PARAMETERS: Table - A RSDT 265167802Sjkim * 266167802Sjkim * RETURN: None 267167802Sjkim * 268167802Sjkim * DESCRIPTION: Format the contents of a RSDT 269167802Sjkim * 270167802Sjkim ******************************************************************************/ 271167802Sjkim 272167802Sjkimvoid 273167802SjkimAcpiDmDumpRsdt ( 274167802Sjkim ACPI_TABLE_HEADER *Table) 275167802Sjkim{ 276167802Sjkim UINT32 *Array; 277167802Sjkim UINT32 Entries; 278167802Sjkim UINT32 Offset; 279167802Sjkim UINT32 i; 280167802Sjkim 281167802Sjkim 282167802Sjkim /* Point to start of table pointer array */ 283167802Sjkim 284167802Sjkim Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry; 285167802Sjkim Offset = sizeof (ACPI_TABLE_HEADER); 286167802Sjkim 287167802Sjkim /* RSDT uses 32-bit pointers */ 288167802Sjkim 289167802Sjkim Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); 290167802Sjkim 291167802Sjkim for (i = 0; i < Entries; i++) 292167802Sjkim { 293167802Sjkim AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i); 294167802Sjkim AcpiOsPrintf ("%8.8X\n", Array[i]); 295167802Sjkim Offset += sizeof (UINT32); 296167802Sjkim } 297167802Sjkim} 298167802Sjkim 299167802Sjkim 300167802Sjkim/******************************************************************************* 301167802Sjkim * 302167802Sjkim * FUNCTION: AcpiDmDumpXsdt 303167802Sjkim * 304167802Sjkim * PARAMETERS: Table - A XSDT 305167802Sjkim * 306167802Sjkim * RETURN: None 307167802Sjkim * 308167802Sjkim * DESCRIPTION: Format the contents of a XSDT 309167802Sjkim * 310167802Sjkim ******************************************************************************/ 311167802Sjkim 312167802Sjkimvoid 313167802SjkimAcpiDmDumpXsdt ( 314167802Sjkim ACPI_TABLE_HEADER *Table) 315167802Sjkim{ 316167802Sjkim UINT64 *Array; 317167802Sjkim UINT32 Entries; 318167802Sjkim UINT32 Offset; 319167802Sjkim UINT32 i; 320167802Sjkim 321167802Sjkim 322167802Sjkim /* Point to start of table pointer array */ 323167802Sjkim 324167802Sjkim Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry; 325167802Sjkim Offset = sizeof (ACPI_TABLE_HEADER); 326167802Sjkim 327167802Sjkim /* XSDT uses 64-bit pointers */ 328167802Sjkim 329167802Sjkim Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); 330167802Sjkim 331167802Sjkim for (i = 0; i < Entries; i++) 332167802Sjkim { 333167802Sjkim AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); 334167802Sjkim AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i])); 335167802Sjkim Offset += sizeof (UINT64); 336167802Sjkim } 337167802Sjkim} 338167802Sjkim 339167802Sjkim 340167802Sjkim/******************************************************************************* 341167802Sjkim * 342167802Sjkim * FUNCTION: AcpiDmDumpFadt 343167802Sjkim * 344167802Sjkim * PARAMETERS: Table - A FADT 345167802Sjkim * 346167802Sjkim * RETURN: None 347167802Sjkim * 348167802Sjkim * DESCRIPTION: Format the contents of a FADT 349167802Sjkim * 350218590Sjkim * NOTE: We cannot depend on the FADT version to indicate the actual 351218590Sjkim * contents of the FADT because of BIOS bugs. The table length 352218590Sjkim * is the only reliable indicator. 353218590Sjkim * 354167802Sjkim ******************************************************************************/ 355167802Sjkim 356167802Sjkimvoid 357167802SjkimAcpiDmDumpFadt ( 358167802Sjkim ACPI_TABLE_HEADER *Table) 359167802Sjkim{ 360306536Sjkim ACPI_STATUS Status; 361167802Sjkim 362306536Sjkim 363218590Sjkim /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */ 364167802Sjkim 365306536Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, 366306536Sjkim AcpiDmTableInfoFadt1); 367306536Sjkim if (ACPI_FAILURE (Status)) 368306536Sjkim { 369306536Sjkim return; 370306536Sjkim } 371167802Sjkim 372218590Sjkim /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */ 373167802Sjkim 374218590Sjkim if ((Table->Length > ACPI_FADT_V1_SIZE) && 375218590Sjkim (Table->Length <= ACPI_FADT_V2_SIZE)) 376167802Sjkim { 377306536Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, 378306536Sjkim AcpiDmTableInfoFadt2); 379306536Sjkim if (ACPI_FAILURE (Status)) 380306536Sjkim { 381306536Sjkim return; 382306536Sjkim } 383167802Sjkim } 384167802Sjkim 385228110Sjkim /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */ 386193529Sjkim 387218590Sjkim else if (Table->Length > ACPI_FADT_V2_SIZE) 388193529Sjkim { 389306536Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, 390306536Sjkim AcpiDmTableInfoFadt3); 391306536Sjkim if (ACPI_FAILURE (Status)) 392306536Sjkim { 393306536Sjkim return; 394306536Sjkim } 395228110Sjkim 396228110Sjkim /* Check for FADT revision 5 fields and up (ACPI 5.0+) */ 397228110Sjkim 398228110Sjkim if (Table->Length > ACPI_FADT_V3_SIZE) 399228110Sjkim { 400306536Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, 401306536Sjkim AcpiDmTableInfoFadt5); 402306536Sjkim if (ACPI_FAILURE (Status)) 403306536Sjkim { 404306536Sjkim return; 405306536Sjkim } 406228110Sjkim } 407284460Sjkim 408284460Sjkim /* Check for FADT revision 6 fields and up (ACPI 6.0+) */ 409284460Sjkim 410284460Sjkim if (Table->Length > ACPI_FADT_V3_SIZE) 411284460Sjkim { 412306536Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, 413306536Sjkim AcpiDmTableInfoFadt6); 414306536Sjkim if (ACPI_FAILURE (Status)) 415306536Sjkim { 416306536Sjkim return; 417306536Sjkim } 418284460Sjkim } 419193529Sjkim } 420193529Sjkim 421167802Sjkim /* Validate various fields in the FADT, including length */ 422167802Sjkim 423167802Sjkim AcpiTbCreateLocalFadt (Table, Table->Length); 424218590Sjkim 425218590Sjkim /* Validate FADT length against the revision */ 426218590Sjkim 427218590Sjkim AcpiDmValidateFadtLength (Table->Revision, Table->Length); 428167802Sjkim} 429167802Sjkim 430167802Sjkim 431167802Sjkim/******************************************************************************* 432167802Sjkim * 433218590Sjkim * FUNCTION: AcpiDmValidateFadtLength 434218590Sjkim * 435218590Sjkim * PARAMETERS: Revision - FADT revision (Header->Revision) 436218590Sjkim * Length - FADT length (Header->Length 437218590Sjkim * 438218590Sjkim * RETURN: None 439218590Sjkim * 440218590Sjkim * DESCRIPTION: Check the FADT revision against the expected table length for 441218590Sjkim * that revision. Issue a warning if the length is not what was 442218590Sjkim * expected. This seems to be such a common BIOS bug that the 443218590Sjkim * FADT revision has been rendered virtually meaningless. 444218590Sjkim * 445218590Sjkim ******************************************************************************/ 446218590Sjkim 447218590Sjkimstatic void 448218590SjkimAcpiDmValidateFadtLength ( 449218590Sjkim UINT32 Revision, 450218590Sjkim UINT32 Length) 451218590Sjkim{ 452218590Sjkim UINT32 ExpectedLength; 453218590Sjkim 454218590Sjkim 455218590Sjkim switch (Revision) 456218590Sjkim { 457218590Sjkim case 0: 458250838Sjkim 459218590Sjkim AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n"); 460218590Sjkim return; 461218590Sjkim 462218590Sjkim case 1: 463250838Sjkim 464218590Sjkim ExpectedLength = ACPI_FADT_V1_SIZE; 465218590Sjkim break; 466218590Sjkim 467218590Sjkim case 2: 468250838Sjkim 469218590Sjkim ExpectedLength = ACPI_FADT_V2_SIZE; 470218590Sjkim break; 471218590Sjkim 472218590Sjkim case 3: 473218590Sjkim case 4: 474250838Sjkim 475218590Sjkim ExpectedLength = ACPI_FADT_V3_SIZE; 476218590Sjkim break; 477218590Sjkim 478228110Sjkim case 5: 479250838Sjkim 480228110Sjkim ExpectedLength = ACPI_FADT_V5_SIZE; 481228110Sjkim break; 482228110Sjkim 483218590Sjkim default: 484250838Sjkim 485218590Sjkim return; 486218590Sjkim } 487218590Sjkim 488218590Sjkim if (Length == ExpectedLength) 489218590Sjkim { 490218590Sjkim return; 491218590Sjkim } 492218590Sjkim 493218590Sjkim AcpiOsPrintf ( 494306536Sjkim "\n// ACPI Warning: FADT revision %X does not match length: " 495306536Sjkim "found %X expected %X\n", 496218590Sjkim Revision, Length, ExpectedLength); 497218590Sjkim} 498218590Sjkim 499218590Sjkim 500218590Sjkim/******************************************************************************* 501218590Sjkim * 502167802Sjkim * FUNCTION: AcpiDmDumpAsf 503167802Sjkim * 504167802Sjkim * PARAMETERS: Table - A ASF table 505167802Sjkim * 506167802Sjkim * RETURN: None 507167802Sjkim * 508167802Sjkim * DESCRIPTION: Format the contents of a ASF table 509167802Sjkim * 510167802Sjkim ******************************************************************************/ 511167802Sjkim 512167802Sjkimvoid 513167802SjkimAcpiDmDumpAsf ( 514167802Sjkim ACPI_TABLE_HEADER *Table) 515167802Sjkim{ 516193529Sjkim ACPI_STATUS Status; 517167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_HEADER); 518167802Sjkim ACPI_ASF_INFO *SubTable; 519167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 520167802Sjkim ACPI_DMTABLE_INFO *DataInfoTable = NULL; 521167802Sjkim UINT8 *DataTable = NULL; 522193529Sjkim UINT32 DataCount = 0; 523193529Sjkim UINT32 DataLength = 0; 524193529Sjkim UINT32 DataOffset = 0; 525193529Sjkim UINT32 i; 526197104Sjkim UINT8 Type; 527167802Sjkim 528167802Sjkim 529281075Sdim /* No main table, only subtables */ 530167802Sjkim 531167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); 532167802Sjkim while (Offset < Table->Length) 533167802Sjkim { 534281075Sdim /* Common subtable header */ 535167802Sjkim 536193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 537306536Sjkim SubTable->Header.Length, AcpiDmTableInfoAsfHdr); 538193529Sjkim if (ACPI_FAILURE (Status)) 539193529Sjkim { 540193529Sjkim return; 541193529Sjkim } 542167802Sjkim 543197104Sjkim /* The actual type is the lower 7 bits of Type */ 544197104Sjkim 545197104Sjkim Type = (UINT8) (SubTable->Header.Type & 0x7F); 546197104Sjkim 547197104Sjkim switch (Type) 548167802Sjkim { 549167802Sjkim case ACPI_ASF_TYPE_INFO: 550250838Sjkim 551167802Sjkim InfoTable = AcpiDmTableInfoAsf0; 552167802Sjkim break; 553167802Sjkim 554167802Sjkim case ACPI_ASF_TYPE_ALERT: 555250838Sjkim 556167802Sjkim InfoTable = AcpiDmTableInfoAsf1; 557167802Sjkim DataInfoTable = AcpiDmTableInfoAsf1a; 558167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT)); 559197104Sjkim DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts; 560197104Sjkim DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength; 561167802Sjkim DataOffset = Offset + sizeof (ACPI_ASF_ALERT); 562167802Sjkim break; 563167802Sjkim 564167802Sjkim case ACPI_ASF_TYPE_CONTROL: 565250838Sjkim 566167802Sjkim InfoTable = AcpiDmTableInfoAsf2; 567167802Sjkim DataInfoTable = AcpiDmTableInfoAsf2a; 568167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE)); 569197104Sjkim DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls; 570197104Sjkim DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength; 571167802Sjkim DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); 572167802Sjkim break; 573167802Sjkim 574167802Sjkim case ACPI_ASF_TYPE_BOOT: 575250838Sjkim 576167802Sjkim InfoTable = AcpiDmTableInfoAsf3; 577167802Sjkim break; 578167802Sjkim 579167802Sjkim case ACPI_ASF_TYPE_ADDRESS: 580250838Sjkim 581167802Sjkim InfoTable = AcpiDmTableInfoAsf4; 582167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS)); 583197104Sjkim DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices; 584167802Sjkim DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); 585167802Sjkim break; 586167802Sjkim 587167802Sjkim default: 588250838Sjkim 589306536Sjkim AcpiOsPrintf ("\n**** Unknown ASF subtable type 0x%X\n", 590306536Sjkim SubTable->Header.Type); 591167802Sjkim return; 592167802Sjkim } 593167802Sjkim 594193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 595306536Sjkim SubTable->Header.Length, InfoTable); 596193529Sjkim if (ACPI_FAILURE (Status)) 597193529Sjkim { 598193529Sjkim return; 599193529Sjkim } 600167802Sjkim 601167802Sjkim /* Dump variable-length extra data */ 602167802Sjkim 603197104Sjkim switch (Type) 604167802Sjkim { 605167802Sjkim case ACPI_ASF_TYPE_ALERT: 606167802Sjkim case ACPI_ASF_TYPE_CONTROL: 607167802Sjkim 608167802Sjkim for (i = 0; i < DataCount; i++) 609167802Sjkim { 610167802Sjkim AcpiOsPrintf ("\n"); 611193529Sjkim Status = AcpiDmDumpTable (Table->Length, DataOffset, 612306536Sjkim DataTable, DataLength, DataInfoTable); 613193529Sjkim if (ACPI_FAILURE (Status)) 614193529Sjkim { 615193529Sjkim return; 616193529Sjkim } 617167802Sjkim 618167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); 619167802Sjkim DataOffset += DataLength; 620167802Sjkim } 621167802Sjkim break; 622167802Sjkim 623167802Sjkim case ACPI_ASF_TYPE_ADDRESS: 624167802Sjkim 625167802Sjkim for (i = 0; i < DataLength; i++) 626167802Sjkim { 627167802Sjkim if (!(i % 16)) 628167802Sjkim { 629167802Sjkim AcpiDmLineHeader (DataOffset, 1, "Addresses"); 630167802Sjkim } 631167802Sjkim 632167802Sjkim AcpiOsPrintf ("%2.2X ", *DataTable); 633167802Sjkim DataTable++; 634167802Sjkim DataOffset++; 635306536Sjkim 636193529Sjkim if (DataOffset > Table->Length) 637193529Sjkim { 638306536Sjkim AcpiOsPrintf ( 639306536Sjkim "**** ACPI table terminates in the middle of a " 640306536Sjkim "data structure! (ASF! table)\n"); 641193529Sjkim return; 642193529Sjkim } 643167802Sjkim } 644167802Sjkim 645167802Sjkim AcpiOsPrintf ("\n"); 646167802Sjkim break; 647193529Sjkim 648193529Sjkim default: 649250838Sjkim 650193529Sjkim break; 651167802Sjkim } 652167802Sjkim 653167802Sjkim AcpiOsPrintf ("\n"); 654167802Sjkim 655281075Sdim /* Point to next subtable */ 656167802Sjkim 657193529Sjkim if (!SubTable->Header.Length) 658193529Sjkim { 659193529Sjkim AcpiOsPrintf ("Invalid zero subtable header length\n"); 660193529Sjkim return; 661193529Sjkim } 662193529Sjkim 663167802Sjkim Offset += SubTable->Header.Length; 664306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, 665306536Sjkim SubTable->Header.Length); 666167802Sjkim } 667167802Sjkim} 668167802Sjkim 669167802Sjkim 670167802Sjkim/******************************************************************************* 671167802Sjkim * 672167802Sjkim * FUNCTION: AcpiDmDumpCpep 673167802Sjkim * 674167802Sjkim * PARAMETERS: Table - A CPEP table 675167802Sjkim * 676167802Sjkim * RETURN: None 677167802Sjkim * 678167802Sjkim * DESCRIPTION: Format the contents of a CPEP. This table type consists 679167802Sjkim * of an open-ended number of subtables. 680167802Sjkim * 681167802Sjkim ******************************************************************************/ 682167802Sjkim 683167802Sjkimvoid 684167802SjkimAcpiDmDumpCpep ( 685167802Sjkim ACPI_TABLE_HEADER *Table) 686167802Sjkim{ 687193529Sjkim ACPI_STATUS Status; 688167802Sjkim ACPI_CPEP_POLLING *SubTable; 689167802Sjkim UINT32 Length = Table->Length; 690167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_CPEP); 691167802Sjkim 692167802Sjkim 693167802Sjkim /* Main table */ 694167802Sjkim 695193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); 696193529Sjkim if (ACPI_FAILURE (Status)) 697193529Sjkim { 698193529Sjkim return; 699193529Sjkim } 700167802Sjkim 701281075Sdim /* Subtables */ 702167802Sjkim 703167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); 704167802Sjkim while (Offset < Table->Length) 705167802Sjkim { 706167802Sjkim AcpiOsPrintf ("\n"); 707193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 708306536Sjkim SubTable->Header.Length, AcpiDmTableInfoCpep0); 709193529Sjkim if (ACPI_FAILURE (Status)) 710193529Sjkim { 711193529Sjkim return; 712193529Sjkim } 713167802Sjkim 714281075Sdim /* Point to next subtable */ 715167802Sjkim 716197104Sjkim Offset += SubTable->Header.Length; 717197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable, 718306536Sjkim SubTable->Header.Length); 719167802Sjkim } 720167802Sjkim} 721167802Sjkim 722167802Sjkim 723167802Sjkim/******************************************************************************* 724167802Sjkim * 725239340Sjkim * FUNCTION: AcpiDmDumpCsrt 726239340Sjkim * 727239340Sjkim * PARAMETERS: Table - A CSRT table 728239340Sjkim * 729239340Sjkim * RETURN: None 730239340Sjkim * 731239340Sjkim * DESCRIPTION: Format the contents of a CSRT. This table type consists 732239340Sjkim * of an open-ended number of subtables. 733239340Sjkim * 734239340Sjkim ******************************************************************************/ 735239340Sjkim 736239340Sjkimvoid 737239340SjkimAcpiDmDumpCsrt ( 738239340Sjkim ACPI_TABLE_HEADER *Table) 739239340Sjkim{ 740239340Sjkim ACPI_STATUS Status; 741239340Sjkim ACPI_CSRT_GROUP *SubTable; 742245582Sjkim ACPI_CSRT_SHARED_INFO *SharedInfoTable; 743239340Sjkim ACPI_CSRT_DESCRIPTOR *SubSubTable; 744239340Sjkim UINT32 Length = Table->Length; 745239340Sjkim UINT32 Offset = sizeof (ACPI_TABLE_CSRT); 746239340Sjkim UINT32 SubOffset; 747239340Sjkim UINT32 SubSubOffset; 748239340Sjkim UINT32 InfoLength; 749239340Sjkim 750239340Sjkim 751239340Sjkim /* The main table only contains the ACPI header, thus already handled */ 752239340Sjkim 753281075Sdim /* Subtables (Resource Groups) */ 754239340Sjkim 755239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); 756239340Sjkim while (Offset < Table->Length) 757239340Sjkim { 758245582Sjkim /* Resource group subtable */ 759245582Sjkim 760239340Sjkim AcpiOsPrintf ("\n"); 761239340Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 762306536Sjkim SubTable->Length, AcpiDmTableInfoCsrt0); 763239340Sjkim if (ACPI_FAILURE (Status)) 764239340Sjkim { 765239340Sjkim return; 766239340Sjkim } 767239340Sjkim 768245582Sjkim /* Shared info subtable (One per resource group) */ 769245582Sjkim 770239340Sjkim SubOffset = sizeof (ACPI_CSRT_GROUP); 771245582Sjkim SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, 772245582Sjkim Offset + SubOffset); 773239340Sjkim 774245582Sjkim AcpiOsPrintf ("\n"); 775245582Sjkim Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, 776306536Sjkim sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); 777245582Sjkim if (ACPI_FAILURE (Status)) 778245582Sjkim { 779245582Sjkim return; 780245582Sjkim } 781239340Sjkim 782245582Sjkim SubOffset += SubTable->SharedInfoLength; 783239340Sjkim 784245582Sjkim /* Sub-Subtables (Resource Descriptors) */ 785239340Sjkim 786239340Sjkim SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, 787239340Sjkim Offset + SubOffset); 788239340Sjkim 789239340Sjkim while ((SubOffset < SubTable->Length) && 790239340Sjkim ((Offset + SubOffset) < Table->Length)) 791239340Sjkim { 792239340Sjkim AcpiOsPrintf ("\n"); 793239340Sjkim Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable, 794306536Sjkim SubSubTable->Length, AcpiDmTableInfoCsrt2); 795239340Sjkim if (ACPI_FAILURE (Status)) 796239340Sjkim { 797239340Sjkim return; 798239340Sjkim } 799239340Sjkim 800239340Sjkim SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); 801239340Sjkim 802239340Sjkim /* Resource-specific info buffer */ 803239340Sjkim 804239340Sjkim InfoLength = SubSubTable->Length - SubSubOffset; 805284460Sjkim if (InfoLength) 806284460Sjkim { 807284460Sjkim Status = AcpiDmDumpTable (Length, 808306536Sjkim Offset + SubOffset + SubSubOffset, Table, 809306536Sjkim InfoLength, AcpiDmTableInfoCsrt2a); 810284460Sjkim if (ACPI_FAILURE (Status)) 811284460Sjkim { 812284460Sjkim return; 813284460Sjkim } 814284460Sjkim SubSubOffset += InfoLength; 815284460Sjkim } 816239340Sjkim 817245582Sjkim /* Point to next sub-subtable */ 818239340Sjkim 819239340Sjkim SubOffset += SubSubTable->Length; 820239340Sjkim SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable, 821306536Sjkim SubSubTable->Length); 822239340Sjkim } 823239340Sjkim 824281075Sdim /* Point to next subtable */ 825239340Sjkim 826239340Sjkim Offset += SubTable->Length; 827239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable, 828306536Sjkim SubTable->Length); 829239340Sjkim } 830239340Sjkim} 831239340Sjkim 832239340Sjkim 833239340Sjkim/******************************************************************************* 834239340Sjkim * 835239340Sjkim * FUNCTION: AcpiDmDumpDbg2 836239340Sjkim * 837239340Sjkim * PARAMETERS: Table - A DBG2 table 838239340Sjkim * 839239340Sjkim * RETURN: None 840239340Sjkim * 841239340Sjkim * DESCRIPTION: Format the contents of a DBG2. This table type consists 842239340Sjkim * of an open-ended number of subtables. 843239340Sjkim * 844239340Sjkim ******************************************************************************/ 845239340Sjkim 846239340Sjkimvoid 847239340SjkimAcpiDmDumpDbg2 ( 848239340Sjkim ACPI_TABLE_HEADER *Table) 849239340Sjkim{ 850239340Sjkim ACPI_STATUS Status; 851239340Sjkim ACPI_DBG2_DEVICE *SubTable; 852239340Sjkim UINT32 Length = Table->Length; 853239340Sjkim UINT32 Offset = sizeof (ACPI_TABLE_DBG2); 854239340Sjkim UINT32 i; 855239340Sjkim UINT32 ArrayOffset; 856239340Sjkim UINT32 AbsoluteOffset; 857239340Sjkim UINT8 *Array; 858239340Sjkim 859239340Sjkim 860239340Sjkim /* Main table */ 861239340Sjkim 862239340Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); 863239340Sjkim if (ACPI_FAILURE (Status)) 864239340Sjkim { 865239340Sjkim return; 866239340Sjkim } 867239340Sjkim 868281075Sdim /* Subtables */ 869239340Sjkim 870239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); 871239340Sjkim while (Offset < Table->Length) 872239340Sjkim { 873239340Sjkim AcpiOsPrintf ("\n"); 874239340Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 875306536Sjkim SubTable->Length, AcpiDmTableInfoDbg2Device); 876239340Sjkim if (ACPI_FAILURE (Status)) 877239340Sjkim { 878239340Sjkim return; 879239340Sjkim } 880239340Sjkim 881239340Sjkim /* Dump the BaseAddress array */ 882239340Sjkim 883239340Sjkim for (i = 0; i < SubTable->RegisterCount; i++) 884239340Sjkim { 885239340Sjkim ArrayOffset = SubTable->BaseAddressOffset + 886239340Sjkim (sizeof (ACPI_GENERIC_ADDRESS) * i); 887239340Sjkim AbsoluteOffset = Offset + ArrayOffset; 888239340Sjkim Array = (UINT8 *) SubTable + ArrayOffset; 889239340Sjkim 890239340Sjkim Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, 891306536Sjkim SubTable->Length, AcpiDmTableInfoDbg2Addr); 892239340Sjkim if (ACPI_FAILURE (Status)) 893239340Sjkim { 894239340Sjkim return; 895239340Sjkim } 896239340Sjkim } 897239340Sjkim 898239340Sjkim /* Dump the AddressSize array */ 899239340Sjkim 900239340Sjkim for (i = 0; i < SubTable->RegisterCount; i++) 901239340Sjkim { 902239340Sjkim ArrayOffset = SubTable->AddressSizeOffset + 903239340Sjkim (sizeof (UINT32) * i); 904239340Sjkim AbsoluteOffset = Offset + ArrayOffset; 905239340Sjkim Array = (UINT8 *) SubTable + ArrayOffset; 906239340Sjkim 907239340Sjkim Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, 908306536Sjkim SubTable->Length, AcpiDmTableInfoDbg2Size); 909239340Sjkim if (ACPI_FAILURE (Status)) 910239340Sjkim { 911239340Sjkim return; 912239340Sjkim } 913239340Sjkim } 914239340Sjkim 915239340Sjkim /* Dump the Namestring (required) */ 916239340Sjkim 917239340Sjkim AcpiOsPrintf ("\n"); 918239340Sjkim ArrayOffset = SubTable->NamepathOffset; 919239340Sjkim AbsoluteOffset = Offset + ArrayOffset; 920239340Sjkim Array = (UINT8 *) SubTable + ArrayOffset; 921239340Sjkim 922239340Sjkim Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, 923306536Sjkim SubTable->Length, AcpiDmTableInfoDbg2Name); 924239340Sjkim if (ACPI_FAILURE (Status)) 925239340Sjkim { 926239340Sjkim return; 927239340Sjkim } 928239340Sjkim 929239340Sjkim /* Dump the OemData (optional) */ 930239340Sjkim 931281075Sdim if (SubTable->OemDataOffset) 932281075Sdim { 933284460Sjkim Status = AcpiDmDumpTable (Length, Offset + SubTable->OemDataOffset, 934306536Sjkim Table, SubTable->OemDataLength, 935306536Sjkim AcpiDmTableInfoDbg2OemData); 936284460Sjkim if (ACPI_FAILURE (Status)) 937284460Sjkim { 938284460Sjkim return; 939284460Sjkim } 940281075Sdim } 941239340Sjkim 942281075Sdim /* Point to next subtable */ 943239340Sjkim 944239340Sjkim Offset += SubTable->Length; 945239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable, 946306536Sjkim SubTable->Length); 947239340Sjkim } 948239340Sjkim} 949239340Sjkim 950239340Sjkim 951239340Sjkim/******************************************************************************* 952239340Sjkim * 953167802Sjkim * FUNCTION: AcpiDmDumpDmar 954167802Sjkim * 955167802Sjkim * PARAMETERS: Table - A DMAR table 956167802Sjkim * 957167802Sjkim * RETURN: None 958167802Sjkim * 959167802Sjkim * DESCRIPTION: Format the contents of a DMAR. This table type consists 960167802Sjkim * of an open-ended number of subtables. 961167802Sjkim * 962167802Sjkim ******************************************************************************/ 963167802Sjkim 964167802Sjkimvoid 965167802SjkimAcpiDmDumpDmar ( 966167802Sjkim ACPI_TABLE_HEADER *Table) 967167802Sjkim{ 968193529Sjkim ACPI_STATUS Status; 969167802Sjkim ACPI_DMAR_HEADER *SubTable; 970167802Sjkim UINT32 Length = Table->Length; 971167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_DMAR); 972167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 973167802Sjkim ACPI_DMAR_DEVICE_SCOPE *ScopeTable; 974167802Sjkim UINT32 ScopeOffset; 975167802Sjkim UINT8 *PciPath; 976167802Sjkim UINT32 PathOffset; 977167802Sjkim 978167802Sjkim 979167802Sjkim /* Main table */ 980167802Sjkim 981193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); 982193529Sjkim if (ACPI_FAILURE (Status)) 983193529Sjkim { 984193529Sjkim return; 985193529Sjkim } 986167802Sjkim 987281075Sdim /* Subtables */ 988167802Sjkim 989167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); 990167802Sjkim while (Offset < Table->Length) 991167802Sjkim { 992281075Sdim /* Common subtable header */ 993167802Sjkim 994167802Sjkim AcpiOsPrintf ("\n"); 995193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 996306536Sjkim SubTable->Length, AcpiDmTableInfoDmarHdr); 997193529Sjkim if (ACPI_FAILURE (Status)) 998193529Sjkim { 999193529Sjkim return; 1000193529Sjkim } 1001306536Sjkim 1002252279Sjkim AcpiOsPrintf ("\n"); 1003167802Sjkim 1004167802Sjkim switch (SubTable->Type) 1005167802Sjkim { 1006167802Sjkim case ACPI_DMAR_TYPE_HARDWARE_UNIT: 1007250838Sjkim 1008167802Sjkim InfoTable = AcpiDmTableInfoDmar0; 1009167802Sjkim ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); 1010167802Sjkim break; 1011250838Sjkim 1012167802Sjkim case ACPI_DMAR_TYPE_RESERVED_MEMORY: 1013250838Sjkim 1014167802Sjkim InfoTable = AcpiDmTableInfoDmar1; 1015167802Sjkim ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); 1016167802Sjkim break; 1017250838Sjkim 1018281075Sdim case ACPI_DMAR_TYPE_ROOT_ATS: 1019250838Sjkim 1020193529Sjkim InfoTable = AcpiDmTableInfoDmar2; 1021193529Sjkim ScopeOffset = sizeof (ACPI_DMAR_ATSR); 1022193529Sjkim break; 1023250838Sjkim 1024281075Sdim case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: 1025250838Sjkim 1026197104Sjkim InfoTable = AcpiDmTableInfoDmar3; 1027197104Sjkim ScopeOffset = sizeof (ACPI_DMAR_RHSA); 1028197104Sjkim break; 1029250838Sjkim 1030281075Sdim case ACPI_DMAR_TYPE_NAMESPACE: 1031281075Sdim 1032281075Sdim InfoTable = AcpiDmTableInfoDmar4; 1033281075Sdim ScopeOffset = sizeof (ACPI_DMAR_ANDD); 1034281075Sdim break; 1035281075Sdim 1036167802Sjkim default: 1037250838Sjkim 1038306536Sjkim AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", 1039306536Sjkim SubTable->Type); 1040167802Sjkim return; 1041167802Sjkim } 1042167802Sjkim 1043193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1044306536Sjkim SubTable->Length, InfoTable); 1045193529Sjkim if (ACPI_FAILURE (Status)) 1046193529Sjkim { 1047193529Sjkim return; 1048193529Sjkim } 1049167802Sjkim 1050281075Sdim /* 1051281075Sdim * Dump the optional device scope entries 1052281075Sdim */ 1053281075Sdim if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || 1054281075Sdim (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE)) 1055281075Sdim { 1056281075Sdim /* These types do not support device scopes */ 1057193529Sjkim 1058281075Sdim goto NextSubtable; 1059281075Sdim } 1060281075Sdim 1061193529Sjkim ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset); 1062193529Sjkim while (ScopeOffset < SubTable->Length) 1063167802Sjkim { 1064193529Sjkim AcpiOsPrintf ("\n"); 1065193529Sjkim Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, 1066306536Sjkim ScopeTable->Length, AcpiDmTableInfoDmarScope); 1067193529Sjkim if (ACPI_FAILURE (Status)) 1068167802Sjkim { 1069193529Sjkim return; 1070193529Sjkim } 1071252279Sjkim AcpiOsPrintf ("\n"); 1072167802Sjkim 1073193529Sjkim /* Dump the PCI Path entries for this device scope */ 1074167802Sjkim 1075193529Sjkim PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ 1076167802Sjkim 1077193529Sjkim PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, 1078193529Sjkim sizeof (ACPI_DMAR_DEVICE_SCOPE)); 1079167802Sjkim 1080193529Sjkim while (PathOffset < ScopeTable->Length) 1081193529Sjkim { 1082306536Sjkim AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, 1083306536Sjkim "PCI Path"); 1084209746Sjkim AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); 1085167802Sjkim 1086193529Sjkim /* Point to next PCI Path entry */ 1087167802Sjkim 1088193529Sjkim PathOffset += 2; 1089193529Sjkim PciPath += 2; 1090252279Sjkim AcpiOsPrintf ("\n"); 1091193529Sjkim } 1092167802Sjkim 1093193529Sjkim /* Point to next device scope entry */ 1094167802Sjkim 1095193529Sjkim ScopeOffset += ScopeTable->Length; 1096193529Sjkim ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, 1097193529Sjkim ScopeTable, ScopeTable->Length); 1098167802Sjkim } 1099167802Sjkim 1100281075SdimNextSubtable: 1101281075Sdim /* Point to next subtable */ 1102167802Sjkim 1103167802Sjkim Offset += SubTable->Length; 1104306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, 1105306536Sjkim SubTable->Length); 1106167802Sjkim } 1107167802Sjkim} 1108167802Sjkim 1109167802Sjkim 1110167802Sjkim/******************************************************************************* 1111167802Sjkim * 1112284460Sjkim * FUNCTION: AcpiDmDumpDrtm 1113284460Sjkim * 1114284460Sjkim * PARAMETERS: Table - A DRTM table 1115284460Sjkim * 1116284460Sjkim * RETURN: None 1117284460Sjkim * 1118284460Sjkim * DESCRIPTION: Format the contents of a DRTM. 1119284460Sjkim * 1120284460Sjkim ******************************************************************************/ 1121284460Sjkim 1122284460Sjkimvoid 1123284460SjkimAcpiDmDumpDrtm ( 1124284460Sjkim ACPI_TABLE_HEADER *Table) 1125284460Sjkim{ 1126284460Sjkim ACPI_STATUS Status; 1127284460Sjkim UINT32 Offset; 1128284460Sjkim ACPI_DRTM_VTABLE_LIST *DrtmVtl; 1129284460Sjkim ACPI_DRTM_RESOURCE_LIST *DrtmRl; 1130284460Sjkim ACPI_DRTM_DPS_ID *DrtmDps; 1131284460Sjkim UINT32 Count; 1132284460Sjkim 1133284460Sjkim 1134284460Sjkim /* Main table */ 1135284460Sjkim 1136284460Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, 1137306536Sjkim AcpiDmTableInfoDrtm); 1138284460Sjkim if (ACPI_FAILURE (Status)) 1139284460Sjkim { 1140284460Sjkim return; 1141284460Sjkim } 1142284460Sjkim 1143284460Sjkim Offset = sizeof (ACPI_TABLE_DRTM); 1144284460Sjkim 1145284460Sjkim /* Sub-tables */ 1146284460Sjkim 1147284460Sjkim /* Dump ValidatedTable length */ 1148284460Sjkim 1149284460Sjkim DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset); 1150284460Sjkim AcpiOsPrintf ("\n"); 1151284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, 1152306536Sjkim DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables), 1153306536Sjkim AcpiDmTableInfoDrtm0); 1154284460Sjkim if (ACPI_FAILURE (Status)) 1155284460Sjkim { 1156284460Sjkim return; 1157284460Sjkim } 1158306536Sjkim 1159284460Sjkim Offset += ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables); 1160284460Sjkim 1161284460Sjkim /* Dump Validated table addresses */ 1162284460Sjkim 1163284460Sjkim Count = 0; 1164284460Sjkim while ((Offset < Table->Length) && 1165284460Sjkim (DrtmVtl->ValidatedTableCount > Count)) 1166284460Sjkim { 1167284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, 1168306536Sjkim ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64), 1169306536Sjkim AcpiDmTableInfoDrtm0a); 1170284460Sjkim if (ACPI_FAILURE (Status)) 1171284460Sjkim { 1172284460Sjkim return; 1173284460Sjkim } 1174306536Sjkim 1175284460Sjkim Offset += sizeof (UINT64); 1176284460Sjkim Count++; 1177284460Sjkim } 1178284460Sjkim 1179284460Sjkim /* Dump ResourceList length */ 1180284460Sjkim 1181284460Sjkim DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset); 1182284460Sjkim AcpiOsPrintf ("\n"); 1183284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, 1184306536Sjkim DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources), 1185306536Sjkim AcpiDmTableInfoDrtm1); 1186284460Sjkim if (ACPI_FAILURE (Status)) 1187284460Sjkim { 1188306536Sjkim return; 1189284460Sjkim } 1190284460Sjkim 1191284460Sjkim Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources); 1192284460Sjkim 1193284460Sjkim /* Dump the Resource List */ 1194284460Sjkim 1195284460Sjkim Count = 0; 1196284460Sjkim while ((Offset < Table->Length) && 1197284460Sjkim (DrtmRl->ResourceCount > Count)) 1198284460Sjkim { 1199284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, 1200306536Sjkim ACPI_ADD_PTR (void, Table, Offset), 1201306536Sjkim sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a); 1202284460Sjkim if (ACPI_FAILURE (Status)) 1203284460Sjkim { 1204284460Sjkim return; 1205284460Sjkim } 1206284460Sjkim 1207284460Sjkim Offset += sizeof (ACPI_DRTM_RESOURCE); 1208284460Sjkim Count++; 1209284460Sjkim } 1210284460Sjkim 1211284460Sjkim /* Dump DPS */ 1212284460Sjkim 1213284460Sjkim DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset); 1214284460Sjkim AcpiOsPrintf ("\n"); 1215306536Sjkim (void) AcpiDmDumpTable (Table->Length, Offset, 1216306536Sjkim DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2); 1217284460Sjkim} 1218284460Sjkim 1219284460Sjkim 1220284460Sjkim/******************************************************************************* 1221284460Sjkim * 1222193529Sjkim * FUNCTION: AcpiDmDumpEinj 1223193529Sjkim * 1224193529Sjkim * PARAMETERS: Table - A EINJ table 1225193529Sjkim * 1226193529Sjkim * RETURN: None 1227193529Sjkim * 1228193529Sjkim * DESCRIPTION: Format the contents of a EINJ. This table type consists 1229193529Sjkim * of an open-ended number of subtables. 1230193529Sjkim * 1231193529Sjkim ******************************************************************************/ 1232193529Sjkim 1233193529Sjkimvoid 1234193529SjkimAcpiDmDumpEinj ( 1235193529Sjkim ACPI_TABLE_HEADER *Table) 1236193529Sjkim{ 1237193529Sjkim ACPI_STATUS Status; 1238193529Sjkim ACPI_WHEA_HEADER *SubTable; 1239193529Sjkim UINT32 Length = Table->Length; 1240193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_EINJ); 1241193529Sjkim 1242193529Sjkim 1243193529Sjkim /* Main table */ 1244193529Sjkim 1245193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); 1246193529Sjkim if (ACPI_FAILURE (Status)) 1247193529Sjkim { 1248193529Sjkim return; 1249193529Sjkim } 1250193529Sjkim 1251281075Sdim /* Subtables */ 1252193529Sjkim 1253193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); 1254193529Sjkim while (Offset < Table->Length) 1255193529Sjkim { 1256193529Sjkim AcpiOsPrintf ("\n"); 1257193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1258306536Sjkim sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); 1259193529Sjkim if (ACPI_FAILURE (Status)) 1260193529Sjkim { 1261193529Sjkim return; 1262193529Sjkim } 1263193529Sjkim 1264281075Sdim /* Point to next subtable (each subtable is of fixed length) */ 1265193529Sjkim 1266193529Sjkim Offset += sizeof (ACPI_WHEA_HEADER); 1267193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable, 1268306536Sjkim sizeof (ACPI_WHEA_HEADER)); 1269193529Sjkim } 1270193529Sjkim} 1271193529Sjkim 1272193529Sjkim 1273193529Sjkim/******************************************************************************* 1274193529Sjkim * 1275193529Sjkim * FUNCTION: AcpiDmDumpErst 1276193529Sjkim * 1277193529Sjkim * PARAMETERS: Table - A ERST table 1278193529Sjkim * 1279193529Sjkim * RETURN: None 1280193529Sjkim * 1281193529Sjkim * DESCRIPTION: Format the contents of a ERST. This table type consists 1282193529Sjkim * of an open-ended number of subtables. 1283193529Sjkim * 1284193529Sjkim ******************************************************************************/ 1285193529Sjkim 1286193529Sjkimvoid 1287193529SjkimAcpiDmDumpErst ( 1288193529Sjkim ACPI_TABLE_HEADER *Table) 1289193529Sjkim{ 1290193529Sjkim ACPI_STATUS Status; 1291193529Sjkim ACPI_WHEA_HEADER *SubTable; 1292193529Sjkim UINT32 Length = Table->Length; 1293193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_ERST); 1294193529Sjkim 1295193529Sjkim 1296193529Sjkim /* Main table */ 1297193529Sjkim 1298193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); 1299193529Sjkim if (ACPI_FAILURE (Status)) 1300193529Sjkim { 1301193529Sjkim return; 1302193529Sjkim } 1303193529Sjkim 1304281075Sdim /* Subtables */ 1305193529Sjkim 1306193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); 1307193529Sjkim while (Offset < Table->Length) 1308193529Sjkim { 1309193529Sjkim AcpiOsPrintf ("\n"); 1310193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1311306536Sjkim sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); 1312193529Sjkim if (ACPI_FAILURE (Status)) 1313193529Sjkim { 1314193529Sjkim return; 1315193529Sjkim } 1316193529Sjkim 1317281075Sdim /* Point to next subtable (each subtable is of fixed length) */ 1318193529Sjkim 1319193529Sjkim Offset += sizeof (ACPI_WHEA_HEADER); 1320193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable, 1321306536Sjkim sizeof (ACPI_WHEA_HEADER)); 1322193529Sjkim } 1323193529Sjkim} 1324193529Sjkim 1325193529Sjkim 1326193529Sjkim/******************************************************************************* 1327193529Sjkim * 1328228110Sjkim * FUNCTION: AcpiDmDumpFpdt 1329228110Sjkim * 1330228110Sjkim * PARAMETERS: Table - A FPDT table 1331228110Sjkim * 1332228110Sjkim * RETURN: None 1333228110Sjkim * 1334228110Sjkim * DESCRIPTION: Format the contents of a FPDT. This table type consists 1335228110Sjkim * of an open-ended number of subtables. 1336228110Sjkim * 1337228110Sjkim ******************************************************************************/ 1338228110Sjkim 1339228110Sjkimvoid 1340228110SjkimAcpiDmDumpFpdt ( 1341228110Sjkim ACPI_TABLE_HEADER *Table) 1342228110Sjkim{ 1343228110Sjkim ACPI_STATUS Status; 1344228110Sjkim ACPI_FPDT_HEADER *SubTable; 1345228110Sjkim UINT32 Length = Table->Length; 1346228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_FPDT); 1347228110Sjkim ACPI_DMTABLE_INFO *InfoTable; 1348228110Sjkim 1349228110Sjkim 1350228110Sjkim /* There is no main table (other than the standard ACPI header) */ 1351228110Sjkim 1352281075Sdim /* Subtables */ 1353228110Sjkim 1354228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); 1355228110Sjkim while (Offset < Table->Length) 1356228110Sjkim { 1357281075Sdim /* Common subtable header */ 1358228110Sjkim 1359228110Sjkim AcpiOsPrintf ("\n"); 1360228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1361306536Sjkim SubTable->Length, AcpiDmTableInfoFpdtHdr); 1362228110Sjkim if (ACPI_FAILURE (Status)) 1363228110Sjkim { 1364228110Sjkim return; 1365228110Sjkim } 1366228110Sjkim 1367228110Sjkim switch (SubTable->Type) 1368228110Sjkim { 1369228110Sjkim case ACPI_FPDT_TYPE_BOOT: 1370250838Sjkim 1371228110Sjkim InfoTable = AcpiDmTableInfoFpdt0; 1372228110Sjkim break; 1373250838Sjkim 1374228110Sjkim case ACPI_FPDT_TYPE_S3PERF: 1375250838Sjkim 1376228110Sjkim InfoTable = AcpiDmTableInfoFpdt1; 1377228110Sjkim break; 1378250838Sjkim 1379228110Sjkim default: 1380250838Sjkim 1381306536Sjkim AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", 1382306536Sjkim SubTable->Type); 1383228110Sjkim 1384228110Sjkim /* Attempt to continue */ 1385228110Sjkim 1386228110Sjkim if (!SubTable->Length) 1387228110Sjkim { 1388228110Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1389228110Sjkim return; 1390228110Sjkim } 1391228110Sjkim goto NextSubTable; 1392228110Sjkim } 1393228110Sjkim 1394228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1395306536Sjkim SubTable->Length, InfoTable); 1396228110Sjkim if (ACPI_FAILURE (Status)) 1397228110Sjkim { 1398228110Sjkim return; 1399228110Sjkim } 1400228110Sjkim 1401228110SjkimNextSubTable: 1402281075Sdim /* Point to next subtable */ 1403228110Sjkim 1404228110Sjkim Offset += SubTable->Length; 1405306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, 1406306536Sjkim SubTable->Length); 1407228110Sjkim } 1408228110Sjkim} 1409228110Sjkim 1410228110Sjkim 1411228110Sjkim/******************************************************************************* 1412228110Sjkim * 1413281075Sdim * FUNCTION: AcpiDmDumpGtdt 1414281075Sdim * 1415281075Sdim * PARAMETERS: Table - A GTDT table 1416281075Sdim * 1417281075Sdim * RETURN: None 1418281075Sdim * 1419281075Sdim * DESCRIPTION: Format the contents of a GTDT. This table type consists 1420281075Sdim * of an open-ended number of subtables. 1421281075Sdim * 1422281075Sdim ******************************************************************************/ 1423281075Sdim 1424281075Sdimvoid 1425281075SdimAcpiDmDumpGtdt ( 1426281075Sdim ACPI_TABLE_HEADER *Table) 1427281075Sdim{ 1428281075Sdim ACPI_STATUS Status; 1429281075Sdim ACPI_GTDT_HEADER *SubTable; 1430281075Sdim UINT32 Length = Table->Length; 1431281075Sdim UINT32 Offset = sizeof (ACPI_TABLE_GTDT); 1432281075Sdim ACPI_DMTABLE_INFO *InfoTable; 1433281075Sdim UINT32 SubTableLength; 1434281075Sdim UINT32 GtCount; 1435281075Sdim ACPI_GTDT_TIMER_ENTRY *GtxTable; 1436281075Sdim 1437281075Sdim 1438281075Sdim /* Main table */ 1439281075Sdim 1440281075Sdim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); 1441281075Sdim if (ACPI_FAILURE (Status)) 1442281075Sdim { 1443281075Sdim return; 1444281075Sdim } 1445281075Sdim 1446281075Sdim /* Subtables */ 1447281075Sdim 1448281075Sdim SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); 1449281075Sdim while (Offset < Table->Length) 1450281075Sdim { 1451281075Sdim /* Common subtable header */ 1452281075Sdim 1453281075Sdim AcpiOsPrintf ("\n"); 1454281075Sdim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1455306536Sjkim SubTable->Length, AcpiDmTableInfoGtdtHdr); 1456281075Sdim if (ACPI_FAILURE (Status)) 1457281075Sdim { 1458281075Sdim return; 1459281075Sdim } 1460281075Sdim 1461281075Sdim GtCount = 0; 1462281075Sdim switch (SubTable->Type) 1463281075Sdim { 1464281075Sdim case ACPI_GTDT_TYPE_TIMER_BLOCK: 1465281075Sdim 1466281075Sdim SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); 1467281075Sdim GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, 1468306536Sjkim SubTable))->TimerCount; 1469281075Sdim 1470281075Sdim InfoTable = AcpiDmTableInfoGtdt0; 1471281075Sdim break; 1472281075Sdim 1473281075Sdim case ACPI_GTDT_TYPE_WATCHDOG: 1474281075Sdim 1475281075Sdim SubTableLength = sizeof (ACPI_GTDT_WATCHDOG); 1476281075Sdim 1477281075Sdim InfoTable = AcpiDmTableInfoGtdt1; 1478281075Sdim break; 1479281075Sdim 1480281075Sdim default: 1481281075Sdim 1482281075Sdim /* Cannot continue on unknown type - no length */ 1483281075Sdim 1484306536Sjkim AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", 1485306536Sjkim SubTable->Type); 1486281075Sdim return; 1487281075Sdim } 1488281075Sdim 1489281075Sdim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1490306536Sjkim SubTable->Length, InfoTable); 1491281075Sdim if (ACPI_FAILURE (Status)) 1492281075Sdim { 1493281075Sdim return; 1494281075Sdim } 1495281075Sdim 1496281075Sdim /* Point to end of current subtable (each subtable above is of fixed length) */ 1497281075Sdim 1498281075Sdim Offset += SubTableLength; 1499281075Sdim 1500281075Sdim /* If there are any Gt Timer Blocks from above, dump them now */ 1501281075Sdim 1502281075Sdim if (GtCount) 1503281075Sdim { 1504306536Sjkim GtxTable = ACPI_ADD_PTR ( 1505306536Sjkim ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength); 1506281075Sdim SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); 1507281075Sdim 1508281075Sdim while (GtCount) 1509281075Sdim { 1510281075Sdim AcpiOsPrintf ("\n"); 1511281075Sdim Status = AcpiDmDumpTable (Length, Offset, GtxTable, 1512306536Sjkim sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); 1513281075Sdim if (ACPI_FAILURE (Status)) 1514281075Sdim { 1515281075Sdim return; 1516281075Sdim } 1517281075Sdim Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); 1518281075Sdim GtxTable++; 1519281075Sdim GtCount--; 1520281075Sdim } 1521281075Sdim } 1522281075Sdim 1523281075Sdim /* Point to next subtable */ 1524281075Sdim 1525281075Sdim SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength); 1526281075Sdim } 1527281075Sdim} 1528281075Sdim 1529281075Sdim 1530281075Sdim/******************************************************************************* 1531281075Sdim * 1532193529Sjkim * FUNCTION: AcpiDmDumpHest 1533193529Sjkim * 1534193529Sjkim * PARAMETERS: Table - A HEST table 1535193529Sjkim * 1536193529Sjkim * RETURN: None 1537193529Sjkim * 1538193529Sjkim * DESCRIPTION: Format the contents of a HEST. This table type consists 1539193529Sjkim * of an open-ended number of subtables. 1540193529Sjkim * 1541193529Sjkim ******************************************************************************/ 1542193529Sjkim 1543193529Sjkimvoid 1544193529SjkimAcpiDmDumpHest ( 1545193529Sjkim ACPI_TABLE_HEADER *Table) 1546193529Sjkim{ 1547193529Sjkim ACPI_STATUS Status; 1548193529Sjkim ACPI_HEST_HEADER *SubTable; 1549193529Sjkim UINT32 Length = Table->Length; 1550193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_HEST); 1551193529Sjkim ACPI_DMTABLE_INFO *InfoTable; 1552193529Sjkim UINT32 SubTableLength; 1553197104Sjkim UINT32 BankCount; 1554197104Sjkim ACPI_HEST_IA_ERROR_BANK *BankTable; 1555193529Sjkim 1556193529Sjkim 1557193529Sjkim /* Main table */ 1558193529Sjkim 1559193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); 1560193529Sjkim if (ACPI_FAILURE (Status)) 1561193529Sjkim { 1562193529Sjkim return; 1563193529Sjkim } 1564193529Sjkim 1565281075Sdim /* Subtables */ 1566193529Sjkim 1567193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); 1568193529Sjkim while (Offset < Table->Length) 1569193529Sjkim { 1570197104Sjkim BankCount = 0; 1571193529Sjkim switch (SubTable->Type) 1572193529Sjkim { 1573197104Sjkim case ACPI_HEST_TYPE_IA32_CHECK: 1574250838Sjkim 1575193529Sjkim InfoTable = AcpiDmTableInfoHest0; 1576197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); 1577197104Sjkim BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, 1578306536Sjkim SubTable))->NumHardwareBanks; 1579193529Sjkim break; 1580193529Sjkim 1581197104Sjkim case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: 1582250838Sjkim 1583193529Sjkim InfoTable = AcpiDmTableInfoHest1; 1584197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED); 1585197104Sjkim BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, 1586306536Sjkim SubTable))->NumHardwareBanks; 1587193529Sjkim break; 1588193529Sjkim 1589197104Sjkim case ACPI_HEST_TYPE_IA32_NMI: 1590250838Sjkim 1591197104Sjkim InfoTable = AcpiDmTableInfoHest2; 1592197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_NMI); 1593193529Sjkim break; 1594193529Sjkim 1595193529Sjkim case ACPI_HEST_TYPE_AER_ROOT_PORT: 1596250838Sjkim 1597193529Sjkim InfoTable = AcpiDmTableInfoHest6; 1598193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER_ROOT); 1599193529Sjkim break; 1600193529Sjkim 1601193529Sjkim case ACPI_HEST_TYPE_AER_ENDPOINT: 1602250838Sjkim 1603193529Sjkim InfoTable = AcpiDmTableInfoHest7; 1604193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER); 1605193529Sjkim break; 1606193529Sjkim 1607193529Sjkim case ACPI_HEST_TYPE_AER_BRIDGE: 1608250838Sjkim 1609193529Sjkim InfoTable = AcpiDmTableInfoHest8; 1610193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE); 1611193529Sjkim break; 1612193529Sjkim 1613197104Sjkim case ACPI_HEST_TYPE_GENERIC_ERROR: 1614250838Sjkim 1615193529Sjkim InfoTable = AcpiDmTableInfoHest9; 1616193529Sjkim SubTableLength = sizeof (ACPI_HEST_GENERIC); 1617193529Sjkim break; 1618193529Sjkim 1619306536Sjkim case ACPI_HEST_TYPE_GENERIC_ERROR_V2: 1620306536Sjkim 1621306536Sjkim InfoTable = AcpiDmTableInfoHest10; 1622306536Sjkim SubTableLength = sizeof (ACPI_HEST_GENERIC_V2); 1623306536Sjkim break; 1624306536Sjkim 1625193529Sjkim default: 1626250838Sjkim 1627193529Sjkim /* Cannot continue on unknown type - no length */ 1628193529Sjkim 1629306536Sjkim AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", 1630306536Sjkim SubTable->Type); 1631193529Sjkim return; 1632193529Sjkim } 1633193529Sjkim 1634193529Sjkim AcpiOsPrintf ("\n"); 1635193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1636306536Sjkim SubTableLength, InfoTable); 1637193529Sjkim if (ACPI_FAILURE (Status)) 1638193529Sjkim { 1639193529Sjkim return; 1640193529Sjkim } 1641193529Sjkim 1642197104Sjkim /* Point to end of current subtable (each subtable above is of fixed length) */ 1643193529Sjkim 1644193529Sjkim Offset += SubTableLength; 1645197104Sjkim 1646197104Sjkim /* If there are any (fixed-length) Error Banks from above, dump them now */ 1647197104Sjkim 1648197104Sjkim if (BankCount) 1649197104Sjkim { 1650306536Sjkim BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, 1651306536Sjkim SubTableLength); 1652197104Sjkim SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); 1653197104Sjkim 1654197104Sjkim while (BankCount) 1655197104Sjkim { 1656197104Sjkim AcpiOsPrintf ("\n"); 1657197104Sjkim Status = AcpiDmDumpTable (Length, Offset, BankTable, 1658306536Sjkim sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); 1659197104Sjkim if (ACPI_FAILURE (Status)) 1660197104Sjkim { 1661197104Sjkim return; 1662197104Sjkim } 1663306536Sjkim 1664197104Sjkim Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); 1665197104Sjkim BankTable++; 1666197104Sjkim BankCount--; 1667197104Sjkim } 1668197104Sjkim } 1669197104Sjkim 1670281075Sdim /* Point to next subtable */ 1671197104Sjkim 1672193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength); 1673193529Sjkim } 1674193529Sjkim} 1675193529Sjkim 1676193529Sjkim 1677193529Sjkim/******************************************************************************* 1678193529Sjkim * 1679284460Sjkim * FUNCTION: AcpiDmDumpIort 1680284460Sjkim * 1681284460Sjkim * PARAMETERS: Table - A IORT table 1682284460Sjkim * 1683284460Sjkim * RETURN: None 1684284460Sjkim * 1685284460Sjkim * DESCRIPTION: Format the contents of a IORT 1686284460Sjkim * 1687284460Sjkim ******************************************************************************/ 1688284460Sjkim 1689284460Sjkimvoid 1690284460SjkimAcpiDmDumpIort ( 1691284460Sjkim ACPI_TABLE_HEADER *Table) 1692284460Sjkim{ 1693284460Sjkim ACPI_STATUS Status; 1694284460Sjkim ACPI_TABLE_IORT *Iort; 1695284460Sjkim ACPI_IORT_NODE *IortNode; 1696284460Sjkim ACPI_IORT_ITS_GROUP *IortItsGroup = NULL; 1697284460Sjkim ACPI_IORT_SMMU *IortSmmu = NULL; 1698284460Sjkim UINT32 Offset; 1699284460Sjkim UINT32 NodeOffset; 1700284460Sjkim UINT32 Length; 1701284460Sjkim ACPI_DMTABLE_INFO *InfoTable; 1702284460Sjkim char *String; 1703284460Sjkim UINT32 i; 1704284460Sjkim 1705284460Sjkim 1706284460Sjkim /* Main table */ 1707284460Sjkim 1708284460Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort); 1709284460Sjkim if (ACPI_FAILURE (Status)) 1710284460Sjkim { 1711284460Sjkim return; 1712284460Sjkim } 1713284460Sjkim 1714284460Sjkim Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table); 1715284460Sjkim Offset = sizeof (ACPI_TABLE_IORT); 1716284460Sjkim 1717284460Sjkim /* Dump the OptionalPadding (optional) */ 1718284460Sjkim 1719284460Sjkim if (Iort->NodeOffset > Offset) 1720284460Sjkim { 1721284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, Table, 1722306536Sjkim Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad); 1723284460Sjkim if (ACPI_FAILURE (Status)) 1724284460Sjkim { 1725284460Sjkim return; 1726284460Sjkim } 1727284460Sjkim } 1728284460Sjkim 1729284460Sjkim Offset = Iort->NodeOffset; 1730284460Sjkim while (Offset < Table->Length) 1731284460Sjkim { 1732284460Sjkim /* Common subtable header */ 1733284460Sjkim 1734284460Sjkim IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); 1735284460Sjkim AcpiOsPrintf ("\n"); 1736284460Sjkim Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); 1737284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, 1738306536Sjkim IortNode, Length, AcpiDmTableInfoIortHdr); 1739284460Sjkim if (ACPI_FAILURE (Status)) 1740284460Sjkim { 1741284460Sjkim return; 1742284460Sjkim } 1743284460Sjkim 1744284460Sjkim NodeOffset = Length; 1745284460Sjkim 1746284460Sjkim switch (IortNode->Type) 1747284460Sjkim { 1748284460Sjkim case ACPI_IORT_NODE_ITS_GROUP: 1749284460Sjkim 1750284460Sjkim InfoTable = AcpiDmTableInfoIort0; 1751284460Sjkim Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers); 1752284460Sjkim IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset); 1753284460Sjkim break; 1754284460Sjkim 1755284460Sjkim case ACPI_IORT_NODE_NAMED_COMPONENT: 1756284460Sjkim 1757284460Sjkim InfoTable = AcpiDmTableInfoIort1; 1758284460Sjkim Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName); 1759284460Sjkim String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length); 1760306536Sjkim Length += strlen (String) + 1; 1761284460Sjkim break; 1762284460Sjkim 1763284460Sjkim case ACPI_IORT_NODE_PCI_ROOT_COMPLEX: 1764284460Sjkim 1765284460Sjkim InfoTable = AcpiDmTableInfoIort2; 1766284460Sjkim Length = IortNode->Length - NodeOffset; 1767284460Sjkim break; 1768284460Sjkim 1769284460Sjkim case ACPI_IORT_NODE_SMMU: 1770284460Sjkim 1771284460Sjkim InfoTable = AcpiDmTableInfoIort3; 1772284460Sjkim Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts); 1773284460Sjkim IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset); 1774284460Sjkim break; 1775284460Sjkim 1776306536Sjkim case ACPI_IORT_NODE_SMMU_V3: 1777306536Sjkim 1778306536Sjkim InfoTable = AcpiDmTableInfoIort4; 1779306536Sjkim Length = IortNode->Length - NodeOffset; 1780306536Sjkim break; 1781306536Sjkim 1782284460Sjkim default: 1783284460Sjkim 1784284460Sjkim AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n", 1785284460Sjkim IortNode->Type); 1786284460Sjkim 1787284460Sjkim /* Attempt to continue */ 1788284460Sjkim 1789284460Sjkim if (!IortNode->Length) 1790284460Sjkim { 1791284460Sjkim AcpiOsPrintf ("Invalid zero length IORT node\n"); 1792284460Sjkim return; 1793284460Sjkim } 1794284460Sjkim goto NextSubTable; 1795284460Sjkim } 1796284460Sjkim 1797284460Sjkim /* Dump the node subtable header */ 1798284460Sjkim 1799284460Sjkim AcpiOsPrintf ("\n"); 1800284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1801306536Sjkim ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 1802306536Sjkim Length, InfoTable); 1803284460Sjkim if (ACPI_FAILURE (Status)) 1804284460Sjkim { 1805284460Sjkim return; 1806284460Sjkim } 1807284460Sjkim 1808284460Sjkim NodeOffset += Length; 1809284460Sjkim 1810284460Sjkim /* Dump the node specific data */ 1811284460Sjkim 1812284460Sjkim switch (IortNode->Type) 1813284460Sjkim { 1814284460Sjkim case ACPI_IORT_NODE_ITS_GROUP: 1815284460Sjkim 1816284460Sjkim /* Validate IortItsGroup to avoid compiler warnings */ 1817284460Sjkim 1818284460Sjkim if (IortItsGroup) 1819284460Sjkim { 1820284460Sjkim for (i = 0; i < IortItsGroup->ItsCount; i++) 1821284460Sjkim { 1822284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1823306536Sjkim ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 1824306536Sjkim 4, AcpiDmTableInfoIort0a); 1825284460Sjkim NodeOffset += 4; 1826284460Sjkim } 1827284460Sjkim } 1828284460Sjkim break; 1829284460Sjkim 1830284460Sjkim case ACPI_IORT_NODE_NAMED_COMPONENT: 1831284460Sjkim 1832284460Sjkim /* Dump the Padding (optional) */ 1833284460Sjkim 1834284460Sjkim if (IortNode->Length > NodeOffset) 1835284460Sjkim { 1836284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1837306536Sjkim Table, IortNode->Length - NodeOffset, 1838306536Sjkim AcpiDmTableInfoIort1a); 1839284460Sjkim if (ACPI_FAILURE (Status)) 1840284460Sjkim { 1841284460Sjkim return; 1842284460Sjkim } 1843284460Sjkim } 1844284460Sjkim break; 1845284460Sjkim 1846284460Sjkim case ACPI_IORT_NODE_SMMU: 1847284460Sjkim 1848284460Sjkim AcpiOsPrintf ("\n"); 1849284460Sjkim 1850284460Sjkim /* Validate IortSmmu to avoid compiler warnings */ 1851284460Sjkim 1852284460Sjkim if (IortSmmu) 1853284460Sjkim { 1854284460Sjkim Length = 2 * sizeof (UINT64); 1855284460Sjkim NodeOffset = IortSmmu->GlobalInterruptOffset; 1856284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1857306536Sjkim ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 1858306536Sjkim Length, AcpiDmTableInfoIort3a); 1859306536Sjkim if (ACPI_FAILURE (Status)) 1860306536Sjkim { 1861306536Sjkim return; 1862306536Sjkim } 1863284460Sjkim 1864284460Sjkim NodeOffset = IortSmmu->ContextInterruptOffset; 1865284460Sjkim for (i = 0; i < IortSmmu->ContextInterruptCount; i++) 1866284460Sjkim { 1867284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1868306536Sjkim ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 1869306536Sjkim 8, AcpiDmTableInfoIort3b); 1870306536Sjkim if (ACPI_FAILURE (Status)) 1871306536Sjkim { 1872306536Sjkim return; 1873306536Sjkim } 1874306536Sjkim 1875284460Sjkim NodeOffset += 8; 1876284460Sjkim } 1877284460Sjkim 1878284460Sjkim NodeOffset = IortSmmu->PmuInterruptOffset; 1879284460Sjkim for (i = 0; i < IortSmmu->PmuInterruptCount; i++) 1880284460Sjkim { 1881284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1882306536Sjkim ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 1883306536Sjkim 8, AcpiDmTableInfoIort3c); 1884306536Sjkim if (ACPI_FAILURE (Status)) 1885306536Sjkim { 1886306536Sjkim return; 1887306536Sjkim } 1888306536Sjkim 1889284460Sjkim NodeOffset += 8; 1890284460Sjkim } 1891284460Sjkim } 1892284460Sjkim break; 1893284460Sjkim 1894284460Sjkim default: 1895284460Sjkim 1896284460Sjkim break; 1897284460Sjkim } 1898284460Sjkim 1899284460Sjkim /* Dump the ID mappings */ 1900284460Sjkim 1901284460Sjkim NodeOffset = IortNode->MappingOffset; 1902284460Sjkim for (i = 0; i < IortNode->MappingCount; i++) 1903284460Sjkim { 1904284460Sjkim AcpiOsPrintf ("\n"); 1905284460Sjkim Length = sizeof (ACPI_IORT_ID_MAPPING); 1906284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset, 1907306536Sjkim ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset), 1908306536Sjkim Length, AcpiDmTableInfoIortMap); 1909306536Sjkim if (ACPI_FAILURE (Status)) 1910306536Sjkim { 1911306536Sjkim return; 1912306536Sjkim } 1913306536Sjkim 1914284460Sjkim NodeOffset += Length; 1915284460Sjkim } 1916284460Sjkim 1917284460SjkimNextSubTable: 1918284460Sjkim /* Point to next node subtable */ 1919284460Sjkim 1920284460Sjkim Offset += IortNode->Length; 1921284460Sjkim IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length); 1922284460Sjkim } 1923284460Sjkim} 1924284460Sjkim 1925284460Sjkim 1926284460Sjkim/******************************************************************************* 1927284460Sjkim * 1928197104Sjkim * FUNCTION: AcpiDmDumpIvrs 1929197104Sjkim * 1930197104Sjkim * PARAMETERS: Table - A IVRS table 1931197104Sjkim * 1932197104Sjkim * RETURN: None 1933197104Sjkim * 1934197104Sjkim * DESCRIPTION: Format the contents of a IVRS 1935197104Sjkim * 1936197104Sjkim ******************************************************************************/ 1937197104Sjkim 1938197104Sjkimstatic UINT8 EntrySizes[] = {4,8,16,32}; 1939197104Sjkim 1940197104Sjkimvoid 1941197104SjkimAcpiDmDumpIvrs ( 1942197104Sjkim ACPI_TABLE_HEADER *Table) 1943197104Sjkim{ 1944197104Sjkim ACPI_STATUS Status; 1945197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_IVRS); 1946197104Sjkim UINT32 EntryOffset; 1947197104Sjkim UINT32 EntryLength; 1948197104Sjkim UINT32 EntryType; 1949197104Sjkim ACPI_IVRS_DE_HEADER *DeviceEntry; 1950197104Sjkim ACPI_IVRS_HEADER *SubTable; 1951197104Sjkim ACPI_DMTABLE_INFO *InfoTable; 1952197104Sjkim 1953197104Sjkim 1954197104Sjkim /* Main table */ 1955197104Sjkim 1956197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); 1957197104Sjkim if (ACPI_FAILURE (Status)) 1958197104Sjkim { 1959197104Sjkim return; 1960197104Sjkim } 1961197104Sjkim 1962281075Sdim /* Subtables */ 1963197104Sjkim 1964197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); 1965197104Sjkim while (Offset < Table->Length) 1966197104Sjkim { 1967281075Sdim /* Common subtable header */ 1968197104Sjkim 1969197104Sjkim AcpiOsPrintf ("\n"); 1970197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1971306536Sjkim SubTable->Length, AcpiDmTableInfoIvrsHdr); 1972197104Sjkim if (ACPI_FAILURE (Status)) 1973197104Sjkim { 1974197104Sjkim return; 1975197104Sjkim } 1976197104Sjkim 1977197104Sjkim switch (SubTable->Type) 1978197104Sjkim { 1979197104Sjkim case ACPI_IVRS_TYPE_HARDWARE: 1980250838Sjkim 1981197104Sjkim InfoTable = AcpiDmTableInfoIvrs0; 1982197104Sjkim break; 1983250838Sjkim 1984197104Sjkim case ACPI_IVRS_TYPE_MEMORY1: 1985197104Sjkim case ACPI_IVRS_TYPE_MEMORY2: 1986197104Sjkim case ACPI_IVRS_TYPE_MEMORY3: 1987250838Sjkim 1988197104Sjkim InfoTable = AcpiDmTableInfoIvrs1; 1989197104Sjkim break; 1990250838Sjkim 1991197104Sjkim default: 1992250838Sjkim 1993281075Sdim AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", 1994197104Sjkim SubTable->Type); 1995197104Sjkim 1996197104Sjkim /* Attempt to continue */ 1997197104Sjkim 1998197104Sjkim if (!SubTable->Length) 1999197104Sjkim { 2000197104Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2001197104Sjkim return; 2002197104Sjkim } 2003197104Sjkim goto NextSubTable; 2004197104Sjkim } 2005197104Sjkim 2006197104Sjkim /* Dump the subtable */ 2007197104Sjkim 2008197104Sjkim AcpiOsPrintf ("\n"); 2009197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2010306536Sjkim SubTable->Length, InfoTable); 2011197104Sjkim if (ACPI_FAILURE (Status)) 2012197104Sjkim { 2013197104Sjkim return; 2014197104Sjkim } 2015197104Sjkim 2016197104Sjkim /* The hardware subtable can contain multiple device entries */ 2017197104Sjkim 2018197104Sjkim if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE) 2019197104Sjkim { 2020197104Sjkim EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); 2021197104Sjkim DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable, 2022306536Sjkim sizeof (ACPI_IVRS_HARDWARE)); 2023197104Sjkim 2024197104Sjkim while (EntryOffset < (Offset + SubTable->Length)) 2025197104Sjkim { 2026197104Sjkim AcpiOsPrintf ("\n"); 2027197104Sjkim /* 2028197104Sjkim * Upper 2 bits of Type encode the length of the device entry 2029197104Sjkim * 2030197104Sjkim * 00 = 4 byte 2031197104Sjkim * 01 = 8 byte 2032197104Sjkim * 10 = 16 byte - currently no entries defined 2033197104Sjkim * 11 = 32 byte - currently no entries defined 2034197104Sjkim */ 2035197104Sjkim EntryType = DeviceEntry->Type; 2036197104Sjkim EntryLength = EntrySizes [EntryType >> 6]; 2037197104Sjkim 2038197104Sjkim switch (EntryType) 2039197104Sjkim { 2040197104Sjkim /* 4-byte device entries */ 2041197104Sjkim 2042197104Sjkim case ACPI_IVRS_TYPE_PAD4: 2043197104Sjkim case ACPI_IVRS_TYPE_ALL: 2044197104Sjkim case ACPI_IVRS_TYPE_SELECT: 2045197104Sjkim case ACPI_IVRS_TYPE_START: 2046197104Sjkim case ACPI_IVRS_TYPE_END: 2047197104Sjkim 2048197104Sjkim InfoTable = AcpiDmTableInfoIvrs4; 2049197104Sjkim break; 2050197104Sjkim 2051197104Sjkim /* 8-byte entries, type A */ 2052197104Sjkim 2053197104Sjkim case ACPI_IVRS_TYPE_ALIAS_SELECT: 2054197104Sjkim case ACPI_IVRS_TYPE_ALIAS_START: 2055197104Sjkim 2056197104Sjkim InfoTable = AcpiDmTableInfoIvrs8a; 2057197104Sjkim break; 2058197104Sjkim 2059197104Sjkim /* 8-byte entries, type B */ 2060197104Sjkim 2061197104Sjkim case ACPI_IVRS_TYPE_PAD8: 2062197104Sjkim case ACPI_IVRS_TYPE_EXT_SELECT: 2063197104Sjkim case ACPI_IVRS_TYPE_EXT_START: 2064197104Sjkim 2065197104Sjkim InfoTable = AcpiDmTableInfoIvrs8b; 2066197104Sjkim break; 2067197104Sjkim 2068197104Sjkim /* 8-byte entries, type C */ 2069197104Sjkim 2070197104Sjkim case ACPI_IVRS_TYPE_SPECIAL: 2071197104Sjkim 2072197104Sjkim InfoTable = AcpiDmTableInfoIvrs8c; 2073197104Sjkim break; 2074197104Sjkim 2075197104Sjkim default: 2076197104Sjkim InfoTable = AcpiDmTableInfoIvrs4; 2077197104Sjkim AcpiOsPrintf ( 2078197104Sjkim "\n**** Unknown IVRS device entry type/length: " 2079204773Sjkim "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", 2080197104Sjkim EntryType, EntryLength, EntryOffset); 2081197104Sjkim break; 2082197104Sjkim } 2083197104Sjkim 2084197104Sjkim /* Dump the Device Entry */ 2085197104Sjkim 2086197104Sjkim Status = AcpiDmDumpTable (Table->Length, EntryOffset, 2087306536Sjkim DeviceEntry, EntryLength, InfoTable); 2088306536Sjkim if (ACPI_FAILURE (Status)) 2089306536Sjkim { 2090306536Sjkim return; 2091306536Sjkim } 2092197104Sjkim 2093197104Sjkim EntryOffset += EntryLength; 2094197104Sjkim DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, 2095306536Sjkim EntryLength); 2096197104Sjkim } 2097197104Sjkim } 2098197104Sjkim 2099197104SjkimNextSubTable: 2100281075Sdim /* Point to next subtable */ 2101197104Sjkim 2102197104Sjkim Offset += SubTable->Length; 2103197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length); 2104197104Sjkim } 2105197104Sjkim} 2106197104Sjkim 2107197104Sjkim 2108197104Sjkim/******************************************************************************* 2109197104Sjkim * 2110281075Sdim * FUNCTION: AcpiDmDumpLpit 2111281075Sdim * 2112281075Sdim * PARAMETERS: Table - A LPIT table 2113281075Sdim * 2114281075Sdim * RETURN: None 2115281075Sdim * 2116281075Sdim * DESCRIPTION: Format the contents of a LPIT. This table type consists 2117281075Sdim * of an open-ended number of subtables. Note: There are no 2118281075Sdim * entries in the main table. An LPIT consists of the table 2119281075Sdim * header and then subtables only. 2120281075Sdim * 2121281075Sdim ******************************************************************************/ 2122281075Sdim 2123281075Sdimvoid 2124281075SdimAcpiDmDumpLpit ( 2125281075Sdim ACPI_TABLE_HEADER *Table) 2126281075Sdim{ 2127281075Sdim ACPI_STATUS Status; 2128281075Sdim ACPI_LPIT_HEADER *SubTable; 2129281075Sdim UINT32 Length = Table->Length; 2130281075Sdim UINT32 Offset = sizeof (ACPI_TABLE_LPIT); 2131281075Sdim ACPI_DMTABLE_INFO *InfoTable; 2132281075Sdim UINT32 SubTableLength; 2133281075Sdim 2134281075Sdim 2135281075Sdim /* Subtables */ 2136281075Sdim 2137281075Sdim SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); 2138281075Sdim while (Offset < Table->Length) 2139281075Sdim { 2140281075Sdim /* Common subtable header */ 2141281075Sdim 2142281075Sdim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2143306536Sjkim sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); 2144281075Sdim if (ACPI_FAILURE (Status)) 2145281075Sdim { 2146281075Sdim return; 2147281075Sdim } 2148281075Sdim 2149281075Sdim switch (SubTable->Type) 2150281075Sdim { 2151281075Sdim case ACPI_LPIT_TYPE_NATIVE_CSTATE: 2152281075Sdim 2153281075Sdim InfoTable = AcpiDmTableInfoLpit0; 2154281075Sdim SubTableLength = sizeof (ACPI_LPIT_NATIVE); 2155281075Sdim break; 2156281075Sdim 2157281075Sdim default: 2158281075Sdim 2159281075Sdim /* Cannot continue on unknown type - no length */ 2160281075Sdim 2161306536Sjkim AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", 2162306536Sjkim SubTable->Type); 2163281075Sdim return; 2164281075Sdim } 2165281075Sdim 2166281075Sdim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2167306536Sjkim SubTableLength, InfoTable); 2168281075Sdim if (ACPI_FAILURE (Status)) 2169281075Sdim { 2170281075Sdim return; 2171281075Sdim } 2172306536Sjkim 2173281075Sdim AcpiOsPrintf ("\n"); 2174281075Sdim 2175281075Sdim /* Point to next subtable */ 2176281075Sdim 2177281075Sdim Offset += SubTableLength; 2178281075Sdim SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, SubTable, SubTableLength); 2179281075Sdim } 2180281075Sdim} 2181281075Sdim 2182281075Sdim 2183281075Sdim/******************************************************************************* 2184281075Sdim * 2185167802Sjkim * FUNCTION: AcpiDmDumpMadt 2186167802Sjkim * 2187167802Sjkim * PARAMETERS: Table - A MADT table 2188167802Sjkim * 2189167802Sjkim * RETURN: None 2190167802Sjkim * 2191167802Sjkim * DESCRIPTION: Format the contents of a MADT. This table type consists 2192167802Sjkim * of an open-ended number of subtables. 2193167802Sjkim * 2194167802Sjkim ******************************************************************************/ 2195167802Sjkim 2196167802Sjkimvoid 2197167802SjkimAcpiDmDumpMadt ( 2198167802Sjkim ACPI_TABLE_HEADER *Table) 2199167802Sjkim{ 2200193529Sjkim ACPI_STATUS Status; 2201167802Sjkim ACPI_SUBTABLE_HEADER *SubTable; 2202167802Sjkim UINT32 Length = Table->Length; 2203167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MADT); 2204167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 2205167802Sjkim 2206167802Sjkim 2207167802Sjkim /* Main table */ 2208167802Sjkim 2209193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); 2210193529Sjkim if (ACPI_FAILURE (Status)) 2211193529Sjkim { 2212193529Sjkim return; 2213193529Sjkim } 2214167802Sjkim 2215281075Sdim /* Subtables */ 2216167802Sjkim 2217167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); 2218167802Sjkim while (Offset < Table->Length) 2219167802Sjkim { 2220281075Sdim /* Common subtable header */ 2221167802Sjkim 2222167802Sjkim AcpiOsPrintf ("\n"); 2223193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2224306536Sjkim SubTable->Length, AcpiDmTableInfoMadtHdr); 2225193529Sjkim if (ACPI_FAILURE (Status)) 2226193529Sjkim { 2227193529Sjkim return; 2228193529Sjkim } 2229167802Sjkim 2230167802Sjkim switch (SubTable->Type) 2231167802Sjkim { 2232167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC: 2233250838Sjkim 2234167802Sjkim InfoTable = AcpiDmTableInfoMadt0; 2235167802Sjkim break; 2236250838Sjkim 2237167802Sjkim case ACPI_MADT_TYPE_IO_APIC: 2238250838Sjkim 2239167802Sjkim InfoTable = AcpiDmTableInfoMadt1; 2240167802Sjkim break; 2241250838Sjkim 2242167802Sjkim case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: 2243250838Sjkim 2244167802Sjkim InfoTable = AcpiDmTableInfoMadt2; 2245167802Sjkim break; 2246250838Sjkim 2247167802Sjkim case ACPI_MADT_TYPE_NMI_SOURCE: 2248250838Sjkim 2249167802Sjkim InfoTable = AcpiDmTableInfoMadt3; 2250167802Sjkim break; 2251250838Sjkim 2252167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC_NMI: 2253250838Sjkim 2254167802Sjkim InfoTable = AcpiDmTableInfoMadt4; 2255167802Sjkim break; 2256250838Sjkim 2257167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: 2258250838Sjkim 2259167802Sjkim InfoTable = AcpiDmTableInfoMadt5; 2260167802Sjkim break; 2261250838Sjkim 2262167802Sjkim case ACPI_MADT_TYPE_IO_SAPIC: 2263250838Sjkim 2264167802Sjkim InfoTable = AcpiDmTableInfoMadt6; 2265167802Sjkim break; 2266250838Sjkim 2267167802Sjkim case ACPI_MADT_TYPE_LOCAL_SAPIC: 2268250838Sjkim 2269167802Sjkim InfoTable = AcpiDmTableInfoMadt7; 2270167802Sjkim break; 2271250838Sjkim 2272167802Sjkim case ACPI_MADT_TYPE_INTERRUPT_SOURCE: 2273250838Sjkim 2274167802Sjkim InfoTable = AcpiDmTableInfoMadt8; 2275167802Sjkim break; 2276250838Sjkim 2277193529Sjkim case ACPI_MADT_TYPE_LOCAL_X2APIC: 2278250838Sjkim 2279193529Sjkim InfoTable = AcpiDmTableInfoMadt9; 2280193529Sjkim break; 2281250838Sjkim 2282193529Sjkim case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: 2283250838Sjkim 2284193529Sjkim InfoTable = AcpiDmTableInfoMadt10; 2285193529Sjkim break; 2286250838Sjkim 2287228110Sjkim case ACPI_MADT_TYPE_GENERIC_INTERRUPT: 2288250838Sjkim 2289228110Sjkim InfoTable = AcpiDmTableInfoMadt11; 2290228110Sjkim break; 2291250838Sjkim 2292228110Sjkim case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: 2293250838Sjkim 2294228110Sjkim InfoTable = AcpiDmTableInfoMadt12; 2295228110Sjkim break; 2296250838Sjkim 2297281075Sdim case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: 2298281075Sdim 2299281075Sdim InfoTable = AcpiDmTableInfoMadt13; 2300281075Sdim break; 2301281075Sdim 2302281075Sdim case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: 2303281075Sdim 2304281075Sdim InfoTable = AcpiDmTableInfoMadt14; 2305281075Sdim break; 2306281075Sdim 2307284460Sjkim case ACPI_MADT_TYPE_GENERIC_TRANSLATOR: 2308284460Sjkim 2309284460Sjkim InfoTable = AcpiDmTableInfoMadt15; 2310284460Sjkim break; 2311284460Sjkim 2312167802Sjkim default: 2313250838Sjkim 2314306536Sjkim AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", 2315306536Sjkim SubTable->Type); 2316193529Sjkim 2317193529Sjkim /* Attempt to continue */ 2318193529Sjkim 2319193529Sjkim if (!SubTable->Length) 2320193529Sjkim { 2321193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2322193529Sjkim return; 2323193529Sjkim } 2324306536Sjkim 2325193529Sjkim goto NextSubTable; 2326193529Sjkim } 2327193529Sjkim 2328193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2329306536Sjkim SubTable->Length, InfoTable); 2330193529Sjkim if (ACPI_FAILURE (Status)) 2331193529Sjkim { 2332167802Sjkim return; 2333167802Sjkim } 2334167802Sjkim 2335193529SjkimNextSubTable: 2336281075Sdim /* Point to next subtable */ 2337167802Sjkim 2338167802Sjkim Offset += SubTable->Length; 2339306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, 2340306536Sjkim SubTable->Length); 2341167802Sjkim } 2342167802Sjkim} 2343167802Sjkim 2344167802Sjkim 2345167802Sjkim/******************************************************************************* 2346167802Sjkim * 2347167802Sjkim * FUNCTION: AcpiDmDumpMcfg 2348167802Sjkim * 2349167802Sjkim * PARAMETERS: Table - A MCFG Table 2350167802Sjkim * 2351167802Sjkim * RETURN: None 2352167802Sjkim * 2353167802Sjkim * DESCRIPTION: Format the contents of a MCFG table 2354167802Sjkim * 2355167802Sjkim ******************************************************************************/ 2356167802Sjkim 2357167802Sjkimvoid 2358167802SjkimAcpiDmDumpMcfg ( 2359167802Sjkim ACPI_TABLE_HEADER *Table) 2360167802Sjkim{ 2361193529Sjkim ACPI_STATUS Status; 2362167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MCFG); 2363167802Sjkim ACPI_MCFG_ALLOCATION *SubTable; 2364167802Sjkim 2365167802Sjkim 2366167802Sjkim /* Main table */ 2367167802Sjkim 2368193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); 2369193529Sjkim if (ACPI_FAILURE (Status)) 2370193529Sjkim { 2371193529Sjkim return; 2372193529Sjkim } 2373167802Sjkim 2374281075Sdim /* Subtables */ 2375167802Sjkim 2376167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); 2377167802Sjkim while (Offset < Table->Length) 2378167802Sjkim { 2379167802Sjkim if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) 2380167802Sjkim { 2381209746Sjkim AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", 2382167802Sjkim sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); 2383167802Sjkim return; 2384167802Sjkim } 2385167802Sjkim 2386167802Sjkim AcpiOsPrintf ("\n"); 2387193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2388306536Sjkim sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); 2389193529Sjkim if (ACPI_FAILURE (Status)) 2390193529Sjkim { 2391193529Sjkim return; 2392193529Sjkim } 2393167802Sjkim 2394281075Sdim /* Point to next subtable (each subtable is of fixed length) */ 2395167802Sjkim 2396167802Sjkim Offset += sizeof (ACPI_MCFG_ALLOCATION); 2397167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable, 2398306536Sjkim sizeof (ACPI_MCFG_ALLOCATION)); 2399167802Sjkim } 2400167802Sjkim} 2401167802Sjkim 2402167802Sjkim 2403167802Sjkim/******************************************************************************* 2404167802Sjkim * 2405228110Sjkim * FUNCTION: AcpiDmDumpMpst 2406228110Sjkim * 2407228110Sjkim * PARAMETERS: Table - A MPST Table 2408228110Sjkim * 2409228110Sjkim * RETURN: None 2410228110Sjkim * 2411228110Sjkim * DESCRIPTION: Format the contents of a MPST table 2412228110Sjkim * 2413228110Sjkim ******************************************************************************/ 2414228110Sjkim 2415228110Sjkimvoid 2416228110SjkimAcpiDmDumpMpst ( 2417228110Sjkim ACPI_TABLE_HEADER *Table) 2418228110Sjkim{ 2419228110Sjkim ACPI_STATUS Status; 2420228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MPST); 2421228110Sjkim ACPI_MPST_POWER_NODE *SubTable0; 2422228110Sjkim ACPI_MPST_POWER_STATE *SubTable0A; 2423228110Sjkim ACPI_MPST_COMPONENT *SubTable0B; 2424228110Sjkim ACPI_MPST_DATA_HDR *SubTable1; 2425228110Sjkim ACPI_MPST_POWER_DATA *SubTable2; 2426228110Sjkim UINT16 SubtableCount; 2427241973Sjkim UINT32 PowerStateCount; 2428241973Sjkim UINT32 ComponentCount; 2429228110Sjkim 2430228110Sjkim 2431228110Sjkim /* Main table */ 2432228110Sjkim 2433228110Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); 2434228110Sjkim if (ACPI_FAILURE (Status)) 2435228110Sjkim { 2436228110Sjkim return; 2437228110Sjkim } 2438228110Sjkim 2439228110Sjkim /* Subtable: Memory Power Node(s) */ 2440228110Sjkim 2441228110Sjkim SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; 2442228110Sjkim SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); 2443228110Sjkim 2444228110Sjkim while ((Offset < Table->Length) && SubtableCount) 2445228110Sjkim { 2446228110Sjkim AcpiOsPrintf ("\n"); 2447228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0, 2448306536Sjkim sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); 2449228110Sjkim if (ACPI_FAILURE (Status)) 2450228110Sjkim { 2451228110Sjkim return; 2452228110Sjkim } 2453228110Sjkim 2454228110Sjkim /* Extract the sub-subtable counts */ 2455228110Sjkim 2456228110Sjkim PowerStateCount = SubTable0->NumPowerStates; 2457228110Sjkim ComponentCount = SubTable0->NumPhysicalComponents; 2458228110Sjkim Offset += sizeof (ACPI_MPST_POWER_NODE); 2459228110Sjkim 2460228110Sjkim /* Sub-subtables - Memory Power State Structure(s) */ 2461228110Sjkim 2462228110Sjkim SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0, 2463228110Sjkim sizeof (ACPI_MPST_POWER_NODE)); 2464228110Sjkim 2465228110Sjkim while (PowerStateCount) 2466228110Sjkim { 2467228110Sjkim AcpiOsPrintf ("\n"); 2468228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A, 2469306536Sjkim sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); 2470228110Sjkim if (ACPI_FAILURE (Status)) 2471228110Sjkim { 2472228110Sjkim return; 2473228110Sjkim } 2474228110Sjkim 2475228110Sjkim SubTable0A++; 2476228110Sjkim PowerStateCount--; 2477228110Sjkim Offset += sizeof (ACPI_MPST_POWER_STATE); 2478228110Sjkim } 2479228110Sjkim 2480228110Sjkim /* Sub-subtables - Physical Component ID Structure(s) */ 2481228110Sjkim 2482228110Sjkim SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A); 2483228110Sjkim 2484228110Sjkim if (ComponentCount) 2485228110Sjkim { 2486228110Sjkim AcpiOsPrintf ("\n"); 2487228110Sjkim } 2488228110Sjkim 2489228110Sjkim while (ComponentCount) 2490228110Sjkim { 2491228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B, 2492306536Sjkim sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); 2493228110Sjkim if (ACPI_FAILURE (Status)) 2494228110Sjkim { 2495228110Sjkim return; 2496228110Sjkim } 2497228110Sjkim 2498228110Sjkim SubTable0B++; 2499228110Sjkim ComponentCount--; 2500228110Sjkim Offset += sizeof (ACPI_MPST_COMPONENT); 2501228110Sjkim } 2502228110Sjkim 2503228110Sjkim /* Point to next Memory Power Node subtable */ 2504228110Sjkim 2505228110Sjkim SubtableCount--; 2506228110Sjkim SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0, 2507228110Sjkim sizeof (ACPI_MPST_POWER_NODE) + 2508228110Sjkim (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) + 2509228110Sjkim (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents)); 2510228110Sjkim } 2511228110Sjkim 2512228110Sjkim /* Subtable: Count of Memory Power State Characteristic structures */ 2513228110Sjkim 2514228110Sjkim AcpiOsPrintf ("\n"); 2515228110Sjkim SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0); 2516228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1, 2517306536Sjkim sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); 2518228110Sjkim if (ACPI_FAILURE (Status)) 2519228110Sjkim { 2520228110Sjkim return; 2521228110Sjkim } 2522228110Sjkim 2523228110Sjkim SubtableCount = SubTable1->CharacteristicsCount; 2524228110Sjkim Offset += sizeof (ACPI_MPST_DATA_HDR); 2525228110Sjkim 2526228110Sjkim /* Subtable: Memory Power State Characteristics structure(s) */ 2527228110Sjkim 2528306536Sjkim SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1, 2529306536Sjkim sizeof (ACPI_MPST_DATA_HDR)); 2530228110Sjkim 2531228110Sjkim while ((Offset < Table->Length) && SubtableCount) 2532228110Sjkim { 2533228110Sjkim AcpiOsPrintf ("\n"); 2534228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2, 2535306536Sjkim sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); 2536228110Sjkim if (ACPI_FAILURE (Status)) 2537228110Sjkim { 2538228110Sjkim return; 2539228110Sjkim } 2540228110Sjkim 2541228110Sjkim SubTable2++; 2542228110Sjkim SubtableCount--; 2543228110Sjkim Offset += sizeof (ACPI_MPST_POWER_DATA); 2544228110Sjkim } 2545228110Sjkim} 2546228110Sjkim 2547228110Sjkim 2548228110Sjkim/******************************************************************************* 2549228110Sjkim * 2550197104Sjkim * FUNCTION: AcpiDmDumpMsct 2551197104Sjkim * 2552197104Sjkim * PARAMETERS: Table - A MSCT table 2553197104Sjkim * 2554197104Sjkim * RETURN: None 2555197104Sjkim * 2556197104Sjkim * DESCRIPTION: Format the contents of a MSCT 2557197104Sjkim * 2558197104Sjkim ******************************************************************************/ 2559197104Sjkim 2560197104Sjkimvoid 2561197104SjkimAcpiDmDumpMsct ( 2562197104Sjkim ACPI_TABLE_HEADER *Table) 2563197104Sjkim{ 2564197104Sjkim ACPI_STATUS Status; 2565197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MSCT); 2566197104Sjkim ACPI_MSCT_PROXIMITY *SubTable; 2567197104Sjkim 2568197104Sjkim 2569197104Sjkim /* Main table */ 2570197104Sjkim 2571197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); 2572197104Sjkim if (ACPI_FAILURE (Status)) 2573197104Sjkim { 2574197104Sjkim return; 2575197104Sjkim } 2576197104Sjkim 2577281075Sdim /* Subtables */ 2578197104Sjkim 2579197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); 2580197104Sjkim while (Offset < Table->Length) 2581197104Sjkim { 2582281075Sdim /* Common subtable header */ 2583197104Sjkim 2584197104Sjkim AcpiOsPrintf ("\n"); 2585197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2586306536Sjkim sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); 2587197104Sjkim if (ACPI_FAILURE (Status)) 2588197104Sjkim { 2589197104Sjkim return; 2590197104Sjkim } 2591197104Sjkim 2592281075Sdim /* Point to next subtable */ 2593197104Sjkim 2594197104Sjkim Offset += sizeof (ACPI_MSCT_PROXIMITY); 2595306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, 2596306536Sjkim sizeof (ACPI_MSCT_PROXIMITY)); 2597197104Sjkim } 2598197104Sjkim} 2599197104Sjkim 2600197104Sjkim 2601197104Sjkim/******************************************************************************* 2602197104Sjkim * 2603246849Sjkim * FUNCTION: AcpiDmDumpMtmr 2604246849Sjkim * 2605246849Sjkim * PARAMETERS: Table - A MTMR table 2606246849Sjkim * 2607246849Sjkim * RETURN: None 2608246849Sjkim * 2609246849Sjkim * DESCRIPTION: Format the contents of a MTMR 2610246849Sjkim * 2611246849Sjkim ******************************************************************************/ 2612246849Sjkim 2613246849Sjkimvoid 2614246849SjkimAcpiDmDumpMtmr ( 2615246849Sjkim ACPI_TABLE_HEADER *Table) 2616246849Sjkim{ 2617246849Sjkim ACPI_STATUS Status; 2618246849Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MTMR); 2619246849Sjkim ACPI_MTMR_ENTRY *SubTable; 2620246849Sjkim 2621246849Sjkim 2622246849Sjkim /* Main table */ 2623246849Sjkim 2624246849Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); 2625246849Sjkim if (ACPI_FAILURE (Status)) 2626246849Sjkim { 2627246849Sjkim return; 2628246849Sjkim } 2629246849Sjkim 2630281075Sdim /* Subtables */ 2631246849Sjkim 2632246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); 2633246849Sjkim while (Offset < Table->Length) 2634246849Sjkim { 2635281075Sdim /* Common subtable header */ 2636246849Sjkim 2637246849Sjkim AcpiOsPrintf ("\n"); 2638246849Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2639306536Sjkim sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); 2640246849Sjkim if (ACPI_FAILURE (Status)) 2641246849Sjkim { 2642246849Sjkim return; 2643246849Sjkim } 2644246849Sjkim 2645281075Sdim /* Point to next subtable */ 2646246849Sjkim 2647246849Sjkim Offset += sizeof (ACPI_MTMR_ENTRY); 2648306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, 2649306536Sjkim sizeof (ACPI_MTMR_ENTRY)); 2650246849Sjkim } 2651246849Sjkim} 2652246849Sjkim 2653246849Sjkim 2654246849Sjkim/******************************************************************************* 2655246849Sjkim * 2656284460Sjkim * FUNCTION: AcpiDmDumpNfit 2657284460Sjkim * 2658284460Sjkim * PARAMETERS: Table - A NFIT table 2659284460Sjkim * 2660284460Sjkim * RETURN: None 2661284460Sjkim * 2662284460Sjkim * DESCRIPTION: Format the contents of an NFIT. 2663284460Sjkim * 2664284460Sjkim ******************************************************************************/ 2665284460Sjkim 2666284460Sjkimvoid 2667284460SjkimAcpiDmDumpNfit ( 2668284460Sjkim ACPI_TABLE_HEADER *Table) 2669284460Sjkim{ 2670284460Sjkim ACPI_STATUS Status; 2671284460Sjkim UINT32 Offset = sizeof (ACPI_TABLE_NFIT); 2672284460Sjkim UINT32 FieldOffset = 0; 2673284460Sjkim UINT32 Length; 2674284460Sjkim ACPI_NFIT_HEADER *SubTable; 2675284460Sjkim ACPI_DMTABLE_INFO *InfoTable; 2676284460Sjkim ACPI_NFIT_INTERLEAVE *Interleave = NULL; 2677284460Sjkim ACPI_NFIT_SMBIOS *SmbiosInfo = NULL; 2678284460Sjkim ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; 2679284460Sjkim UINT32 i; 2680284460Sjkim 2681284460Sjkim 2682284460Sjkim /* Main table */ 2683284460Sjkim 2684284460Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit); 2685284460Sjkim if (ACPI_FAILURE (Status)) 2686284460Sjkim { 2687284460Sjkim return; 2688284460Sjkim } 2689284460Sjkim 2690284460Sjkim /* Subtables */ 2691284460Sjkim 2692284460Sjkim SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset); 2693284460Sjkim while (Offset < Table->Length) 2694284460Sjkim { 2695284460Sjkim /* NFIT subtable header */ 2696284460Sjkim 2697284460Sjkim AcpiOsPrintf ("\n"); 2698284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2699306536Sjkim SubTable->Length, AcpiDmTableInfoNfitHdr); 2700284460Sjkim if (ACPI_FAILURE (Status)) 2701284460Sjkim { 2702284460Sjkim return; 2703284460Sjkim } 2704284460Sjkim 2705284460Sjkim switch (SubTable->Type) 2706284460Sjkim { 2707284460Sjkim case ACPI_NFIT_TYPE_SYSTEM_ADDRESS: 2708284460Sjkim 2709284460Sjkim InfoTable = AcpiDmTableInfoNfit0; 2710284460Sjkim break; 2711284460Sjkim 2712284460Sjkim case ACPI_NFIT_TYPE_MEMORY_MAP: 2713284460Sjkim 2714284460Sjkim InfoTable = AcpiDmTableInfoNfit1; 2715284460Sjkim break; 2716284460Sjkim 2717284460Sjkim case ACPI_NFIT_TYPE_INTERLEAVE: 2718284460Sjkim 2719284460Sjkim /* Has a variable number of 32-bit values at the end */ 2720284460Sjkim 2721284460Sjkim InfoTable = AcpiDmTableInfoNfit2; 2722284460Sjkim Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, SubTable); 2723284460Sjkim FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE); 2724284460Sjkim break; 2725284460Sjkim 2726284460Sjkim case ACPI_NFIT_TYPE_SMBIOS: 2727284460Sjkim 2728284460Sjkim SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, SubTable); 2729284460Sjkim InfoTable = AcpiDmTableInfoNfit3; 2730284460Sjkim break; 2731284460Sjkim 2732284460Sjkim case ACPI_NFIT_TYPE_CONTROL_REGION: 2733284460Sjkim 2734284460Sjkim InfoTable = AcpiDmTableInfoNfit4; 2735284460Sjkim break; 2736284460Sjkim 2737284460Sjkim case ACPI_NFIT_TYPE_DATA_REGION: 2738284460Sjkim 2739284460Sjkim InfoTable = AcpiDmTableInfoNfit5; 2740284460Sjkim break; 2741284460Sjkim 2742284460Sjkim case ACPI_NFIT_TYPE_FLUSH_ADDRESS: 2743284460Sjkim 2744284460Sjkim /* Has a variable number of 64-bit addresses at the end */ 2745284460Sjkim 2746284460Sjkim InfoTable = AcpiDmTableInfoNfit6; 2747284460Sjkim Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, SubTable); 2748284460Sjkim FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64); 2749284460Sjkim break; 2750284460Sjkim 2751284460Sjkim default: 2752306536Sjkim AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n", 2753306536Sjkim SubTable->Type); 2754284460Sjkim 2755284460Sjkim /* Attempt to continue */ 2756284460Sjkim 2757284460Sjkim if (!SubTable->Length) 2758284460Sjkim { 2759284460Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2760284460Sjkim return; 2761284460Sjkim } 2762284460Sjkim goto NextSubTable; 2763284460Sjkim } 2764284460Sjkim 2765284460Sjkim AcpiOsPrintf ("\n"); 2766284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2767306536Sjkim SubTable->Length, InfoTable); 2768284460Sjkim if (ACPI_FAILURE (Status)) 2769284460Sjkim { 2770284460Sjkim return; 2771284460Sjkim } 2772284460Sjkim 2773284460Sjkim /* Per-subtable variable-length fields */ 2774284460Sjkim 2775284460Sjkim switch (SubTable->Type) 2776284460Sjkim { 2777284460Sjkim case ACPI_NFIT_TYPE_INTERLEAVE: 2778284460Sjkim 2779284460Sjkim for (i = 0; i < Interleave->LineCount; i++) 2780284460Sjkim { 2781284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, 2782306536Sjkim &Interleave->LineOffset[i], 2783306536Sjkim sizeof (UINT32), AcpiDmTableInfoNfit2a); 2784306536Sjkim if (ACPI_FAILURE (Status)) 2785306536Sjkim { 2786306536Sjkim return; 2787306536Sjkim } 2788306536Sjkim 2789284460Sjkim FieldOffset += sizeof (UINT32); 2790284460Sjkim } 2791284460Sjkim break; 2792284460Sjkim 2793284460Sjkim case ACPI_NFIT_TYPE_SMBIOS: 2794284460Sjkim 2795306536Sjkim Length = SubTable->Length - 2796306536Sjkim sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8); 2797306536Sjkim 2798284460Sjkim if (Length) 2799284460Sjkim { 2800284460Sjkim Status = AcpiDmDumpTable (Table->Length, 2801306536Sjkim sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8), 2802306536Sjkim SmbiosInfo, 2803306536Sjkim Length, AcpiDmTableInfoNfit3a); 2804284460Sjkim if (ACPI_FAILURE (Status)) 2805284460Sjkim { 2806284460Sjkim return; 2807284460Sjkim } 2808284460Sjkim } 2809284460Sjkim 2810284460Sjkim break; 2811284460Sjkim 2812284460Sjkim case ACPI_NFIT_TYPE_FLUSH_ADDRESS: 2813284460Sjkim 2814284460Sjkim for (i = 0; i < Hint->HintCount; i++) 2815284460Sjkim { 2816284460Sjkim Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset, 2817306536Sjkim &Hint->HintAddress[i], 2818306536Sjkim sizeof (UINT64), AcpiDmTableInfoNfit6a); 2819306536Sjkim if (ACPI_FAILURE (Status)) 2820306536Sjkim { 2821306536Sjkim return; 2822306536Sjkim } 2823306536Sjkim 2824284460Sjkim FieldOffset += sizeof (UINT64); 2825284460Sjkim } 2826284460Sjkim break; 2827284460Sjkim 2828284460Sjkim default: 2829284460Sjkim break; 2830284460Sjkim } 2831284460Sjkim 2832284460SjkimNextSubTable: 2833284460Sjkim /* Point to next subtable */ 2834284460Sjkim 2835284460Sjkim Offset += SubTable->Length; 2836284460Sjkim SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, SubTable, SubTable->Length); 2837284460Sjkim } 2838284460Sjkim} 2839284460Sjkim 2840284460Sjkim 2841284460Sjkim/******************************************************************************* 2842284460Sjkim * 2843228110Sjkim * FUNCTION: AcpiDmDumpPcct 2844228110Sjkim * 2845228110Sjkim * PARAMETERS: Table - A PCCT table 2846228110Sjkim * 2847228110Sjkim * RETURN: None 2848228110Sjkim * 2849228110Sjkim * DESCRIPTION: Format the contents of a PCCT. This table type consists 2850228110Sjkim * of an open-ended number of subtables. 2851228110Sjkim * 2852228110Sjkim ******************************************************************************/ 2853228110Sjkim 2854228110Sjkimvoid 2855228110SjkimAcpiDmDumpPcct ( 2856228110Sjkim ACPI_TABLE_HEADER *Table) 2857228110Sjkim{ 2858228110Sjkim ACPI_STATUS Status; 2859228110Sjkim ACPI_PCCT_SUBSPACE *SubTable; 2860281075Sdim ACPI_DMTABLE_INFO *InfoTable; 2861228110Sjkim UINT32 Length = Table->Length; 2862228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_PCCT); 2863228110Sjkim 2864228110Sjkim 2865228110Sjkim /* Main table */ 2866228110Sjkim 2867228110Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); 2868228110Sjkim if (ACPI_FAILURE (Status)) 2869228110Sjkim { 2870228110Sjkim return; 2871228110Sjkim } 2872228110Sjkim 2873281075Sdim /* Subtables */ 2874228110Sjkim 2875228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); 2876228110Sjkim while (Offset < Table->Length) 2877228110Sjkim { 2878281075Sdim /* Common subtable header */ 2879281075Sdim 2880228110Sjkim AcpiOsPrintf ("\n"); 2881228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2882306536Sjkim SubTable->Header.Length, AcpiDmTableInfoPcctHdr); 2883228110Sjkim if (ACPI_FAILURE (Status)) 2884228110Sjkim { 2885228110Sjkim return; 2886228110Sjkim } 2887228110Sjkim 2888281075Sdim switch (SubTable->Header.Type) 2889281075Sdim { 2890281075Sdim case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: 2891228110Sjkim 2892281075Sdim InfoTable = AcpiDmTableInfoPcct0; 2893281075Sdim break; 2894281075Sdim 2895281075Sdim case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: 2896281075Sdim 2897281075Sdim InfoTable = AcpiDmTableInfoPcct1; 2898281075Sdim break; 2899281075Sdim 2900306536Sjkim case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2: 2901306536Sjkim 2902306536Sjkim InfoTable = AcpiDmTableInfoPcct2; 2903306536Sjkim break; 2904306536Sjkim 2905281075Sdim default: 2906281075Sdim 2907281075Sdim AcpiOsPrintf ( 2908281075Sdim "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", 2909281075Sdim SubTable->Header.Type); 2910281075Sdim return; 2911281075Sdim } 2912281075Sdim 2913281075Sdim AcpiOsPrintf ("\n"); 2914281075Sdim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2915306536Sjkim SubTable->Header.Length, InfoTable); 2916281075Sdim if (ACPI_FAILURE (Status)) 2917281075Sdim { 2918281075Sdim return; 2919281075Sdim } 2920281075Sdim 2921281075Sdim /* Point to next subtable */ 2922281075Sdim 2923228110Sjkim Offset += SubTable->Header.Length; 2924228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable, 2925306536Sjkim SubTable->Header.Length); 2926228110Sjkim } 2927228110Sjkim} 2928228110Sjkim 2929228110Sjkim 2930228110Sjkim/******************************************************************************* 2931228110Sjkim * 2932228110Sjkim * FUNCTION: AcpiDmDumpPmtt 2933228110Sjkim * 2934228110Sjkim * PARAMETERS: Table - A PMTT table 2935228110Sjkim * 2936228110Sjkim * RETURN: None 2937228110Sjkim * 2938228110Sjkim * DESCRIPTION: Format the contents of a PMTT. This table type consists 2939228110Sjkim * of an open-ended number of subtables. 2940228110Sjkim * 2941228110Sjkim ******************************************************************************/ 2942228110Sjkim 2943228110Sjkimvoid 2944228110SjkimAcpiDmDumpPmtt ( 2945228110Sjkim ACPI_TABLE_HEADER *Table) 2946228110Sjkim{ 2947228110Sjkim ACPI_STATUS Status; 2948228110Sjkim ACPI_PMTT_HEADER *SubTable; 2949228110Sjkim ACPI_PMTT_HEADER *MemSubTable; 2950228110Sjkim ACPI_PMTT_HEADER *DimmSubTable; 2951228110Sjkim ACPI_PMTT_DOMAIN *DomainArray; 2952228110Sjkim UINT32 Length = Table->Length; 2953228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_PMTT); 2954228110Sjkim UINT32 MemOffset; 2955228110Sjkim UINT32 DimmOffset; 2956228110Sjkim UINT32 DomainOffset; 2957228110Sjkim UINT32 DomainCount; 2958228110Sjkim 2959228110Sjkim 2960228110Sjkim /* Main table */ 2961228110Sjkim 2962228110Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); 2963228110Sjkim if (ACPI_FAILURE (Status)) 2964228110Sjkim { 2965228110Sjkim return; 2966228110Sjkim } 2967228110Sjkim 2968228110Sjkim /* Subtables */ 2969228110Sjkim 2970228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); 2971228110Sjkim while (Offset < Table->Length) 2972228110Sjkim { 2973228110Sjkim /* Common subtable header */ 2974228110Sjkim 2975228110Sjkim AcpiOsPrintf ("\n"); 2976228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2977306536Sjkim SubTable->Length, AcpiDmTableInfoPmttHdr); 2978228110Sjkim if (ACPI_FAILURE (Status)) 2979228110Sjkim { 2980228110Sjkim return; 2981228110Sjkim } 2982228110Sjkim 2983228110Sjkim /* Only Socket subtables are expected at this level */ 2984228110Sjkim 2985228110Sjkim if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET) 2986228110Sjkim { 2987228110Sjkim AcpiOsPrintf ( 2988228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2989228110Sjkim SubTable->Type); 2990228110Sjkim return; 2991228110Sjkim } 2992228110Sjkim 2993228110Sjkim /* Dump the fixed-length portion of the subtable */ 2994228110Sjkim 2995228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2996306536Sjkim SubTable->Length, AcpiDmTableInfoPmtt0); 2997228110Sjkim if (ACPI_FAILURE (Status)) 2998228110Sjkim { 2999228110Sjkim return; 3000228110Sjkim } 3001228110Sjkim 3002228110Sjkim /* Walk the memory controller subtables */ 3003228110Sjkim 3004228110Sjkim MemOffset = sizeof (ACPI_PMTT_SOCKET); 3005228110Sjkim MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable, 3006228110Sjkim sizeof (ACPI_PMTT_SOCKET)); 3007228110Sjkim 3008228110Sjkim while (((Offset + MemOffset) < Table->Length) && 3009228110Sjkim (MemOffset < SubTable->Length)) 3010228110Sjkim { 3011228110Sjkim /* Common subtable header */ 3012228110Sjkim 3013228110Sjkim AcpiOsPrintf ("\n"); 3014228110Sjkim Status = AcpiDmDumpTable (Length, 3015306536Sjkim Offset + MemOffset, MemSubTable, 3016306536Sjkim MemSubTable->Length, AcpiDmTableInfoPmttHdr); 3017228110Sjkim if (ACPI_FAILURE (Status)) 3018228110Sjkim { 3019228110Sjkim return; 3020228110Sjkim } 3021228110Sjkim 3022228110Sjkim /* Only memory controller subtables are expected at this level */ 3023228110Sjkim 3024228110Sjkim if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER) 3025228110Sjkim { 3026228110Sjkim AcpiOsPrintf ( 3027228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 3028228110Sjkim MemSubTable->Type); 3029228110Sjkim return; 3030228110Sjkim } 3031228110Sjkim 3032228110Sjkim /* Dump the fixed-length portion of the controller subtable */ 3033228110Sjkim 3034228110Sjkim Status = AcpiDmDumpTable (Length, 3035306536Sjkim Offset + MemOffset, MemSubTable, 3036306536Sjkim MemSubTable->Length, AcpiDmTableInfoPmtt1); 3037228110Sjkim if (ACPI_FAILURE (Status)) 3038228110Sjkim { 3039228110Sjkim return; 3040228110Sjkim } 3041228110Sjkim 3042228110Sjkim /* Walk the variable count of proximity domains */ 3043228110Sjkim 3044228110Sjkim DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount; 3045228110Sjkim DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); 3046228110Sjkim DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable, 3047228110Sjkim sizeof (ACPI_PMTT_CONTROLLER)); 3048228110Sjkim 3049228110Sjkim while (((Offset + MemOffset + DomainOffset) < Table->Length) && 3050228110Sjkim ((MemOffset + DomainOffset) < SubTable->Length) && 3051228110Sjkim DomainCount) 3052228110Sjkim { 3053228110Sjkim Status = AcpiDmDumpTable (Length, 3054306536Sjkim Offset + MemOffset + DomainOffset, DomainArray, 3055306536Sjkim sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); 3056228110Sjkim if (ACPI_FAILURE (Status)) 3057228110Sjkim { 3058228110Sjkim return; 3059228110Sjkim } 3060228110Sjkim 3061228110Sjkim DomainOffset += sizeof (ACPI_PMTT_DOMAIN); 3062228110Sjkim DomainArray++; 3063228110Sjkim DomainCount--; 3064228110Sjkim } 3065228110Sjkim 3066228110Sjkim if (DomainCount) 3067228110Sjkim { 3068228110Sjkim AcpiOsPrintf ( 3069281075Sdim "\n**** DomainCount exceeds subtable length\n\n"); 3070228110Sjkim } 3071228110Sjkim 3072228110Sjkim /* Walk the physical component (DIMM) subtables */ 3073228110Sjkim 3074228110Sjkim DimmOffset = DomainOffset; 3075228110Sjkim DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable, 3076228110Sjkim DomainOffset); 3077228110Sjkim 3078228110Sjkim while (((Offset + MemOffset + DimmOffset) < Table->Length) && 3079228110Sjkim (DimmOffset < MemSubTable->Length)) 3080228110Sjkim { 3081228110Sjkim /* Common subtable header */ 3082228110Sjkim 3083228110Sjkim AcpiOsPrintf ("\n"); 3084228110Sjkim Status = AcpiDmDumpTable (Length, 3085306536Sjkim Offset + MemOffset + DimmOffset, DimmSubTable, 3086306536Sjkim DimmSubTable->Length, AcpiDmTableInfoPmttHdr); 3087228110Sjkim if (ACPI_FAILURE (Status)) 3088228110Sjkim { 3089228110Sjkim return; 3090228110Sjkim } 3091228110Sjkim 3092228110Sjkim /* Only DIMM subtables are expected at this level */ 3093228110Sjkim 3094228110Sjkim if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM) 3095228110Sjkim { 3096228110Sjkim AcpiOsPrintf ( 3097228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 3098228110Sjkim DimmSubTable->Type); 3099228110Sjkim return; 3100228110Sjkim } 3101228110Sjkim 3102228110Sjkim /* Dump the fixed-length DIMM subtable */ 3103228110Sjkim 3104228110Sjkim Status = AcpiDmDumpTable (Length, 3105306536Sjkim Offset + MemOffset + DimmOffset, DimmSubTable, 3106306536Sjkim DimmSubTable->Length, AcpiDmTableInfoPmtt2); 3107228110Sjkim if (ACPI_FAILURE (Status)) 3108228110Sjkim { 3109228110Sjkim return; 3110228110Sjkim } 3111228110Sjkim 3112228110Sjkim /* Point to next DIMM subtable */ 3113228110Sjkim 3114228110Sjkim DimmOffset += DimmSubTable->Length; 3115228110Sjkim DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 3116228110Sjkim DimmSubTable, DimmSubTable->Length); 3117228110Sjkim } 3118228110Sjkim 3119228110Sjkim /* Point to next Controller subtable */ 3120228110Sjkim 3121228110Sjkim MemOffset += MemSubTable->Length; 3122228110Sjkim MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 3123228110Sjkim MemSubTable, MemSubTable->Length); 3124228110Sjkim } 3125228110Sjkim 3126228110Sjkim /* Point to next Socket subtable */ 3127228110Sjkim 3128228110Sjkim Offset += SubTable->Length; 3129228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 3130228110Sjkim SubTable, SubTable->Length); 3131228110Sjkim } 3132228110Sjkim} 3133228110Sjkim 3134228110Sjkim 3135228110Sjkim/******************************************************************************* 3136228110Sjkim * 3137228110Sjkim * FUNCTION: AcpiDmDumpS3pt 3138228110Sjkim * 3139228110Sjkim * PARAMETERS: Table - A S3PT table 3140228110Sjkim * 3141228110Sjkim * RETURN: Length of the table 3142228110Sjkim * 3143228110Sjkim * DESCRIPTION: Format the contents of a S3PT 3144228110Sjkim * 3145228110Sjkim ******************************************************************************/ 3146228110Sjkim 3147228110SjkimUINT32 3148228110SjkimAcpiDmDumpS3pt ( 3149228110Sjkim ACPI_TABLE_HEADER *Tables) 3150228110Sjkim{ 3151228110Sjkim ACPI_STATUS Status; 3152228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_S3PT); 3153306536Sjkim ACPI_FPDT_HEADER *SubTable; 3154228110Sjkim ACPI_DMTABLE_INFO *InfoTable; 3155228110Sjkim ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); 3156228110Sjkim 3157228110Sjkim 3158228110Sjkim /* Main table */ 3159228110Sjkim 3160228110Sjkim Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); 3161228110Sjkim if (ACPI_FAILURE (Status)) 3162228110Sjkim { 3163228110Sjkim return 0; 3164228110Sjkim } 3165228110Sjkim 3166306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset); 3167228110Sjkim while (Offset < S3ptTable->Length) 3168228110Sjkim { 3169281075Sdim /* Common subtable header */ 3170228110Sjkim 3171228110Sjkim AcpiOsPrintf ("\n"); 3172228110Sjkim Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable, 3173306536Sjkim SubTable->Length, AcpiDmTableInfoS3ptHdr); 3174228110Sjkim if (ACPI_FAILURE (Status)) 3175228110Sjkim { 3176228110Sjkim return 0; 3177228110Sjkim } 3178228110Sjkim 3179228110Sjkim switch (SubTable->Type) 3180228110Sjkim { 3181228110Sjkim case ACPI_S3PT_TYPE_RESUME: 3182250838Sjkim 3183228110Sjkim InfoTable = AcpiDmTableInfoS3pt0; 3184228110Sjkim break; 3185250838Sjkim 3186228110Sjkim case ACPI_S3PT_TYPE_SUSPEND: 3187250838Sjkim 3188228110Sjkim InfoTable = AcpiDmTableInfoS3pt1; 3189228110Sjkim break; 3190250838Sjkim 3191228110Sjkim default: 3192250838Sjkim 3193306536Sjkim AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", 3194306536Sjkim SubTable->Type); 3195228110Sjkim 3196228110Sjkim /* Attempt to continue */ 3197228110Sjkim 3198228110Sjkim if (!SubTable->Length) 3199228110Sjkim { 3200228110Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 3201228110Sjkim return 0; 3202228110Sjkim } 3203228110Sjkim goto NextSubTable; 3204228110Sjkim } 3205228110Sjkim 3206228110Sjkim AcpiOsPrintf ("\n"); 3207228110Sjkim Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable, 3208306536Sjkim SubTable->Length, InfoTable); 3209228110Sjkim if (ACPI_FAILURE (Status)) 3210228110Sjkim { 3211228110Sjkim return 0; 3212228110Sjkim } 3213228110Sjkim 3214228110SjkimNextSubTable: 3215281075Sdim /* Point to next subtable */ 3216228110Sjkim 3217228110Sjkim Offset += SubTable->Length; 3218306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length); 3219228110Sjkim } 3220228110Sjkim 3221228110Sjkim return (S3ptTable->Length); 3222228110Sjkim} 3223228110Sjkim 3224228110Sjkim 3225228110Sjkim/******************************************************************************* 3226228110Sjkim * 3227219707Sjkim * FUNCTION: AcpiDmDumpSlic 3228219707Sjkim * 3229219707Sjkim * PARAMETERS: Table - A SLIC table 3230219707Sjkim * 3231219707Sjkim * RETURN: None 3232219707Sjkim * 3233219707Sjkim * DESCRIPTION: Format the contents of a SLIC 3234219707Sjkim * 3235219707Sjkim ******************************************************************************/ 3236219707Sjkim 3237219707Sjkimvoid 3238219707SjkimAcpiDmDumpSlic ( 3239219707Sjkim ACPI_TABLE_HEADER *Table) 3240219707Sjkim{ 3241306536Sjkim 3242306536Sjkim (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table, 3243306536Sjkim Table->Length - sizeof (*Table), AcpiDmTableInfoSlic); 3244219707Sjkim} 3245219707Sjkim 3246219707Sjkim 3247219707Sjkim/******************************************************************************* 3248219707Sjkim * 3249167802Sjkim * FUNCTION: AcpiDmDumpSlit 3250167802Sjkim * 3251167802Sjkim * PARAMETERS: Table - An SLIT 3252167802Sjkim * 3253167802Sjkim * RETURN: None 3254167802Sjkim * 3255167802Sjkim * DESCRIPTION: Format the contents of a SLIT 3256167802Sjkim * 3257167802Sjkim ******************************************************************************/ 3258167802Sjkim 3259167802Sjkimvoid 3260167802SjkimAcpiDmDumpSlit ( 3261167802Sjkim ACPI_TABLE_HEADER *Table) 3262167802Sjkim{ 3263193529Sjkim ACPI_STATUS Status; 3264167802Sjkim UINT32 Offset; 3265167802Sjkim UINT8 *Row; 3266167802Sjkim UINT32 Localities; 3267167802Sjkim UINT32 i; 3268167802Sjkim UINT32 j; 3269167802Sjkim 3270167802Sjkim 3271167802Sjkim /* Main table */ 3272167802Sjkim 3273193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); 3274193529Sjkim if (ACPI_FAILURE (Status)) 3275193529Sjkim { 3276193529Sjkim return; 3277193529Sjkim } 3278167802Sjkim 3279167802Sjkim /* Display the Locality NxN Matrix */ 3280167802Sjkim 3281167802Sjkim Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; 3282167802Sjkim Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); 3283167802Sjkim Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; 3284167802Sjkim 3285167802Sjkim for (i = 0; i < Localities; i++) 3286167802Sjkim { 3287167802Sjkim /* Display one row of the matrix */ 3288167802Sjkim 3289167802Sjkim AcpiDmLineHeader2 (Offset, Localities, "Locality", i); 3290167802Sjkim for (j = 0; j < Localities; j++) 3291167802Sjkim { 3292167802Sjkim /* Check for beyond EOT */ 3293167802Sjkim 3294167802Sjkim if (Offset >= Table->Length) 3295167802Sjkim { 3296306536Sjkim AcpiOsPrintf ( 3297306536Sjkim "\n**** Not enough room in table for all localities\n"); 3298167802Sjkim return; 3299167802Sjkim } 3300167802Sjkim 3301209746Sjkim AcpiOsPrintf ("%2.2X", Row[j]); 3302167802Sjkim Offset++; 3303167802Sjkim 3304167802Sjkim /* Display up to 16 bytes per output row */ 3305167802Sjkim 3306209746Sjkim if ((j+1) < Localities) 3307167802Sjkim { 3308220663Sjkim AcpiOsPrintf (" "); 3309209746Sjkim 3310209746Sjkim if (j && (((j+1) % 16) == 0)) 3311209746Sjkim { 3312220663Sjkim AcpiOsPrintf ("\\\n"); /* With line continuation char */ 3313220663Sjkim AcpiDmLineHeader (Offset, 0, NULL); 3314209746Sjkim } 3315167802Sjkim } 3316167802Sjkim } 3317167802Sjkim 3318167802Sjkim /* Point to next row */ 3319167802Sjkim 3320167802Sjkim AcpiOsPrintf ("\n"); 3321167802Sjkim Row += Localities; 3322167802Sjkim } 3323167802Sjkim} 3324167802Sjkim 3325167802Sjkim 3326167802Sjkim/******************************************************************************* 3327167802Sjkim * 3328167802Sjkim * FUNCTION: AcpiDmDumpSrat 3329167802Sjkim * 3330167802Sjkim * PARAMETERS: Table - A SRAT table 3331167802Sjkim * 3332167802Sjkim * RETURN: None 3333167802Sjkim * 3334167802Sjkim * DESCRIPTION: Format the contents of a SRAT 3335167802Sjkim * 3336167802Sjkim ******************************************************************************/ 3337167802Sjkim 3338167802Sjkimvoid 3339167802SjkimAcpiDmDumpSrat ( 3340167802Sjkim ACPI_TABLE_HEADER *Table) 3341167802Sjkim{ 3342193529Sjkim ACPI_STATUS Status; 3343167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_SRAT); 3344167802Sjkim ACPI_SUBTABLE_HEADER *SubTable; 3345167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 3346167802Sjkim 3347167802Sjkim 3348167802Sjkim /* Main table */ 3349167802Sjkim 3350193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); 3351193529Sjkim if (ACPI_FAILURE (Status)) 3352193529Sjkim { 3353193529Sjkim return; 3354193529Sjkim } 3355167802Sjkim 3356281075Sdim /* Subtables */ 3357167802Sjkim 3358167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); 3359167802Sjkim while (Offset < Table->Length) 3360167802Sjkim { 3361281075Sdim /* Common subtable header */ 3362193529Sjkim 3363193529Sjkim AcpiOsPrintf ("\n"); 3364193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 3365306536Sjkim SubTable->Length, AcpiDmTableInfoSratHdr); 3366193529Sjkim if (ACPI_FAILURE (Status)) 3367193529Sjkim { 3368193529Sjkim return; 3369193529Sjkim } 3370193529Sjkim 3371167802Sjkim switch (SubTable->Type) 3372167802Sjkim { 3373167802Sjkim case ACPI_SRAT_TYPE_CPU_AFFINITY: 3374250838Sjkim 3375167802Sjkim InfoTable = AcpiDmTableInfoSrat0; 3376167802Sjkim break; 3377250838Sjkim 3378167802Sjkim case ACPI_SRAT_TYPE_MEMORY_AFFINITY: 3379250838Sjkim 3380167802Sjkim InfoTable = AcpiDmTableInfoSrat1; 3381167802Sjkim break; 3382250838Sjkim 3383193529Sjkim case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: 3384250838Sjkim 3385193529Sjkim InfoTable = AcpiDmTableInfoSrat2; 3386193529Sjkim break; 3387250838Sjkim 3388281075Sdim case ACPI_SRAT_TYPE_GICC_AFFINITY: 3389281075Sdim 3390281075Sdim InfoTable = AcpiDmTableInfoSrat3; 3391281075Sdim break; 3392281075Sdim 3393167802Sjkim default: 3394306536Sjkim AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", 3395306536Sjkim SubTable->Type); 3396193529Sjkim 3397193529Sjkim /* Attempt to continue */ 3398193529Sjkim 3399193529Sjkim if (!SubTable->Length) 3400193529Sjkim { 3401193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 3402193529Sjkim return; 3403193529Sjkim } 3404193529Sjkim goto NextSubTable; 3405167802Sjkim } 3406167802Sjkim 3407167802Sjkim AcpiOsPrintf ("\n"); 3408193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 3409306536Sjkim SubTable->Length, InfoTable); 3410193529Sjkim if (ACPI_FAILURE (Status)) 3411193529Sjkim { 3412193529Sjkim return; 3413193529Sjkim } 3414167802Sjkim 3415193529SjkimNextSubTable: 3416281075Sdim /* Point to next subtable */ 3417167802Sjkim 3418167802Sjkim Offset += SubTable->Length; 3419306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, 3420306536Sjkim SubTable->Length); 3421167802Sjkim } 3422167802Sjkim} 3423167802Sjkim 3424197104Sjkim 3425197104Sjkim/******************************************************************************* 3426197104Sjkim * 3427284460Sjkim * FUNCTION: AcpiDmDumpStao 3428284460Sjkim * 3429284460Sjkim * PARAMETERS: Table - A STAO table 3430284460Sjkim * 3431284460Sjkim * RETURN: None 3432284460Sjkim * 3433284460Sjkim * DESCRIPTION: Format the contents of a STAO. This is a variable-length 3434284460Sjkim * table that contains an open-ended number of ASCII strings 3435284460Sjkim * at the end of the table. 3436284460Sjkim * 3437284460Sjkim ******************************************************************************/ 3438284460Sjkim 3439284460Sjkimvoid 3440284460SjkimAcpiDmDumpStao ( 3441284460Sjkim ACPI_TABLE_HEADER *Table) 3442284460Sjkim{ 3443284460Sjkim ACPI_STATUS Status; 3444284460Sjkim char *Namepath; 3445284460Sjkim UINT32 Length = Table->Length; 3446284460Sjkim UINT32 StringLength; 3447284460Sjkim UINT32 Offset = sizeof (ACPI_TABLE_STAO); 3448284460Sjkim 3449284460Sjkim 3450284460Sjkim /* Main table */ 3451284460Sjkim 3452284460Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao); 3453284460Sjkim if (ACPI_FAILURE (Status)) 3454284460Sjkim { 3455284460Sjkim return; 3456284460Sjkim } 3457284460Sjkim 3458284460Sjkim /* The rest of the table consists of Namepath strings */ 3459284460Sjkim 3460284460Sjkim while (Offset < Table->Length) 3461284460Sjkim { 3462284460Sjkim Namepath = ACPI_ADD_PTR (char, Table, Offset); 3463306536Sjkim StringLength = strlen (Namepath) + 1; 3464284460Sjkim 3465284460Sjkim AcpiDmLineHeader (Offset, StringLength, "Namestring"); 3466284460Sjkim AcpiOsPrintf ("\"%s\"\n", Namepath); 3467284460Sjkim 3468284460Sjkim /* Point to next namepath */ 3469284460Sjkim 3470284460Sjkim Offset += StringLength; 3471284460Sjkim } 3472284460Sjkim} 3473284460Sjkim 3474284460Sjkim 3475284460Sjkim/******************************************************************************* 3476284460Sjkim * 3477306536Sjkim * FUNCTION: AcpiDmDumpTcpa 3478306536Sjkim * 3479306536Sjkim * PARAMETERS: Table - A TCPA table 3480306536Sjkim * 3481306536Sjkim * RETURN: None 3482306536Sjkim * 3483306536Sjkim * DESCRIPTION: Format the contents of a TCPA. 3484306536Sjkim * 3485306536Sjkim * NOTE: There are two versions of the table with the same signature: 3486306536Sjkim * the client version and the server version. The common 3487306536Sjkim * PlatformClass field is used to differentiate the two types of 3488306536Sjkim * tables. 3489306536Sjkim * 3490306536Sjkim ******************************************************************************/ 3491306536Sjkim 3492306536Sjkimvoid 3493306536SjkimAcpiDmDumpTcpa ( 3494306536Sjkim ACPI_TABLE_HEADER *Table) 3495306536Sjkim{ 3496306536Sjkim UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR); 3497306536Sjkim ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR ( 3498306536Sjkim ACPI_TABLE_TCPA_HDR, Table); 3499306536Sjkim ACPI_TABLE_TCPA_HDR *SubTable = ACPI_ADD_PTR ( 3500306536Sjkim ACPI_TABLE_TCPA_HDR, Table, Offset); 3501306536Sjkim ACPI_STATUS Status; 3502306536Sjkim 3503306536Sjkim 3504306536Sjkim /* Main table */ 3505306536Sjkim 3506306536Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 3507306536Sjkim 0, AcpiDmTableInfoTcpaHdr); 3508306536Sjkim if (ACPI_FAILURE (Status)) 3509306536Sjkim { 3510306536Sjkim return; 3511306536Sjkim } 3512306536Sjkim 3513306536Sjkim /* 3514306536Sjkim * Examine the PlatformClass field to determine the table type. 3515306536Sjkim * Either a client or server table. Only one. 3516306536Sjkim */ 3517306536Sjkim switch (CommonHeader->PlatformClass) 3518306536Sjkim { 3519306536Sjkim case ACPI_TCPA_CLIENT_TABLE: 3520306536Sjkim 3521306536Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 3522306536Sjkim Table->Length - Offset, AcpiDmTableInfoTcpaClient); 3523306536Sjkim break; 3524306536Sjkim 3525306536Sjkim case ACPI_TCPA_SERVER_TABLE: 3526306536Sjkim 3527306536Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 3528306536Sjkim Table->Length - Offset, AcpiDmTableInfoTcpaServer); 3529306536Sjkim break; 3530306536Sjkim 3531306536Sjkim default: 3532306536Sjkim 3533306536Sjkim AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n", 3534306536Sjkim CommonHeader->PlatformClass); 3535306536Sjkim Status = AE_ERROR; 3536306536Sjkim break; 3537306536Sjkim } 3538306536Sjkim 3539306536Sjkim if (ACPI_FAILURE (Status)) 3540306536Sjkim { 3541306536Sjkim AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n"); 3542306536Sjkim } 3543306536Sjkim} 3544306536Sjkim 3545306536Sjkim 3546306536Sjkim/******************************************************************************* 3547306536Sjkim * 3548246849Sjkim * FUNCTION: AcpiDmDumpVrtc 3549246849Sjkim * 3550246849Sjkim * PARAMETERS: Table - A VRTC table 3551246849Sjkim * 3552246849Sjkim * RETURN: None 3553246849Sjkim * 3554246849Sjkim * DESCRIPTION: Format the contents of a VRTC 3555246849Sjkim * 3556246849Sjkim ******************************************************************************/ 3557246849Sjkim 3558246849Sjkimvoid 3559246849SjkimAcpiDmDumpVrtc ( 3560246849Sjkim ACPI_TABLE_HEADER *Table) 3561246849Sjkim{ 3562246849Sjkim ACPI_STATUS Status; 3563246849Sjkim UINT32 Offset = sizeof (ACPI_TABLE_VRTC); 3564246849Sjkim ACPI_VRTC_ENTRY *SubTable; 3565246849Sjkim 3566246849Sjkim 3567246849Sjkim /* Main table */ 3568246849Sjkim 3569246849Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); 3570246849Sjkim if (ACPI_FAILURE (Status)) 3571246849Sjkim { 3572246849Sjkim return; 3573246849Sjkim } 3574246849Sjkim 3575281075Sdim /* Subtables */ 3576246849Sjkim 3577246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); 3578246849Sjkim while (Offset < Table->Length) 3579246849Sjkim { 3580281075Sdim /* Common subtable header */ 3581246849Sjkim 3582246849Sjkim AcpiOsPrintf ("\n"); 3583246849Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 3584306536Sjkim sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); 3585246849Sjkim if (ACPI_FAILURE (Status)) 3586246849Sjkim { 3587246849Sjkim return; 3588246849Sjkim } 3589246849Sjkim 3590281075Sdim /* Point to next subtable */ 3591246849Sjkim 3592246849Sjkim Offset += sizeof (ACPI_VRTC_ENTRY); 3593306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, 3594306536Sjkim sizeof (ACPI_VRTC_ENTRY)); 3595246849Sjkim } 3596246849Sjkim} 3597246849Sjkim 3598246849Sjkim 3599246849Sjkim/******************************************************************************* 3600246849Sjkim * 3601197104Sjkim * FUNCTION: AcpiDmDumpWdat 3602197104Sjkim * 3603197104Sjkim * PARAMETERS: Table - A WDAT table 3604197104Sjkim * 3605197104Sjkim * RETURN: None 3606197104Sjkim * 3607197104Sjkim * DESCRIPTION: Format the contents of a WDAT 3608197104Sjkim * 3609197104Sjkim ******************************************************************************/ 3610197104Sjkim 3611197104Sjkimvoid 3612197104SjkimAcpiDmDumpWdat ( 3613197104Sjkim ACPI_TABLE_HEADER *Table) 3614197104Sjkim{ 3615197104Sjkim ACPI_STATUS Status; 3616197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_WDAT); 3617197104Sjkim ACPI_WDAT_ENTRY *SubTable; 3618197104Sjkim 3619197104Sjkim 3620197104Sjkim /* Main table */ 3621197104Sjkim 3622197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); 3623197104Sjkim if (ACPI_FAILURE (Status)) 3624197104Sjkim { 3625197104Sjkim return; 3626197104Sjkim } 3627197104Sjkim 3628281075Sdim /* Subtables */ 3629197104Sjkim 3630197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); 3631197104Sjkim while (Offset < Table->Length) 3632197104Sjkim { 3633281075Sdim /* Common subtable header */ 3634197104Sjkim 3635197104Sjkim AcpiOsPrintf ("\n"); 3636197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 3637306536Sjkim sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); 3638197104Sjkim if (ACPI_FAILURE (Status)) 3639197104Sjkim { 3640197104Sjkim return; 3641197104Sjkim } 3642197104Sjkim 3643281075Sdim /* Point to next subtable */ 3644197104Sjkim 3645197104Sjkim Offset += sizeof (ACPI_WDAT_ENTRY); 3646306536Sjkim SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, 3647306536Sjkim sizeof (ACPI_WDAT_ENTRY)); 3648197104Sjkim } 3649197104Sjkim} 3650284460Sjkim 3651306536Sjkim 3652284460Sjkim/******************************************************************************* 3653284460Sjkim * 3654284460Sjkim * FUNCTION: AcpiDmDumpWpbt 3655284460Sjkim * 3656284460Sjkim * PARAMETERS: Table - A WPBT table 3657284460Sjkim * 3658284460Sjkim * RETURN: None 3659284460Sjkim * 3660284460Sjkim * DESCRIPTION: Format the contents of a WPBT. This table type consists 3661284460Sjkim * of an open-ended arguments buffer at the end of the table. 3662284460Sjkim * 3663284460Sjkim ******************************************************************************/ 3664284460Sjkim 3665284460Sjkimvoid 3666284460SjkimAcpiDmDumpWpbt ( 3667284460Sjkim ACPI_TABLE_HEADER *Table) 3668284460Sjkim{ 3669284460Sjkim ACPI_STATUS Status; 3670284460Sjkim ACPI_TABLE_WPBT *SubTable; 3671284460Sjkim UINT32 Length = Table->Length; 3672284460Sjkim UINT16 ArgumentsLength; 3673284460Sjkim 3674284460Sjkim 3675284460Sjkim /* Dump the main table */ 3676284460Sjkim 3677284460Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); 3678284460Sjkim if (ACPI_FAILURE (Status)) 3679284460Sjkim { 3680284460Sjkim return; 3681284460Sjkim } 3682284460Sjkim 3683284460Sjkim /* Extract the arguments buffer length from the main table */ 3684284460Sjkim 3685284460Sjkim SubTable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table); 3686284460Sjkim ArgumentsLength = SubTable->ArgumentsLength; 3687284460Sjkim 3688284460Sjkim /* Dump the arguments buffer */ 3689284460Sjkim 3690306536Sjkim (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, 3691284460Sjkim AcpiDmTableInfoWpbt0); 3692284460Sjkim} 3693