1167802Sjkim/****************************************************************************** 2167802Sjkim * 3167802Sjkim * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code 4167802Sjkim * 5167802Sjkim *****************************************************************************/ 6167802Sjkim 7217365Sjkim/* 8245582Sjkim * Copyright (C) 2000 - 2013, 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 62239340Sjkimstatic void 63239340SjkimAcpiDmDumpBuffer ( 64239340Sjkim void *Table, 65239340Sjkim UINT32 BufferOffset, 66239340Sjkim UINT32 Length, 67239340Sjkim UINT32 AbsoluteOffset, 68239340Sjkim char *Header); 69218590Sjkim 70239340Sjkim 71167802Sjkim/******************************************************************************* 72167802Sjkim * 73239340Sjkim * FUNCTION: AcpiDmDumpBuffer 74239340Sjkim * 75239340Sjkim * PARAMETERS: Table - ACPI Table or subtable 76239340Sjkim * BufferOffset - Offset of buffer from Table above 77239340Sjkim * Length - Length of the buffer 78239340Sjkim * AbsoluteOffset - Offset of buffer in the main ACPI table 79239340Sjkim * Header - Name of the buffer field (printed on the 80239340Sjkim * first line only.) 81239340Sjkim * 82239340Sjkim * RETURN: None 83239340Sjkim * 84239340Sjkim * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the 85239340Sjkim * disassembler output format.) 86239340Sjkim * 87239340Sjkim ******************************************************************************/ 88239340Sjkim 89239340Sjkimstatic void 90239340SjkimAcpiDmDumpBuffer ( 91239340Sjkim void *Table, 92239340Sjkim UINT32 BufferOffset, 93239340Sjkim UINT32 Length, 94239340Sjkim UINT32 AbsoluteOffset, 95239340Sjkim char *Header) 96239340Sjkim{ 97239340Sjkim UINT8 *Buffer; 98239340Sjkim UINT32 i; 99239340Sjkim 100239340Sjkim 101239340Sjkim if (!Length) 102239340Sjkim { 103239340Sjkim return; 104239340Sjkim } 105239340Sjkim 106239340Sjkim Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset; 107239340Sjkim i = 0; 108239340Sjkim 109239340Sjkim while (i < Length) 110239340Sjkim { 111239340Sjkim if (!(i % 16)) 112239340Sjkim { 113239340Sjkim AcpiOsPrintf ("\n"); 114239340Sjkim AcpiDmLineHeader (AbsoluteOffset, 115239340Sjkim ((Length - i) > 16) ? 16 : (Length - i), Header); 116239340Sjkim Header = NULL; 117239340Sjkim } 118239340Sjkim 119239340Sjkim AcpiOsPrintf ("%.02X ", *Buffer); 120239340Sjkim i++; 121239340Sjkim Buffer++; 122239340Sjkim AbsoluteOffset++; 123239340Sjkim } 124239340Sjkim 125239340Sjkim AcpiOsPrintf ("\n"); 126239340Sjkim} 127239340Sjkim 128239340Sjkim 129239340Sjkim/******************************************************************************* 130239340Sjkim * 131167802Sjkim * FUNCTION: AcpiDmDumpRsdp 132167802Sjkim * 133167802Sjkim * PARAMETERS: Table - A RSDP 134167802Sjkim * 135209746Sjkim * RETURN: Length of the table (there is not always a length field, 136209746Sjkim * use revision or length if available (ACPI 2.0+)) 137167802Sjkim * 138167802Sjkim * DESCRIPTION: Format the contents of a RSDP 139167802Sjkim * 140167802Sjkim ******************************************************************************/ 141167802Sjkim 142167802SjkimUINT32 143167802SjkimAcpiDmDumpRsdp ( 144167802Sjkim ACPI_TABLE_HEADER *Table) 145167802Sjkim{ 146209746Sjkim ACPI_TABLE_RSDP *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table); 147209746Sjkim UINT32 Length = sizeof (ACPI_RSDP_COMMON); 148209746Sjkim UINT8 Checksum; 149167802Sjkim 150167802Sjkim 151167802Sjkim /* Dump the common ACPI 1.0 portion */ 152167802Sjkim 153167802Sjkim AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1); 154167802Sjkim 155209746Sjkim /* Validate the first checksum */ 156167802Sjkim 157209746Sjkim Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_RSDP_COMMON), 158209746Sjkim Rsdp->Checksum); 159209746Sjkim if (Checksum != Rsdp->Checksum) 160167802Sjkim { 161209746Sjkim AcpiOsPrintf ("/* Incorrect Checksum above, should be 0x%2.2X */\n", 162209746Sjkim Checksum); 163209746Sjkim } 164209746Sjkim 165209746Sjkim /* The RSDP for ACPI 2.0+ contains more data and has a Length field */ 166209746Sjkim 167209746Sjkim if (Rsdp->Revision > 0) 168209746Sjkim { 169209746Sjkim Length = Rsdp->Length; 170167802Sjkim AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2); 171209746Sjkim 172209746Sjkim /* Validate the extended checksum over entire RSDP */ 173209746Sjkim 174209746Sjkim Checksum = AcpiDmGenerateChecksum (Rsdp, sizeof (ACPI_TABLE_RSDP), 175209746Sjkim Rsdp->ExtendedChecksum); 176209746Sjkim if (Checksum != Rsdp->ExtendedChecksum) 177209746Sjkim { 178209746Sjkim AcpiOsPrintf ( 179209746Sjkim "/* Incorrect Extended Checksum above, should be 0x%2.2X */\n", 180209746Sjkim Checksum); 181209746Sjkim } 182167802Sjkim } 183167802Sjkim 184167802Sjkim return (Length); 185167802Sjkim} 186167802Sjkim 187167802Sjkim 188167802Sjkim/******************************************************************************* 189167802Sjkim * 190167802Sjkim * FUNCTION: AcpiDmDumpRsdt 191167802Sjkim * 192167802Sjkim * PARAMETERS: Table - A RSDT 193167802Sjkim * 194167802Sjkim * RETURN: None 195167802Sjkim * 196167802Sjkim * DESCRIPTION: Format the contents of a RSDT 197167802Sjkim * 198167802Sjkim ******************************************************************************/ 199167802Sjkim 200167802Sjkimvoid 201167802SjkimAcpiDmDumpRsdt ( 202167802Sjkim ACPI_TABLE_HEADER *Table) 203167802Sjkim{ 204167802Sjkim UINT32 *Array; 205167802Sjkim UINT32 Entries; 206167802Sjkim UINT32 Offset; 207167802Sjkim UINT32 i; 208167802Sjkim 209167802Sjkim 210167802Sjkim /* Point to start of table pointer array */ 211167802Sjkim 212167802Sjkim Array = ACPI_CAST_PTR (ACPI_TABLE_RSDT, Table)->TableOffsetEntry; 213167802Sjkim Offset = sizeof (ACPI_TABLE_HEADER); 214167802Sjkim 215167802Sjkim /* RSDT uses 32-bit pointers */ 216167802Sjkim 217167802Sjkim Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); 218167802Sjkim 219167802Sjkim for (i = 0; i < Entries; i++) 220167802Sjkim { 221167802Sjkim AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i); 222167802Sjkim AcpiOsPrintf ("%8.8X\n", Array[i]); 223167802Sjkim Offset += sizeof (UINT32); 224167802Sjkim } 225167802Sjkim} 226167802Sjkim 227167802Sjkim 228167802Sjkim/******************************************************************************* 229167802Sjkim * 230167802Sjkim * FUNCTION: AcpiDmDumpXsdt 231167802Sjkim * 232167802Sjkim * PARAMETERS: Table - A XSDT 233167802Sjkim * 234167802Sjkim * RETURN: None 235167802Sjkim * 236167802Sjkim * DESCRIPTION: Format the contents of a XSDT 237167802Sjkim * 238167802Sjkim ******************************************************************************/ 239167802Sjkim 240167802Sjkimvoid 241167802SjkimAcpiDmDumpXsdt ( 242167802Sjkim ACPI_TABLE_HEADER *Table) 243167802Sjkim{ 244167802Sjkim UINT64 *Array; 245167802Sjkim UINT32 Entries; 246167802Sjkim UINT32 Offset; 247167802Sjkim UINT32 i; 248167802Sjkim 249167802Sjkim 250167802Sjkim /* Point to start of table pointer array */ 251167802Sjkim 252167802Sjkim Array = ACPI_CAST_PTR (ACPI_TABLE_XSDT, Table)->TableOffsetEntry; 253167802Sjkim Offset = sizeof (ACPI_TABLE_HEADER); 254167802Sjkim 255167802Sjkim /* XSDT uses 64-bit pointers */ 256167802Sjkim 257167802Sjkim Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); 258167802Sjkim 259167802Sjkim for (i = 0; i < Entries; i++) 260167802Sjkim { 261167802Sjkim AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); 262167802Sjkim AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i])); 263167802Sjkim Offset += sizeof (UINT64); 264167802Sjkim } 265167802Sjkim} 266167802Sjkim 267167802Sjkim 268167802Sjkim/******************************************************************************* 269167802Sjkim * 270167802Sjkim * FUNCTION: AcpiDmDumpFadt 271167802Sjkim * 272167802Sjkim * PARAMETERS: Table - A FADT 273167802Sjkim * 274167802Sjkim * RETURN: None 275167802Sjkim * 276167802Sjkim * DESCRIPTION: Format the contents of a FADT 277167802Sjkim * 278218590Sjkim * NOTE: We cannot depend on the FADT version to indicate the actual 279218590Sjkim * contents of the FADT because of BIOS bugs. The table length 280218590Sjkim * is the only reliable indicator. 281218590Sjkim * 282167802Sjkim ******************************************************************************/ 283167802Sjkim 284167802Sjkimvoid 285167802SjkimAcpiDmDumpFadt ( 286167802Sjkim ACPI_TABLE_HEADER *Table) 287167802Sjkim{ 288167802Sjkim 289218590Sjkim /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */ 290167802Sjkim 291167802Sjkim AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1); 292167802Sjkim 293218590Sjkim /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */ 294167802Sjkim 295218590Sjkim if ((Table->Length > ACPI_FADT_V1_SIZE) && 296218590Sjkim (Table->Length <= ACPI_FADT_V2_SIZE)) 297167802Sjkim { 298167802Sjkim AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2); 299167802Sjkim } 300167802Sjkim 301228110Sjkim /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */ 302193529Sjkim 303218590Sjkim else if (Table->Length > ACPI_FADT_V2_SIZE) 304193529Sjkim { 305193529Sjkim AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3); 306228110Sjkim 307228110Sjkim /* Check for FADT revision 5 fields and up (ACPI 5.0+) */ 308228110Sjkim 309228110Sjkim if (Table->Length > ACPI_FADT_V3_SIZE) 310228110Sjkim { 311228110Sjkim AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5); 312228110Sjkim } 313193529Sjkim } 314193529Sjkim 315167802Sjkim /* Validate various fields in the FADT, including length */ 316167802Sjkim 317167802Sjkim AcpiTbCreateLocalFadt (Table, Table->Length); 318218590Sjkim 319218590Sjkim /* Validate FADT length against the revision */ 320218590Sjkim 321218590Sjkim AcpiDmValidateFadtLength (Table->Revision, Table->Length); 322167802Sjkim} 323167802Sjkim 324167802Sjkim 325167802Sjkim/******************************************************************************* 326167802Sjkim * 327218590Sjkim * FUNCTION: AcpiDmValidateFadtLength 328218590Sjkim * 329218590Sjkim * PARAMETERS: Revision - FADT revision (Header->Revision) 330218590Sjkim * Length - FADT length (Header->Length 331218590Sjkim * 332218590Sjkim * RETURN: None 333218590Sjkim * 334218590Sjkim * DESCRIPTION: Check the FADT revision against the expected table length for 335218590Sjkim * that revision. Issue a warning if the length is not what was 336218590Sjkim * expected. This seems to be such a common BIOS bug that the 337218590Sjkim * FADT revision has been rendered virtually meaningless. 338218590Sjkim * 339218590Sjkim ******************************************************************************/ 340218590Sjkim 341218590Sjkimstatic void 342218590SjkimAcpiDmValidateFadtLength ( 343218590Sjkim UINT32 Revision, 344218590Sjkim UINT32 Length) 345218590Sjkim{ 346218590Sjkim UINT32 ExpectedLength; 347218590Sjkim 348218590Sjkim 349218590Sjkim switch (Revision) 350218590Sjkim { 351218590Sjkim case 0: 352250838Sjkim 353218590Sjkim AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n"); 354218590Sjkim return; 355218590Sjkim 356218590Sjkim case 1: 357250838Sjkim 358218590Sjkim ExpectedLength = ACPI_FADT_V1_SIZE; 359218590Sjkim break; 360218590Sjkim 361218590Sjkim case 2: 362250838Sjkim 363218590Sjkim ExpectedLength = ACPI_FADT_V2_SIZE; 364218590Sjkim break; 365218590Sjkim 366218590Sjkim case 3: 367218590Sjkim case 4: 368250838Sjkim 369218590Sjkim ExpectedLength = ACPI_FADT_V3_SIZE; 370218590Sjkim break; 371218590Sjkim 372228110Sjkim case 5: 373250838Sjkim 374228110Sjkim ExpectedLength = ACPI_FADT_V5_SIZE; 375228110Sjkim break; 376228110Sjkim 377218590Sjkim default: 378250838Sjkim 379218590Sjkim return; 380218590Sjkim } 381218590Sjkim 382218590Sjkim if (Length == ExpectedLength) 383218590Sjkim { 384218590Sjkim return; 385218590Sjkim } 386218590Sjkim 387218590Sjkim AcpiOsPrintf ( 388218590Sjkim "\n// ACPI Warning: FADT revision %X does not match length: found %X expected %X\n", 389218590Sjkim Revision, Length, ExpectedLength); 390218590Sjkim} 391218590Sjkim 392218590Sjkim 393218590Sjkim/******************************************************************************* 394218590Sjkim * 395167802Sjkim * FUNCTION: AcpiDmDumpAsf 396167802Sjkim * 397167802Sjkim * PARAMETERS: Table - A ASF table 398167802Sjkim * 399167802Sjkim * RETURN: None 400167802Sjkim * 401167802Sjkim * DESCRIPTION: Format the contents of a ASF table 402167802Sjkim * 403167802Sjkim ******************************************************************************/ 404167802Sjkim 405167802Sjkimvoid 406167802SjkimAcpiDmDumpAsf ( 407167802Sjkim ACPI_TABLE_HEADER *Table) 408167802Sjkim{ 409193529Sjkim ACPI_STATUS Status; 410167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_HEADER); 411167802Sjkim ACPI_ASF_INFO *SubTable; 412167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 413167802Sjkim ACPI_DMTABLE_INFO *DataInfoTable = NULL; 414167802Sjkim UINT8 *DataTable = NULL; 415193529Sjkim UINT32 DataCount = 0; 416193529Sjkim UINT32 DataLength = 0; 417193529Sjkim UINT32 DataOffset = 0; 418193529Sjkim UINT32 i; 419197104Sjkim UINT8 Type; 420167802Sjkim 421167802Sjkim 422167802Sjkim /* No main table, only sub-tables */ 423167802Sjkim 424167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); 425167802Sjkim while (Offset < Table->Length) 426167802Sjkim { 427167802Sjkim /* Common sub-table header */ 428167802Sjkim 429193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 430193529Sjkim SubTable->Header.Length, AcpiDmTableInfoAsfHdr); 431193529Sjkim if (ACPI_FAILURE (Status)) 432193529Sjkim { 433193529Sjkim return; 434193529Sjkim } 435167802Sjkim 436197104Sjkim /* The actual type is the lower 7 bits of Type */ 437197104Sjkim 438197104Sjkim Type = (UINT8) (SubTable->Header.Type & 0x7F); 439197104Sjkim 440197104Sjkim switch (Type) 441167802Sjkim { 442167802Sjkim case ACPI_ASF_TYPE_INFO: 443250838Sjkim 444167802Sjkim InfoTable = AcpiDmTableInfoAsf0; 445167802Sjkim break; 446167802Sjkim 447167802Sjkim case ACPI_ASF_TYPE_ALERT: 448250838Sjkim 449167802Sjkim InfoTable = AcpiDmTableInfoAsf1; 450167802Sjkim DataInfoTable = AcpiDmTableInfoAsf1a; 451167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ALERT)); 452197104Sjkim DataCount = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->Alerts; 453197104Sjkim DataLength = ACPI_CAST_PTR (ACPI_ASF_ALERT, SubTable)->DataLength; 454167802Sjkim DataOffset = Offset + sizeof (ACPI_ASF_ALERT); 455167802Sjkim break; 456167802Sjkim 457167802Sjkim case ACPI_ASF_TYPE_CONTROL: 458250838Sjkim 459167802Sjkim InfoTable = AcpiDmTableInfoAsf2; 460167802Sjkim DataInfoTable = AcpiDmTableInfoAsf2a; 461167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_REMOTE)); 462197104Sjkim DataCount = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->Controls; 463197104Sjkim DataLength = ACPI_CAST_PTR (ACPI_ASF_REMOTE, SubTable)->DataLength; 464167802Sjkim DataOffset = Offset + sizeof (ACPI_ASF_REMOTE); 465167802Sjkim break; 466167802Sjkim 467167802Sjkim case ACPI_ASF_TYPE_BOOT: 468250838Sjkim 469167802Sjkim InfoTable = AcpiDmTableInfoAsf3; 470167802Sjkim break; 471167802Sjkim 472167802Sjkim case ACPI_ASF_TYPE_ADDRESS: 473250838Sjkim 474167802Sjkim InfoTable = AcpiDmTableInfoAsf4; 475167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, SubTable, sizeof (ACPI_ASF_ADDRESS)); 476197104Sjkim DataLength = ACPI_CAST_PTR (ACPI_ASF_ADDRESS, SubTable)->Devices; 477167802Sjkim DataOffset = Offset + sizeof (ACPI_ASF_ADDRESS); 478167802Sjkim break; 479167802Sjkim 480167802Sjkim default: 481250838Sjkim 482204773Sjkim AcpiOsPrintf ("\n**** Unknown ASF sub-table type 0x%X\n", SubTable->Header.Type); 483167802Sjkim return; 484167802Sjkim } 485167802Sjkim 486193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 487193529Sjkim SubTable->Header.Length, InfoTable); 488193529Sjkim if (ACPI_FAILURE (Status)) 489193529Sjkim { 490193529Sjkim return; 491193529Sjkim } 492167802Sjkim 493167802Sjkim /* Dump variable-length extra data */ 494167802Sjkim 495197104Sjkim switch (Type) 496167802Sjkim { 497167802Sjkim case ACPI_ASF_TYPE_ALERT: 498167802Sjkim case ACPI_ASF_TYPE_CONTROL: 499167802Sjkim 500167802Sjkim for (i = 0; i < DataCount; i++) 501167802Sjkim { 502167802Sjkim AcpiOsPrintf ("\n"); 503193529Sjkim Status = AcpiDmDumpTable (Table->Length, DataOffset, 504193529Sjkim DataTable, DataLength, DataInfoTable); 505193529Sjkim if (ACPI_FAILURE (Status)) 506193529Sjkim { 507193529Sjkim return; 508193529Sjkim } 509167802Sjkim 510167802Sjkim DataTable = ACPI_ADD_PTR (UINT8, DataTable, DataLength); 511167802Sjkim DataOffset += DataLength; 512167802Sjkim } 513167802Sjkim break; 514167802Sjkim 515167802Sjkim case ACPI_ASF_TYPE_ADDRESS: 516167802Sjkim 517167802Sjkim for (i = 0; i < DataLength; i++) 518167802Sjkim { 519167802Sjkim if (!(i % 16)) 520167802Sjkim { 521167802Sjkim AcpiDmLineHeader (DataOffset, 1, "Addresses"); 522167802Sjkim } 523167802Sjkim 524167802Sjkim AcpiOsPrintf ("%2.2X ", *DataTable); 525167802Sjkim DataTable++; 526167802Sjkim DataOffset++; 527193529Sjkim if (DataOffset > Table->Length) 528193529Sjkim { 529193529Sjkim AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n"); 530193529Sjkim return; 531193529Sjkim } 532167802Sjkim } 533167802Sjkim 534167802Sjkim AcpiOsPrintf ("\n"); 535167802Sjkim break; 536193529Sjkim 537193529Sjkim default: 538250838Sjkim 539193529Sjkim break; 540167802Sjkim } 541167802Sjkim 542167802Sjkim AcpiOsPrintf ("\n"); 543167802Sjkim 544167802Sjkim /* Point to next sub-table */ 545167802Sjkim 546193529Sjkim if (!SubTable->Header.Length) 547193529Sjkim { 548193529Sjkim AcpiOsPrintf ("Invalid zero subtable header length\n"); 549193529Sjkim return; 550193529Sjkim } 551193529Sjkim 552167802Sjkim Offset += SubTable->Header.Length; 553167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, SubTable->Header.Length); 554167802Sjkim } 555167802Sjkim} 556167802Sjkim 557167802Sjkim 558167802Sjkim/******************************************************************************* 559167802Sjkim * 560167802Sjkim * FUNCTION: AcpiDmDumpCpep 561167802Sjkim * 562167802Sjkim * PARAMETERS: Table - A CPEP table 563167802Sjkim * 564167802Sjkim * RETURN: None 565167802Sjkim * 566167802Sjkim * DESCRIPTION: Format the contents of a CPEP. This table type consists 567167802Sjkim * of an open-ended number of subtables. 568167802Sjkim * 569167802Sjkim ******************************************************************************/ 570167802Sjkim 571167802Sjkimvoid 572167802SjkimAcpiDmDumpCpep ( 573167802Sjkim ACPI_TABLE_HEADER *Table) 574167802Sjkim{ 575193529Sjkim ACPI_STATUS Status; 576167802Sjkim ACPI_CPEP_POLLING *SubTable; 577167802Sjkim UINT32 Length = Table->Length; 578167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_CPEP); 579167802Sjkim 580167802Sjkim 581167802Sjkim /* Main table */ 582167802Sjkim 583193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep); 584193529Sjkim if (ACPI_FAILURE (Status)) 585193529Sjkim { 586193529Sjkim return; 587193529Sjkim } 588167802Sjkim 589167802Sjkim /* Sub-tables */ 590167802Sjkim 591167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); 592167802Sjkim while (Offset < Table->Length) 593167802Sjkim { 594167802Sjkim AcpiOsPrintf ("\n"); 595193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 596197104Sjkim SubTable->Header.Length, AcpiDmTableInfoCpep0); 597193529Sjkim if (ACPI_FAILURE (Status)) 598193529Sjkim { 599193529Sjkim return; 600193529Sjkim } 601167802Sjkim 602167802Sjkim /* Point to next sub-table */ 603167802Sjkim 604197104Sjkim Offset += SubTable->Header.Length; 605197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, SubTable, 606197104Sjkim SubTable->Header.Length); 607167802Sjkim } 608167802Sjkim} 609167802Sjkim 610167802Sjkim 611167802Sjkim/******************************************************************************* 612167802Sjkim * 613239340Sjkim * FUNCTION: AcpiDmDumpCsrt 614239340Sjkim * 615239340Sjkim * PARAMETERS: Table - A CSRT table 616239340Sjkim * 617239340Sjkim * RETURN: None 618239340Sjkim * 619239340Sjkim * DESCRIPTION: Format the contents of a CSRT. This table type consists 620239340Sjkim * of an open-ended number of subtables. 621239340Sjkim * 622239340Sjkim ******************************************************************************/ 623239340Sjkim 624239340Sjkimvoid 625239340SjkimAcpiDmDumpCsrt ( 626239340Sjkim ACPI_TABLE_HEADER *Table) 627239340Sjkim{ 628239340Sjkim ACPI_STATUS Status; 629239340Sjkim ACPI_CSRT_GROUP *SubTable; 630245582Sjkim ACPI_CSRT_SHARED_INFO *SharedInfoTable; 631239340Sjkim ACPI_CSRT_DESCRIPTOR *SubSubTable; 632239340Sjkim UINT32 Length = Table->Length; 633239340Sjkim UINT32 Offset = sizeof (ACPI_TABLE_CSRT); 634239340Sjkim UINT32 SubOffset; 635239340Sjkim UINT32 SubSubOffset; 636239340Sjkim UINT32 InfoLength; 637239340Sjkim 638239340Sjkim 639239340Sjkim /* The main table only contains the ACPI header, thus already handled */ 640239340Sjkim 641239340Sjkim /* Sub-tables (Resource Groups) */ 642239340Sjkim 643239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); 644239340Sjkim while (Offset < Table->Length) 645239340Sjkim { 646245582Sjkim /* Resource group subtable */ 647245582Sjkim 648239340Sjkim AcpiOsPrintf ("\n"); 649239340Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 650239340Sjkim SubTable->Length, AcpiDmTableInfoCsrt0); 651239340Sjkim if (ACPI_FAILURE (Status)) 652239340Sjkim { 653239340Sjkim return; 654239340Sjkim } 655239340Sjkim 656245582Sjkim /* Shared info subtable (One per resource group) */ 657245582Sjkim 658239340Sjkim SubOffset = sizeof (ACPI_CSRT_GROUP); 659245582Sjkim SharedInfoTable = ACPI_ADD_PTR (ACPI_CSRT_SHARED_INFO, Table, 660245582Sjkim Offset + SubOffset); 661239340Sjkim 662245582Sjkim AcpiOsPrintf ("\n"); 663245582Sjkim Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable, 664245582Sjkim sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1); 665245582Sjkim if (ACPI_FAILURE (Status)) 666245582Sjkim { 667245582Sjkim return; 668245582Sjkim } 669239340Sjkim 670245582Sjkim SubOffset += SubTable->SharedInfoLength; 671239340Sjkim 672245582Sjkim /* Sub-Subtables (Resource Descriptors) */ 673239340Sjkim 674239340Sjkim SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, 675239340Sjkim Offset + SubOffset); 676239340Sjkim 677239340Sjkim while ((SubOffset < SubTable->Length) && 678239340Sjkim ((Offset + SubOffset) < Table->Length)) 679239340Sjkim { 680239340Sjkim AcpiOsPrintf ("\n"); 681239340Sjkim Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable, 682245582Sjkim SubSubTable->Length, AcpiDmTableInfoCsrt2); 683239340Sjkim if (ACPI_FAILURE (Status)) 684239340Sjkim { 685239340Sjkim return; 686239340Sjkim } 687239340Sjkim 688239340Sjkim SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); 689239340Sjkim 690239340Sjkim /* Resource-specific info buffer */ 691239340Sjkim 692239340Sjkim InfoLength = SubSubTable->Length - SubSubOffset; 693239340Sjkim 694239340Sjkim AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength, 695239340Sjkim Offset + SubOffset + SubSubOffset, "ResourceInfo"); 696239340Sjkim SubSubOffset += InfoLength; 697239340Sjkim 698245582Sjkim /* Point to next sub-subtable */ 699239340Sjkim 700239340Sjkim SubOffset += SubSubTable->Length; 701239340Sjkim SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable, 702239340Sjkim SubSubTable->Length); 703239340Sjkim } 704239340Sjkim 705239340Sjkim /* Point to next sub-table */ 706239340Sjkim 707239340Sjkim Offset += SubTable->Length; 708239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable, 709239340Sjkim SubTable->Length); 710239340Sjkim } 711239340Sjkim} 712239340Sjkim 713239340Sjkim 714239340Sjkim/******************************************************************************* 715239340Sjkim * 716239340Sjkim * FUNCTION: AcpiDmDumpDbg2 717239340Sjkim * 718239340Sjkim * PARAMETERS: Table - A DBG2 table 719239340Sjkim * 720239340Sjkim * RETURN: None 721239340Sjkim * 722239340Sjkim * DESCRIPTION: Format the contents of a DBG2. This table type consists 723239340Sjkim * of an open-ended number of subtables. 724239340Sjkim * 725239340Sjkim ******************************************************************************/ 726239340Sjkim 727239340Sjkimvoid 728239340SjkimAcpiDmDumpDbg2 ( 729239340Sjkim ACPI_TABLE_HEADER *Table) 730239340Sjkim{ 731239340Sjkim ACPI_STATUS Status; 732239340Sjkim ACPI_DBG2_DEVICE *SubTable; 733239340Sjkim UINT32 Length = Table->Length; 734239340Sjkim UINT32 Offset = sizeof (ACPI_TABLE_DBG2); 735239340Sjkim UINT32 i; 736239340Sjkim UINT32 ArrayOffset; 737239340Sjkim UINT32 AbsoluteOffset; 738239340Sjkim UINT8 *Array; 739239340Sjkim 740239340Sjkim 741239340Sjkim /* Main table */ 742239340Sjkim 743239340Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); 744239340Sjkim if (ACPI_FAILURE (Status)) 745239340Sjkim { 746239340Sjkim return; 747239340Sjkim } 748239340Sjkim 749239340Sjkim /* Sub-tables */ 750239340Sjkim 751239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); 752239340Sjkim while (Offset < Table->Length) 753239340Sjkim { 754239340Sjkim AcpiOsPrintf ("\n"); 755239340Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 756239340Sjkim SubTable->Length, AcpiDmTableInfoDbg2Device); 757239340Sjkim if (ACPI_FAILURE (Status)) 758239340Sjkim { 759239340Sjkim return; 760239340Sjkim } 761239340Sjkim 762239340Sjkim /* Dump the BaseAddress array */ 763239340Sjkim 764239340Sjkim for (i = 0; i < SubTable->RegisterCount; i++) 765239340Sjkim { 766239340Sjkim ArrayOffset = SubTable->BaseAddressOffset + 767239340Sjkim (sizeof (ACPI_GENERIC_ADDRESS) * i); 768239340Sjkim AbsoluteOffset = Offset + ArrayOffset; 769239340Sjkim Array = (UINT8 *) SubTable + ArrayOffset; 770239340Sjkim 771239340Sjkim Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, 772239340Sjkim SubTable->Length, AcpiDmTableInfoDbg2Addr); 773239340Sjkim if (ACPI_FAILURE (Status)) 774239340Sjkim { 775239340Sjkim return; 776239340Sjkim } 777239340Sjkim } 778239340Sjkim 779239340Sjkim /* Dump the AddressSize array */ 780239340Sjkim 781239340Sjkim for (i = 0; i < SubTable->RegisterCount; i++) 782239340Sjkim { 783239340Sjkim ArrayOffset = SubTable->AddressSizeOffset + 784239340Sjkim (sizeof (UINT32) * i); 785239340Sjkim AbsoluteOffset = Offset + ArrayOffset; 786239340Sjkim Array = (UINT8 *) SubTable + ArrayOffset; 787239340Sjkim 788239340Sjkim Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, 789239340Sjkim SubTable->Length, AcpiDmTableInfoDbg2Size); 790239340Sjkim if (ACPI_FAILURE (Status)) 791239340Sjkim { 792239340Sjkim return; 793239340Sjkim } 794239340Sjkim } 795239340Sjkim 796239340Sjkim /* Dump the Namestring (required) */ 797239340Sjkim 798239340Sjkim AcpiOsPrintf ("\n"); 799239340Sjkim ArrayOffset = SubTable->NamepathOffset; 800239340Sjkim AbsoluteOffset = Offset + ArrayOffset; 801239340Sjkim Array = (UINT8 *) SubTable + ArrayOffset; 802239340Sjkim 803239340Sjkim Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, 804239340Sjkim SubTable->Length, AcpiDmTableInfoDbg2Name); 805239340Sjkim if (ACPI_FAILURE (Status)) 806239340Sjkim { 807239340Sjkim return; 808239340Sjkim } 809239340Sjkim 810239340Sjkim /* Dump the OemData (optional) */ 811239340Sjkim 812239340Sjkim AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength, 813239340Sjkim Offset + SubTable->OemDataOffset, "OEM Data"); 814239340Sjkim 815239340Sjkim /* Point to next sub-table */ 816239340Sjkim 817239340Sjkim Offset += SubTable->Length; 818239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable, 819239340Sjkim SubTable->Length); 820239340Sjkim } 821239340Sjkim} 822239340Sjkim 823239340Sjkim 824239340Sjkim/******************************************************************************* 825239340Sjkim * 826167802Sjkim * FUNCTION: AcpiDmDumpDmar 827167802Sjkim * 828167802Sjkim * PARAMETERS: Table - A DMAR table 829167802Sjkim * 830167802Sjkim * RETURN: None 831167802Sjkim * 832167802Sjkim * DESCRIPTION: Format the contents of a DMAR. This table type consists 833167802Sjkim * of an open-ended number of subtables. 834167802Sjkim * 835167802Sjkim ******************************************************************************/ 836167802Sjkim 837239340Sjkim 838167802Sjkimvoid 839167802SjkimAcpiDmDumpDmar ( 840167802Sjkim ACPI_TABLE_HEADER *Table) 841167802Sjkim{ 842193529Sjkim ACPI_STATUS Status; 843167802Sjkim ACPI_DMAR_HEADER *SubTable; 844167802Sjkim UINT32 Length = Table->Length; 845167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_DMAR); 846167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 847167802Sjkim ACPI_DMAR_DEVICE_SCOPE *ScopeTable; 848167802Sjkim UINT32 ScopeOffset; 849167802Sjkim UINT8 *PciPath; 850167802Sjkim UINT32 PathOffset; 851167802Sjkim 852167802Sjkim 853167802Sjkim /* Main table */ 854167802Sjkim 855193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); 856193529Sjkim if (ACPI_FAILURE (Status)) 857193529Sjkim { 858193529Sjkim return; 859193529Sjkim } 860167802Sjkim 861167802Sjkim /* Sub-tables */ 862167802Sjkim 863167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); 864167802Sjkim while (Offset < Table->Length) 865167802Sjkim { 866167802Sjkim /* Common sub-table header */ 867167802Sjkim 868167802Sjkim AcpiOsPrintf ("\n"); 869193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 870193529Sjkim SubTable->Length, AcpiDmTableInfoDmarHdr); 871193529Sjkim if (ACPI_FAILURE (Status)) 872193529Sjkim { 873193529Sjkim return; 874193529Sjkim } 875252279Sjkim AcpiOsPrintf ("\n"); 876167802Sjkim 877167802Sjkim switch (SubTable->Type) 878167802Sjkim { 879167802Sjkim case ACPI_DMAR_TYPE_HARDWARE_UNIT: 880250838Sjkim 881167802Sjkim InfoTable = AcpiDmTableInfoDmar0; 882167802Sjkim ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); 883167802Sjkim break; 884250838Sjkim 885167802Sjkim case ACPI_DMAR_TYPE_RESERVED_MEMORY: 886250838Sjkim 887167802Sjkim InfoTable = AcpiDmTableInfoDmar1; 888167802Sjkim ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); 889167802Sjkim break; 890250838Sjkim 891193529Sjkim case ACPI_DMAR_TYPE_ATSR: 892250838Sjkim 893193529Sjkim InfoTable = AcpiDmTableInfoDmar2; 894193529Sjkim ScopeOffset = sizeof (ACPI_DMAR_ATSR); 895193529Sjkim break; 896250838Sjkim 897197104Sjkim case ACPI_DMAR_HARDWARE_AFFINITY: 898250838Sjkim 899197104Sjkim InfoTable = AcpiDmTableInfoDmar3; 900197104Sjkim ScopeOffset = sizeof (ACPI_DMAR_RHSA); 901197104Sjkim break; 902250838Sjkim 903167802Sjkim default: 904250838Sjkim 905204773Sjkim AcpiOsPrintf ("\n**** Unknown DMAR sub-table type 0x%X\n\n", SubTable->Type); 906167802Sjkim return; 907167802Sjkim } 908167802Sjkim 909193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 910193529Sjkim SubTable->Length, InfoTable); 911193529Sjkim if (ACPI_FAILURE (Status)) 912193529Sjkim { 913193529Sjkim return; 914193529Sjkim } 915167802Sjkim 916193529Sjkim /* Dump the device scope entries (if any) */ 917193529Sjkim 918193529Sjkim ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset); 919193529Sjkim while (ScopeOffset < SubTable->Length) 920167802Sjkim { 921193529Sjkim AcpiOsPrintf ("\n"); 922193529Sjkim Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, 923193529Sjkim ScopeTable->Length, AcpiDmTableInfoDmarScope); 924193529Sjkim if (ACPI_FAILURE (Status)) 925167802Sjkim { 926193529Sjkim return; 927193529Sjkim } 928252279Sjkim AcpiOsPrintf ("\n"); 929167802Sjkim 930193529Sjkim /* Dump the PCI Path entries for this device scope */ 931167802Sjkim 932193529Sjkim PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ 933167802Sjkim 934193529Sjkim PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, 935193529Sjkim sizeof (ACPI_DMAR_DEVICE_SCOPE)); 936167802Sjkim 937193529Sjkim while (PathOffset < ScopeTable->Length) 938193529Sjkim { 939193529Sjkim AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path"); 940209746Sjkim AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); 941167802Sjkim 942193529Sjkim /* Point to next PCI Path entry */ 943167802Sjkim 944193529Sjkim PathOffset += 2; 945193529Sjkim PciPath += 2; 946252279Sjkim AcpiOsPrintf ("\n"); 947193529Sjkim } 948167802Sjkim 949193529Sjkim /* Point to next device scope entry */ 950167802Sjkim 951193529Sjkim ScopeOffset += ScopeTable->Length; 952193529Sjkim ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, 953193529Sjkim ScopeTable, ScopeTable->Length); 954167802Sjkim } 955167802Sjkim 956167802Sjkim /* Point to next sub-table */ 957167802Sjkim 958167802Sjkim Offset += SubTable->Length; 959167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length); 960167802Sjkim } 961167802Sjkim} 962167802Sjkim 963167802Sjkim 964167802Sjkim/******************************************************************************* 965167802Sjkim * 966193529Sjkim * FUNCTION: AcpiDmDumpEinj 967193529Sjkim * 968193529Sjkim * PARAMETERS: Table - A EINJ table 969193529Sjkim * 970193529Sjkim * RETURN: None 971193529Sjkim * 972193529Sjkim * DESCRIPTION: Format the contents of a EINJ. This table type consists 973193529Sjkim * of an open-ended number of subtables. 974193529Sjkim * 975193529Sjkim ******************************************************************************/ 976193529Sjkim 977193529Sjkimvoid 978193529SjkimAcpiDmDumpEinj ( 979193529Sjkim ACPI_TABLE_HEADER *Table) 980193529Sjkim{ 981193529Sjkim ACPI_STATUS Status; 982193529Sjkim ACPI_WHEA_HEADER *SubTable; 983193529Sjkim UINT32 Length = Table->Length; 984193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_EINJ); 985193529Sjkim 986193529Sjkim 987193529Sjkim /* Main table */ 988193529Sjkim 989193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); 990193529Sjkim if (ACPI_FAILURE (Status)) 991193529Sjkim { 992193529Sjkim return; 993193529Sjkim } 994193529Sjkim 995193529Sjkim /* Sub-tables */ 996193529Sjkim 997193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); 998193529Sjkim while (Offset < Table->Length) 999193529Sjkim { 1000193529Sjkim AcpiOsPrintf ("\n"); 1001193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1002193529Sjkim sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); 1003193529Sjkim if (ACPI_FAILURE (Status)) 1004193529Sjkim { 1005193529Sjkim return; 1006193529Sjkim } 1007193529Sjkim 1008193529Sjkim /* Point to next sub-table (each subtable is of fixed length) */ 1009193529Sjkim 1010193529Sjkim Offset += sizeof (ACPI_WHEA_HEADER); 1011193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable, 1012193529Sjkim sizeof (ACPI_WHEA_HEADER)); 1013193529Sjkim } 1014193529Sjkim} 1015193529Sjkim 1016193529Sjkim 1017193529Sjkim/******************************************************************************* 1018193529Sjkim * 1019193529Sjkim * FUNCTION: AcpiDmDumpErst 1020193529Sjkim * 1021193529Sjkim * PARAMETERS: Table - A ERST table 1022193529Sjkim * 1023193529Sjkim * RETURN: None 1024193529Sjkim * 1025193529Sjkim * DESCRIPTION: Format the contents of a ERST. This table type consists 1026193529Sjkim * of an open-ended number of subtables. 1027193529Sjkim * 1028193529Sjkim ******************************************************************************/ 1029193529Sjkim 1030193529Sjkimvoid 1031193529SjkimAcpiDmDumpErst ( 1032193529Sjkim ACPI_TABLE_HEADER *Table) 1033193529Sjkim{ 1034193529Sjkim ACPI_STATUS Status; 1035193529Sjkim ACPI_WHEA_HEADER *SubTable; 1036193529Sjkim UINT32 Length = Table->Length; 1037193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_ERST); 1038193529Sjkim 1039193529Sjkim 1040193529Sjkim /* Main table */ 1041193529Sjkim 1042193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); 1043193529Sjkim if (ACPI_FAILURE (Status)) 1044193529Sjkim { 1045193529Sjkim return; 1046193529Sjkim } 1047193529Sjkim 1048193529Sjkim /* Sub-tables */ 1049193529Sjkim 1050193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); 1051193529Sjkim while (Offset < Table->Length) 1052193529Sjkim { 1053193529Sjkim AcpiOsPrintf ("\n"); 1054193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1055209746Sjkim sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); 1056193529Sjkim if (ACPI_FAILURE (Status)) 1057193529Sjkim { 1058193529Sjkim return; 1059193529Sjkim } 1060193529Sjkim 1061193529Sjkim /* Point to next sub-table (each subtable is of fixed length) */ 1062193529Sjkim 1063193529Sjkim Offset += sizeof (ACPI_WHEA_HEADER); 1064193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable, 1065193529Sjkim sizeof (ACPI_WHEA_HEADER)); 1066193529Sjkim } 1067193529Sjkim} 1068193529Sjkim 1069193529Sjkim 1070193529Sjkim/******************************************************************************* 1071193529Sjkim * 1072228110Sjkim * FUNCTION: AcpiDmDumpFpdt 1073228110Sjkim * 1074228110Sjkim * PARAMETERS: Table - A FPDT table 1075228110Sjkim * 1076228110Sjkim * RETURN: None 1077228110Sjkim * 1078228110Sjkim * DESCRIPTION: Format the contents of a FPDT. This table type consists 1079228110Sjkim * of an open-ended number of subtables. 1080228110Sjkim * 1081228110Sjkim ******************************************************************************/ 1082228110Sjkim 1083228110Sjkimvoid 1084228110SjkimAcpiDmDumpFpdt ( 1085228110Sjkim ACPI_TABLE_HEADER *Table) 1086228110Sjkim{ 1087228110Sjkim ACPI_STATUS Status; 1088228110Sjkim ACPI_FPDT_HEADER *SubTable; 1089228110Sjkim UINT32 Length = Table->Length; 1090228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_FPDT); 1091228110Sjkim ACPI_DMTABLE_INFO *InfoTable; 1092228110Sjkim 1093228110Sjkim 1094228110Sjkim /* There is no main table (other than the standard ACPI header) */ 1095228110Sjkim 1096228110Sjkim /* Sub-tables */ 1097228110Sjkim 1098228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); 1099228110Sjkim while (Offset < Table->Length) 1100228110Sjkim { 1101228110Sjkim /* Common sub-table header */ 1102228110Sjkim 1103228110Sjkim AcpiOsPrintf ("\n"); 1104228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1105228110Sjkim SubTable->Length, AcpiDmTableInfoFpdtHdr); 1106228110Sjkim if (ACPI_FAILURE (Status)) 1107228110Sjkim { 1108228110Sjkim return; 1109228110Sjkim } 1110228110Sjkim 1111228110Sjkim switch (SubTable->Type) 1112228110Sjkim { 1113228110Sjkim case ACPI_FPDT_TYPE_BOOT: 1114250838Sjkim 1115228110Sjkim InfoTable = AcpiDmTableInfoFpdt0; 1116228110Sjkim break; 1117250838Sjkim 1118228110Sjkim case ACPI_FPDT_TYPE_S3PERF: 1119250838Sjkim 1120228110Sjkim InfoTable = AcpiDmTableInfoFpdt1; 1121228110Sjkim break; 1122250838Sjkim 1123228110Sjkim default: 1124250838Sjkim 1125228110Sjkim AcpiOsPrintf ("\n**** Unknown FPDT sub-table type 0x%X\n\n", SubTable->Type); 1126228110Sjkim 1127228110Sjkim /* Attempt to continue */ 1128228110Sjkim 1129228110Sjkim if (!SubTable->Length) 1130228110Sjkim { 1131228110Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1132228110Sjkim return; 1133228110Sjkim } 1134228110Sjkim goto NextSubTable; 1135228110Sjkim } 1136228110Sjkim 1137228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1138228110Sjkim SubTable->Length, InfoTable); 1139228110Sjkim if (ACPI_FAILURE (Status)) 1140228110Sjkim { 1141228110Sjkim return; 1142228110Sjkim } 1143228110Sjkim 1144228110SjkimNextSubTable: 1145228110Sjkim /* Point to next sub-table */ 1146228110Sjkim 1147228110Sjkim Offset += SubTable->Length; 1148228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length); 1149228110Sjkim } 1150228110Sjkim} 1151228110Sjkim 1152228110Sjkim 1153228110Sjkim/******************************************************************************* 1154228110Sjkim * 1155193529Sjkim * FUNCTION: AcpiDmDumpHest 1156193529Sjkim * 1157193529Sjkim * PARAMETERS: Table - A HEST table 1158193529Sjkim * 1159193529Sjkim * RETURN: None 1160193529Sjkim * 1161193529Sjkim * DESCRIPTION: Format the contents of a HEST. This table type consists 1162193529Sjkim * of an open-ended number of subtables. 1163193529Sjkim * 1164193529Sjkim ******************************************************************************/ 1165193529Sjkim 1166193529Sjkimvoid 1167193529SjkimAcpiDmDumpHest ( 1168193529Sjkim ACPI_TABLE_HEADER *Table) 1169193529Sjkim{ 1170193529Sjkim ACPI_STATUS Status; 1171193529Sjkim ACPI_HEST_HEADER *SubTable; 1172193529Sjkim UINT32 Length = Table->Length; 1173193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_HEST); 1174193529Sjkim ACPI_DMTABLE_INFO *InfoTable; 1175193529Sjkim UINT32 SubTableLength; 1176197104Sjkim UINT32 BankCount; 1177197104Sjkim ACPI_HEST_IA_ERROR_BANK *BankTable; 1178193529Sjkim 1179193529Sjkim 1180193529Sjkim /* Main table */ 1181193529Sjkim 1182193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); 1183193529Sjkim if (ACPI_FAILURE (Status)) 1184193529Sjkim { 1185193529Sjkim return; 1186193529Sjkim } 1187193529Sjkim 1188193529Sjkim /* Sub-tables */ 1189193529Sjkim 1190193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); 1191193529Sjkim while (Offset < Table->Length) 1192193529Sjkim { 1193197104Sjkim BankCount = 0; 1194193529Sjkim switch (SubTable->Type) 1195193529Sjkim { 1196197104Sjkim case ACPI_HEST_TYPE_IA32_CHECK: 1197250838Sjkim 1198193529Sjkim InfoTable = AcpiDmTableInfoHest0; 1199197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); 1200197104Sjkim BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, 1201197104Sjkim SubTable))->NumHardwareBanks; 1202193529Sjkim break; 1203193529Sjkim 1204197104Sjkim case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: 1205250838Sjkim 1206193529Sjkim InfoTable = AcpiDmTableInfoHest1; 1207197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED); 1208197104Sjkim BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, 1209197104Sjkim SubTable))->NumHardwareBanks; 1210193529Sjkim break; 1211193529Sjkim 1212197104Sjkim case ACPI_HEST_TYPE_IA32_NMI: 1213250838Sjkim 1214197104Sjkim InfoTable = AcpiDmTableInfoHest2; 1215197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_NMI); 1216193529Sjkim break; 1217193529Sjkim 1218193529Sjkim case ACPI_HEST_TYPE_AER_ROOT_PORT: 1219250838Sjkim 1220193529Sjkim InfoTable = AcpiDmTableInfoHest6; 1221193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER_ROOT); 1222193529Sjkim break; 1223193529Sjkim 1224193529Sjkim case ACPI_HEST_TYPE_AER_ENDPOINT: 1225250838Sjkim 1226193529Sjkim InfoTable = AcpiDmTableInfoHest7; 1227193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER); 1228193529Sjkim break; 1229193529Sjkim 1230193529Sjkim case ACPI_HEST_TYPE_AER_BRIDGE: 1231250838Sjkim 1232193529Sjkim InfoTable = AcpiDmTableInfoHest8; 1233193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE); 1234193529Sjkim break; 1235193529Sjkim 1236197104Sjkim case ACPI_HEST_TYPE_GENERIC_ERROR: 1237250838Sjkim 1238193529Sjkim InfoTable = AcpiDmTableInfoHest9; 1239193529Sjkim SubTableLength = sizeof (ACPI_HEST_GENERIC); 1240193529Sjkim break; 1241193529Sjkim 1242193529Sjkim default: 1243250838Sjkim 1244193529Sjkim /* Cannot continue on unknown type - no length */ 1245193529Sjkim 1246204773Sjkim AcpiOsPrintf ("\n**** Unknown HEST sub-table type 0x%X\n", SubTable->Type); 1247193529Sjkim return; 1248193529Sjkim } 1249193529Sjkim 1250193529Sjkim AcpiOsPrintf ("\n"); 1251193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1252193529Sjkim SubTableLength, InfoTable); 1253193529Sjkim if (ACPI_FAILURE (Status)) 1254193529Sjkim { 1255193529Sjkim return; 1256193529Sjkim } 1257193529Sjkim 1258197104Sjkim /* Point to end of current subtable (each subtable above is of fixed length) */ 1259193529Sjkim 1260193529Sjkim Offset += SubTableLength; 1261197104Sjkim 1262197104Sjkim /* If there are any (fixed-length) Error Banks from above, dump them now */ 1263197104Sjkim 1264197104Sjkim if (BankCount) 1265197104Sjkim { 1266197104Sjkim BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, SubTableLength); 1267197104Sjkim SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); 1268197104Sjkim 1269197104Sjkim while (BankCount) 1270197104Sjkim { 1271197104Sjkim AcpiOsPrintf ("\n"); 1272197104Sjkim Status = AcpiDmDumpTable (Length, Offset, BankTable, 1273197104Sjkim sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); 1274197104Sjkim if (ACPI_FAILURE (Status)) 1275197104Sjkim { 1276197104Sjkim return; 1277197104Sjkim } 1278197104Sjkim Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); 1279197104Sjkim BankTable++; 1280197104Sjkim BankCount--; 1281197104Sjkim } 1282197104Sjkim } 1283197104Sjkim 1284197104Sjkim /* Point to next sub-table */ 1285197104Sjkim 1286193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength); 1287193529Sjkim } 1288193529Sjkim} 1289193529Sjkim 1290193529Sjkim 1291193529Sjkim/******************************************************************************* 1292193529Sjkim * 1293197104Sjkim * FUNCTION: AcpiDmDumpIvrs 1294197104Sjkim * 1295197104Sjkim * PARAMETERS: Table - A IVRS table 1296197104Sjkim * 1297197104Sjkim * RETURN: None 1298197104Sjkim * 1299197104Sjkim * DESCRIPTION: Format the contents of a IVRS 1300197104Sjkim * 1301197104Sjkim ******************************************************************************/ 1302197104Sjkim 1303197104Sjkimstatic UINT8 EntrySizes[] = {4,8,16,32}; 1304197104Sjkim 1305197104Sjkimvoid 1306197104SjkimAcpiDmDumpIvrs ( 1307197104Sjkim ACPI_TABLE_HEADER *Table) 1308197104Sjkim{ 1309197104Sjkim ACPI_STATUS Status; 1310197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_IVRS); 1311197104Sjkim UINT32 EntryOffset; 1312197104Sjkim UINT32 EntryLength; 1313197104Sjkim UINT32 EntryType; 1314197104Sjkim ACPI_IVRS_DE_HEADER *DeviceEntry; 1315197104Sjkim ACPI_IVRS_HEADER *SubTable; 1316197104Sjkim ACPI_DMTABLE_INFO *InfoTable; 1317197104Sjkim 1318197104Sjkim 1319197104Sjkim /* Main table */ 1320197104Sjkim 1321197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); 1322197104Sjkim if (ACPI_FAILURE (Status)) 1323197104Sjkim { 1324197104Sjkim return; 1325197104Sjkim } 1326197104Sjkim 1327197104Sjkim /* Sub-tables */ 1328197104Sjkim 1329197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); 1330197104Sjkim while (Offset < Table->Length) 1331197104Sjkim { 1332197104Sjkim /* Common sub-table header */ 1333197104Sjkim 1334197104Sjkim AcpiOsPrintf ("\n"); 1335197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1336197104Sjkim SubTable->Length, AcpiDmTableInfoIvrsHdr); 1337197104Sjkim if (ACPI_FAILURE (Status)) 1338197104Sjkim { 1339197104Sjkim return; 1340197104Sjkim } 1341197104Sjkim 1342197104Sjkim switch (SubTable->Type) 1343197104Sjkim { 1344197104Sjkim case ACPI_IVRS_TYPE_HARDWARE: 1345250838Sjkim 1346197104Sjkim InfoTable = AcpiDmTableInfoIvrs0; 1347197104Sjkim break; 1348250838Sjkim 1349197104Sjkim case ACPI_IVRS_TYPE_MEMORY1: 1350197104Sjkim case ACPI_IVRS_TYPE_MEMORY2: 1351197104Sjkim case ACPI_IVRS_TYPE_MEMORY3: 1352250838Sjkim 1353197104Sjkim InfoTable = AcpiDmTableInfoIvrs1; 1354197104Sjkim break; 1355250838Sjkim 1356197104Sjkim default: 1357250838Sjkim 1358204773Sjkim AcpiOsPrintf ("\n**** Unknown IVRS sub-table type 0x%X\n", 1359197104Sjkim SubTable->Type); 1360197104Sjkim 1361197104Sjkim /* Attempt to continue */ 1362197104Sjkim 1363197104Sjkim if (!SubTable->Length) 1364197104Sjkim { 1365197104Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1366197104Sjkim return; 1367197104Sjkim } 1368197104Sjkim goto NextSubTable; 1369197104Sjkim } 1370197104Sjkim 1371197104Sjkim /* Dump the subtable */ 1372197104Sjkim 1373197104Sjkim AcpiOsPrintf ("\n"); 1374197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1375197104Sjkim SubTable->Length, InfoTable); 1376197104Sjkim if (ACPI_FAILURE (Status)) 1377197104Sjkim { 1378197104Sjkim return; 1379197104Sjkim } 1380197104Sjkim 1381197104Sjkim /* The hardware subtable can contain multiple device entries */ 1382197104Sjkim 1383197104Sjkim if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE) 1384197104Sjkim { 1385197104Sjkim EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); 1386197104Sjkim DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable, 1387197104Sjkim sizeof (ACPI_IVRS_HARDWARE)); 1388197104Sjkim 1389197104Sjkim while (EntryOffset < (Offset + SubTable->Length)) 1390197104Sjkim { 1391197104Sjkim AcpiOsPrintf ("\n"); 1392197104Sjkim /* 1393197104Sjkim * Upper 2 bits of Type encode the length of the device entry 1394197104Sjkim * 1395197104Sjkim * 00 = 4 byte 1396197104Sjkim * 01 = 8 byte 1397197104Sjkim * 10 = 16 byte - currently no entries defined 1398197104Sjkim * 11 = 32 byte - currently no entries defined 1399197104Sjkim */ 1400197104Sjkim EntryType = DeviceEntry->Type; 1401197104Sjkim EntryLength = EntrySizes [EntryType >> 6]; 1402197104Sjkim 1403197104Sjkim switch (EntryType) 1404197104Sjkim { 1405197104Sjkim /* 4-byte device entries */ 1406197104Sjkim 1407197104Sjkim case ACPI_IVRS_TYPE_PAD4: 1408197104Sjkim case ACPI_IVRS_TYPE_ALL: 1409197104Sjkim case ACPI_IVRS_TYPE_SELECT: 1410197104Sjkim case ACPI_IVRS_TYPE_START: 1411197104Sjkim case ACPI_IVRS_TYPE_END: 1412197104Sjkim 1413197104Sjkim InfoTable = AcpiDmTableInfoIvrs4; 1414197104Sjkim break; 1415197104Sjkim 1416197104Sjkim /* 8-byte entries, type A */ 1417197104Sjkim 1418197104Sjkim case ACPI_IVRS_TYPE_ALIAS_SELECT: 1419197104Sjkim case ACPI_IVRS_TYPE_ALIAS_START: 1420197104Sjkim 1421197104Sjkim InfoTable = AcpiDmTableInfoIvrs8a; 1422197104Sjkim break; 1423197104Sjkim 1424197104Sjkim /* 8-byte entries, type B */ 1425197104Sjkim 1426197104Sjkim case ACPI_IVRS_TYPE_PAD8: 1427197104Sjkim case ACPI_IVRS_TYPE_EXT_SELECT: 1428197104Sjkim case ACPI_IVRS_TYPE_EXT_START: 1429197104Sjkim 1430197104Sjkim InfoTable = AcpiDmTableInfoIvrs8b; 1431197104Sjkim break; 1432197104Sjkim 1433197104Sjkim /* 8-byte entries, type C */ 1434197104Sjkim 1435197104Sjkim case ACPI_IVRS_TYPE_SPECIAL: 1436197104Sjkim 1437197104Sjkim InfoTable = AcpiDmTableInfoIvrs8c; 1438197104Sjkim break; 1439197104Sjkim 1440197104Sjkim default: 1441197104Sjkim InfoTable = AcpiDmTableInfoIvrs4; 1442197104Sjkim AcpiOsPrintf ( 1443197104Sjkim "\n**** Unknown IVRS device entry type/length: " 1444204773Sjkim "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", 1445197104Sjkim EntryType, EntryLength, EntryOffset); 1446197104Sjkim break; 1447197104Sjkim } 1448197104Sjkim 1449197104Sjkim /* Dump the Device Entry */ 1450197104Sjkim 1451197104Sjkim Status = AcpiDmDumpTable (Table->Length, EntryOffset, 1452197104Sjkim DeviceEntry, EntryLength, InfoTable); 1453197104Sjkim 1454197104Sjkim EntryOffset += EntryLength; 1455197104Sjkim DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, 1456197104Sjkim EntryLength); 1457197104Sjkim } 1458197104Sjkim } 1459197104Sjkim 1460197104SjkimNextSubTable: 1461197104Sjkim /* Point to next sub-table */ 1462197104Sjkim 1463197104Sjkim Offset += SubTable->Length; 1464197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length); 1465197104Sjkim } 1466197104Sjkim} 1467197104Sjkim 1468197104Sjkim 1469197104Sjkim/******************************************************************************* 1470197104Sjkim * 1471167802Sjkim * FUNCTION: AcpiDmDumpMadt 1472167802Sjkim * 1473167802Sjkim * PARAMETERS: Table - A MADT table 1474167802Sjkim * 1475167802Sjkim * RETURN: None 1476167802Sjkim * 1477167802Sjkim * DESCRIPTION: Format the contents of a MADT. This table type consists 1478167802Sjkim * of an open-ended number of subtables. 1479167802Sjkim * 1480167802Sjkim ******************************************************************************/ 1481167802Sjkim 1482167802Sjkimvoid 1483167802SjkimAcpiDmDumpMadt ( 1484167802Sjkim ACPI_TABLE_HEADER *Table) 1485167802Sjkim{ 1486193529Sjkim ACPI_STATUS Status; 1487167802Sjkim ACPI_SUBTABLE_HEADER *SubTable; 1488167802Sjkim UINT32 Length = Table->Length; 1489167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MADT); 1490167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 1491167802Sjkim 1492167802Sjkim 1493167802Sjkim /* Main table */ 1494167802Sjkim 1495193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); 1496193529Sjkim if (ACPI_FAILURE (Status)) 1497193529Sjkim { 1498193529Sjkim return; 1499193529Sjkim } 1500167802Sjkim 1501167802Sjkim /* Sub-tables */ 1502167802Sjkim 1503167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); 1504167802Sjkim while (Offset < Table->Length) 1505167802Sjkim { 1506167802Sjkim /* Common sub-table header */ 1507167802Sjkim 1508167802Sjkim AcpiOsPrintf ("\n"); 1509193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1510193529Sjkim SubTable->Length, AcpiDmTableInfoMadtHdr); 1511193529Sjkim if (ACPI_FAILURE (Status)) 1512193529Sjkim { 1513193529Sjkim return; 1514193529Sjkim } 1515167802Sjkim 1516167802Sjkim switch (SubTable->Type) 1517167802Sjkim { 1518167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC: 1519250838Sjkim 1520167802Sjkim InfoTable = AcpiDmTableInfoMadt0; 1521167802Sjkim break; 1522250838Sjkim 1523167802Sjkim case ACPI_MADT_TYPE_IO_APIC: 1524250838Sjkim 1525167802Sjkim InfoTable = AcpiDmTableInfoMadt1; 1526167802Sjkim break; 1527250838Sjkim 1528167802Sjkim case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: 1529250838Sjkim 1530167802Sjkim InfoTable = AcpiDmTableInfoMadt2; 1531167802Sjkim break; 1532250838Sjkim 1533167802Sjkim case ACPI_MADT_TYPE_NMI_SOURCE: 1534250838Sjkim 1535167802Sjkim InfoTable = AcpiDmTableInfoMadt3; 1536167802Sjkim break; 1537250838Sjkim 1538167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC_NMI: 1539250838Sjkim 1540167802Sjkim InfoTable = AcpiDmTableInfoMadt4; 1541167802Sjkim break; 1542250838Sjkim 1543167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: 1544250838Sjkim 1545167802Sjkim InfoTable = AcpiDmTableInfoMadt5; 1546167802Sjkim break; 1547250838Sjkim 1548167802Sjkim case ACPI_MADT_TYPE_IO_SAPIC: 1549250838Sjkim 1550167802Sjkim InfoTable = AcpiDmTableInfoMadt6; 1551167802Sjkim break; 1552250838Sjkim 1553167802Sjkim case ACPI_MADT_TYPE_LOCAL_SAPIC: 1554250838Sjkim 1555167802Sjkim InfoTable = AcpiDmTableInfoMadt7; 1556167802Sjkim break; 1557250838Sjkim 1558167802Sjkim case ACPI_MADT_TYPE_INTERRUPT_SOURCE: 1559250838Sjkim 1560167802Sjkim InfoTable = AcpiDmTableInfoMadt8; 1561167802Sjkim break; 1562250838Sjkim 1563193529Sjkim case ACPI_MADT_TYPE_LOCAL_X2APIC: 1564250838Sjkim 1565193529Sjkim InfoTable = AcpiDmTableInfoMadt9; 1566193529Sjkim break; 1567250838Sjkim 1568193529Sjkim case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: 1569250838Sjkim 1570193529Sjkim InfoTable = AcpiDmTableInfoMadt10; 1571193529Sjkim break; 1572250838Sjkim 1573228110Sjkim case ACPI_MADT_TYPE_GENERIC_INTERRUPT: 1574250838Sjkim 1575228110Sjkim InfoTable = AcpiDmTableInfoMadt11; 1576228110Sjkim break; 1577250838Sjkim 1578228110Sjkim case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: 1579250838Sjkim 1580228110Sjkim InfoTable = AcpiDmTableInfoMadt12; 1581228110Sjkim break; 1582250838Sjkim 1583167802Sjkim default: 1584250838Sjkim 1585204773Sjkim AcpiOsPrintf ("\n**** Unknown MADT sub-table type 0x%X\n\n", SubTable->Type); 1586193529Sjkim 1587193529Sjkim /* Attempt to continue */ 1588193529Sjkim 1589193529Sjkim if (!SubTable->Length) 1590193529Sjkim { 1591193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1592193529Sjkim return; 1593193529Sjkim } 1594193529Sjkim goto NextSubTable; 1595193529Sjkim } 1596193529Sjkim 1597193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1598193529Sjkim SubTable->Length, InfoTable); 1599193529Sjkim if (ACPI_FAILURE (Status)) 1600193529Sjkim { 1601167802Sjkim return; 1602167802Sjkim } 1603167802Sjkim 1604193529SjkimNextSubTable: 1605167802Sjkim /* Point to next sub-table */ 1606167802Sjkim 1607167802Sjkim Offset += SubTable->Length; 1608167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length); 1609167802Sjkim } 1610167802Sjkim} 1611167802Sjkim 1612167802Sjkim 1613167802Sjkim/******************************************************************************* 1614167802Sjkim * 1615167802Sjkim * FUNCTION: AcpiDmDumpMcfg 1616167802Sjkim * 1617167802Sjkim * PARAMETERS: Table - A MCFG Table 1618167802Sjkim * 1619167802Sjkim * RETURN: None 1620167802Sjkim * 1621167802Sjkim * DESCRIPTION: Format the contents of a MCFG table 1622167802Sjkim * 1623167802Sjkim ******************************************************************************/ 1624167802Sjkim 1625167802Sjkimvoid 1626167802SjkimAcpiDmDumpMcfg ( 1627167802Sjkim ACPI_TABLE_HEADER *Table) 1628167802Sjkim{ 1629193529Sjkim ACPI_STATUS Status; 1630167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MCFG); 1631167802Sjkim ACPI_MCFG_ALLOCATION *SubTable; 1632167802Sjkim 1633167802Sjkim 1634167802Sjkim /* Main table */ 1635167802Sjkim 1636193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); 1637193529Sjkim if (ACPI_FAILURE (Status)) 1638193529Sjkim { 1639193529Sjkim return; 1640193529Sjkim } 1641167802Sjkim 1642167802Sjkim /* Sub-tables */ 1643167802Sjkim 1644167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); 1645167802Sjkim while (Offset < Table->Length) 1646167802Sjkim { 1647167802Sjkim if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) 1648167802Sjkim { 1649209746Sjkim AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", 1650167802Sjkim sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); 1651167802Sjkim return; 1652167802Sjkim } 1653167802Sjkim 1654167802Sjkim AcpiOsPrintf ("\n"); 1655193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1656193529Sjkim sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); 1657193529Sjkim if (ACPI_FAILURE (Status)) 1658193529Sjkim { 1659193529Sjkim return; 1660193529Sjkim } 1661167802Sjkim 1662167802Sjkim /* Point to next sub-table (each subtable is of fixed length) */ 1663167802Sjkim 1664167802Sjkim Offset += sizeof (ACPI_MCFG_ALLOCATION); 1665167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable, 1666167802Sjkim sizeof (ACPI_MCFG_ALLOCATION)); 1667167802Sjkim } 1668167802Sjkim} 1669167802Sjkim 1670167802Sjkim 1671167802Sjkim/******************************************************************************* 1672167802Sjkim * 1673228110Sjkim * FUNCTION: AcpiDmDumpMpst 1674228110Sjkim * 1675228110Sjkim * PARAMETERS: Table - A MPST Table 1676228110Sjkim * 1677228110Sjkim * RETURN: None 1678228110Sjkim * 1679228110Sjkim * DESCRIPTION: Format the contents of a MPST table 1680228110Sjkim * 1681228110Sjkim ******************************************************************************/ 1682228110Sjkim 1683228110Sjkimvoid 1684228110SjkimAcpiDmDumpMpst ( 1685228110Sjkim ACPI_TABLE_HEADER *Table) 1686228110Sjkim{ 1687228110Sjkim ACPI_STATUS Status; 1688228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MPST); 1689228110Sjkim ACPI_MPST_POWER_NODE *SubTable0; 1690228110Sjkim ACPI_MPST_POWER_STATE *SubTable0A; 1691228110Sjkim ACPI_MPST_COMPONENT *SubTable0B; 1692228110Sjkim ACPI_MPST_DATA_HDR *SubTable1; 1693228110Sjkim ACPI_MPST_POWER_DATA *SubTable2; 1694228110Sjkim UINT16 SubtableCount; 1695241973Sjkim UINT32 PowerStateCount; 1696241973Sjkim UINT32 ComponentCount; 1697228110Sjkim 1698228110Sjkim 1699228110Sjkim /* Main table */ 1700228110Sjkim 1701228110Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); 1702228110Sjkim if (ACPI_FAILURE (Status)) 1703228110Sjkim { 1704228110Sjkim return; 1705228110Sjkim } 1706228110Sjkim 1707228110Sjkim /* Subtable: Memory Power Node(s) */ 1708228110Sjkim 1709228110Sjkim SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; 1710228110Sjkim SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); 1711228110Sjkim 1712228110Sjkim while ((Offset < Table->Length) && SubtableCount) 1713228110Sjkim { 1714228110Sjkim AcpiOsPrintf ("\n"); 1715228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0, 1716228110Sjkim sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); 1717228110Sjkim if (ACPI_FAILURE (Status)) 1718228110Sjkim { 1719228110Sjkim return; 1720228110Sjkim } 1721228110Sjkim 1722228110Sjkim /* Extract the sub-subtable counts */ 1723228110Sjkim 1724228110Sjkim PowerStateCount = SubTable0->NumPowerStates; 1725228110Sjkim ComponentCount = SubTable0->NumPhysicalComponents; 1726228110Sjkim Offset += sizeof (ACPI_MPST_POWER_NODE); 1727228110Sjkim 1728228110Sjkim /* Sub-subtables - Memory Power State Structure(s) */ 1729228110Sjkim 1730228110Sjkim SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0, 1731228110Sjkim sizeof (ACPI_MPST_POWER_NODE)); 1732228110Sjkim 1733228110Sjkim while (PowerStateCount) 1734228110Sjkim { 1735228110Sjkim AcpiOsPrintf ("\n"); 1736228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A, 1737228110Sjkim sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); 1738228110Sjkim if (ACPI_FAILURE (Status)) 1739228110Sjkim { 1740228110Sjkim return; 1741228110Sjkim } 1742228110Sjkim 1743228110Sjkim SubTable0A++; 1744228110Sjkim PowerStateCount--; 1745228110Sjkim Offset += sizeof (ACPI_MPST_POWER_STATE); 1746228110Sjkim } 1747228110Sjkim 1748228110Sjkim /* Sub-subtables - Physical Component ID Structure(s) */ 1749228110Sjkim 1750228110Sjkim SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A); 1751228110Sjkim 1752228110Sjkim if (ComponentCount) 1753228110Sjkim { 1754228110Sjkim AcpiOsPrintf ("\n"); 1755228110Sjkim } 1756228110Sjkim 1757228110Sjkim while (ComponentCount) 1758228110Sjkim { 1759228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B, 1760228110Sjkim sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); 1761228110Sjkim if (ACPI_FAILURE (Status)) 1762228110Sjkim { 1763228110Sjkim return; 1764228110Sjkim } 1765228110Sjkim 1766228110Sjkim SubTable0B++; 1767228110Sjkim ComponentCount--; 1768228110Sjkim Offset += sizeof (ACPI_MPST_COMPONENT); 1769228110Sjkim } 1770228110Sjkim 1771228110Sjkim /* Point to next Memory Power Node subtable */ 1772228110Sjkim 1773228110Sjkim SubtableCount--; 1774228110Sjkim SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0, 1775228110Sjkim sizeof (ACPI_MPST_POWER_NODE) + 1776228110Sjkim (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) + 1777228110Sjkim (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents)); 1778228110Sjkim } 1779228110Sjkim 1780228110Sjkim /* Subtable: Count of Memory Power State Characteristic structures */ 1781228110Sjkim 1782228110Sjkim AcpiOsPrintf ("\n"); 1783228110Sjkim SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0); 1784228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1, 1785228110Sjkim sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); 1786228110Sjkim if (ACPI_FAILURE (Status)) 1787228110Sjkim { 1788228110Sjkim return; 1789228110Sjkim } 1790228110Sjkim 1791228110Sjkim SubtableCount = SubTable1->CharacteristicsCount; 1792228110Sjkim Offset += sizeof (ACPI_MPST_DATA_HDR); 1793228110Sjkim 1794228110Sjkim /* Subtable: Memory Power State Characteristics structure(s) */ 1795228110Sjkim 1796228110Sjkim SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1, sizeof (ACPI_MPST_DATA_HDR)); 1797228110Sjkim 1798228110Sjkim while ((Offset < Table->Length) && SubtableCount) 1799228110Sjkim { 1800228110Sjkim AcpiOsPrintf ("\n"); 1801228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2, 1802228110Sjkim sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); 1803228110Sjkim if (ACPI_FAILURE (Status)) 1804228110Sjkim { 1805228110Sjkim return; 1806228110Sjkim } 1807228110Sjkim 1808228110Sjkim SubTable2++; 1809228110Sjkim SubtableCount--; 1810228110Sjkim Offset += sizeof (ACPI_MPST_POWER_DATA); 1811228110Sjkim } 1812228110Sjkim} 1813228110Sjkim 1814228110Sjkim 1815228110Sjkim/******************************************************************************* 1816228110Sjkim * 1817197104Sjkim * FUNCTION: AcpiDmDumpMsct 1818197104Sjkim * 1819197104Sjkim * PARAMETERS: Table - A MSCT table 1820197104Sjkim * 1821197104Sjkim * RETURN: None 1822197104Sjkim * 1823197104Sjkim * DESCRIPTION: Format the contents of a MSCT 1824197104Sjkim * 1825197104Sjkim ******************************************************************************/ 1826197104Sjkim 1827197104Sjkimvoid 1828197104SjkimAcpiDmDumpMsct ( 1829197104Sjkim ACPI_TABLE_HEADER *Table) 1830197104Sjkim{ 1831197104Sjkim ACPI_STATUS Status; 1832197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MSCT); 1833197104Sjkim ACPI_MSCT_PROXIMITY *SubTable; 1834197104Sjkim 1835197104Sjkim 1836197104Sjkim /* Main table */ 1837197104Sjkim 1838197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); 1839197104Sjkim if (ACPI_FAILURE (Status)) 1840197104Sjkim { 1841197104Sjkim return; 1842197104Sjkim } 1843197104Sjkim 1844197104Sjkim /* Sub-tables */ 1845197104Sjkim 1846197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); 1847197104Sjkim while (Offset < Table->Length) 1848197104Sjkim { 1849197104Sjkim /* Common sub-table header */ 1850197104Sjkim 1851197104Sjkim AcpiOsPrintf ("\n"); 1852197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1853197104Sjkim sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); 1854197104Sjkim if (ACPI_FAILURE (Status)) 1855197104Sjkim { 1856197104Sjkim return; 1857197104Sjkim } 1858197104Sjkim 1859197104Sjkim /* Point to next sub-table */ 1860197104Sjkim 1861197104Sjkim Offset += sizeof (ACPI_MSCT_PROXIMITY); 1862197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY)); 1863197104Sjkim } 1864197104Sjkim} 1865197104Sjkim 1866197104Sjkim 1867197104Sjkim/******************************************************************************* 1868197104Sjkim * 1869246849Sjkim * FUNCTION: AcpiDmDumpMtmr 1870246849Sjkim * 1871246849Sjkim * PARAMETERS: Table - A MTMR table 1872246849Sjkim * 1873246849Sjkim * RETURN: None 1874246849Sjkim * 1875246849Sjkim * DESCRIPTION: Format the contents of a MTMR 1876246849Sjkim * 1877246849Sjkim ******************************************************************************/ 1878246849Sjkim 1879246849Sjkimvoid 1880246849SjkimAcpiDmDumpMtmr ( 1881246849Sjkim ACPI_TABLE_HEADER *Table) 1882246849Sjkim{ 1883246849Sjkim ACPI_STATUS Status; 1884246849Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MTMR); 1885246849Sjkim ACPI_MTMR_ENTRY *SubTable; 1886246849Sjkim 1887246849Sjkim 1888246849Sjkim /* Main table */ 1889246849Sjkim 1890246849Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); 1891246849Sjkim if (ACPI_FAILURE (Status)) 1892246849Sjkim { 1893246849Sjkim return; 1894246849Sjkim } 1895246849Sjkim 1896246849Sjkim /* Sub-tables */ 1897246849Sjkim 1898246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); 1899246849Sjkim while (Offset < Table->Length) 1900246849Sjkim { 1901246849Sjkim /* Common sub-table header */ 1902246849Sjkim 1903246849Sjkim AcpiOsPrintf ("\n"); 1904246849Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1905246849Sjkim sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); 1906246849Sjkim if (ACPI_FAILURE (Status)) 1907246849Sjkim { 1908246849Sjkim return; 1909246849Sjkim } 1910246849Sjkim 1911246849Sjkim /* Point to next sub-table */ 1912246849Sjkim 1913246849Sjkim Offset += sizeof (ACPI_MTMR_ENTRY); 1914246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, sizeof (ACPI_MTMR_ENTRY)); 1915246849Sjkim } 1916246849Sjkim} 1917246849Sjkim 1918246849Sjkim 1919246849Sjkim/******************************************************************************* 1920246849Sjkim * 1921228110Sjkim * FUNCTION: AcpiDmDumpPcct 1922228110Sjkim * 1923228110Sjkim * PARAMETERS: Table - A PCCT table 1924228110Sjkim * 1925228110Sjkim * RETURN: None 1926228110Sjkim * 1927228110Sjkim * DESCRIPTION: Format the contents of a PCCT. This table type consists 1928228110Sjkim * of an open-ended number of subtables. 1929228110Sjkim * 1930228110Sjkim ******************************************************************************/ 1931228110Sjkim 1932228110Sjkimvoid 1933228110SjkimAcpiDmDumpPcct ( 1934228110Sjkim ACPI_TABLE_HEADER *Table) 1935228110Sjkim{ 1936228110Sjkim ACPI_STATUS Status; 1937228110Sjkim ACPI_PCCT_SUBSPACE *SubTable; 1938228110Sjkim UINT32 Length = Table->Length; 1939228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_PCCT); 1940228110Sjkim 1941228110Sjkim 1942228110Sjkim /* Main table */ 1943228110Sjkim 1944228110Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); 1945228110Sjkim if (ACPI_FAILURE (Status)) 1946228110Sjkim { 1947228110Sjkim return; 1948228110Sjkim } 1949228110Sjkim 1950228110Sjkim /* Sub-tables */ 1951228110Sjkim 1952228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); 1953228110Sjkim while (Offset < Table->Length) 1954228110Sjkim { 1955228110Sjkim AcpiOsPrintf ("\n"); 1956228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1957228110Sjkim SubTable->Header.Length, AcpiDmTableInfoPcct0); 1958228110Sjkim if (ACPI_FAILURE (Status)) 1959228110Sjkim { 1960228110Sjkim return; 1961228110Sjkim } 1962228110Sjkim 1963228110Sjkim /* Point to next sub-table */ 1964228110Sjkim 1965228110Sjkim Offset += SubTable->Header.Length; 1966228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable, 1967228110Sjkim SubTable->Header.Length); 1968228110Sjkim } 1969228110Sjkim} 1970228110Sjkim 1971228110Sjkim 1972228110Sjkim/******************************************************************************* 1973228110Sjkim * 1974228110Sjkim * FUNCTION: AcpiDmDumpPmtt 1975228110Sjkim * 1976228110Sjkim * PARAMETERS: Table - A PMTT table 1977228110Sjkim * 1978228110Sjkim * RETURN: None 1979228110Sjkim * 1980228110Sjkim * DESCRIPTION: Format the contents of a PMTT. This table type consists 1981228110Sjkim * of an open-ended number of subtables. 1982228110Sjkim * 1983228110Sjkim ******************************************************************************/ 1984228110Sjkim 1985228110Sjkimvoid 1986228110SjkimAcpiDmDumpPmtt ( 1987228110Sjkim ACPI_TABLE_HEADER *Table) 1988228110Sjkim{ 1989228110Sjkim ACPI_STATUS Status; 1990228110Sjkim ACPI_PMTT_HEADER *SubTable; 1991228110Sjkim ACPI_PMTT_HEADER *MemSubTable; 1992228110Sjkim ACPI_PMTT_HEADER *DimmSubTable; 1993228110Sjkim ACPI_PMTT_DOMAIN *DomainArray; 1994228110Sjkim UINT32 Length = Table->Length; 1995228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_PMTT); 1996228110Sjkim UINT32 MemOffset; 1997228110Sjkim UINT32 DimmOffset; 1998228110Sjkim UINT32 DomainOffset; 1999228110Sjkim UINT32 DomainCount; 2000228110Sjkim 2001228110Sjkim 2002228110Sjkim /* Main table */ 2003228110Sjkim 2004228110Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); 2005228110Sjkim if (ACPI_FAILURE (Status)) 2006228110Sjkim { 2007228110Sjkim return; 2008228110Sjkim } 2009228110Sjkim 2010228110Sjkim /* Subtables */ 2011228110Sjkim 2012228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); 2013228110Sjkim while (Offset < Table->Length) 2014228110Sjkim { 2015228110Sjkim /* Common subtable header */ 2016228110Sjkim 2017228110Sjkim AcpiOsPrintf ("\n"); 2018228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2019228110Sjkim SubTable->Length, AcpiDmTableInfoPmttHdr); 2020228110Sjkim if (ACPI_FAILURE (Status)) 2021228110Sjkim { 2022228110Sjkim return; 2023228110Sjkim } 2024228110Sjkim 2025228110Sjkim /* Only Socket subtables are expected at this level */ 2026228110Sjkim 2027228110Sjkim if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET) 2028228110Sjkim { 2029228110Sjkim AcpiOsPrintf ( 2030228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2031228110Sjkim SubTable->Type); 2032228110Sjkim return; 2033228110Sjkim } 2034228110Sjkim 2035228110Sjkim /* Dump the fixed-length portion of the subtable */ 2036228110Sjkim 2037228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2038228110Sjkim SubTable->Length, AcpiDmTableInfoPmtt0); 2039228110Sjkim if (ACPI_FAILURE (Status)) 2040228110Sjkim { 2041228110Sjkim return; 2042228110Sjkim } 2043228110Sjkim 2044228110Sjkim /* Walk the memory controller subtables */ 2045228110Sjkim 2046228110Sjkim MemOffset = sizeof (ACPI_PMTT_SOCKET); 2047228110Sjkim MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable, 2048228110Sjkim sizeof (ACPI_PMTT_SOCKET)); 2049228110Sjkim 2050228110Sjkim while (((Offset + MemOffset) < Table->Length) && 2051228110Sjkim (MemOffset < SubTable->Length)) 2052228110Sjkim { 2053228110Sjkim /* Common subtable header */ 2054228110Sjkim 2055228110Sjkim AcpiOsPrintf ("\n"); 2056228110Sjkim Status = AcpiDmDumpTable (Length, 2057228110Sjkim Offset + MemOffset, MemSubTable, 2058228110Sjkim MemSubTable->Length, AcpiDmTableInfoPmttHdr); 2059228110Sjkim if (ACPI_FAILURE (Status)) 2060228110Sjkim { 2061228110Sjkim return; 2062228110Sjkim } 2063228110Sjkim 2064228110Sjkim /* Only memory controller subtables are expected at this level */ 2065228110Sjkim 2066228110Sjkim if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER) 2067228110Sjkim { 2068228110Sjkim AcpiOsPrintf ( 2069228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2070228110Sjkim MemSubTable->Type); 2071228110Sjkim return; 2072228110Sjkim } 2073228110Sjkim 2074228110Sjkim /* Dump the fixed-length portion of the controller subtable */ 2075228110Sjkim 2076228110Sjkim Status = AcpiDmDumpTable (Length, 2077228110Sjkim Offset + MemOffset, MemSubTable, 2078228110Sjkim MemSubTable->Length, AcpiDmTableInfoPmtt1); 2079228110Sjkim if (ACPI_FAILURE (Status)) 2080228110Sjkim { 2081228110Sjkim return; 2082228110Sjkim } 2083228110Sjkim 2084228110Sjkim /* Walk the variable count of proximity domains */ 2085228110Sjkim 2086228110Sjkim DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount; 2087228110Sjkim DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); 2088228110Sjkim DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable, 2089228110Sjkim sizeof (ACPI_PMTT_CONTROLLER)); 2090228110Sjkim 2091228110Sjkim while (((Offset + MemOffset + DomainOffset) < Table->Length) && 2092228110Sjkim ((MemOffset + DomainOffset) < SubTable->Length) && 2093228110Sjkim DomainCount) 2094228110Sjkim { 2095228110Sjkim Status = AcpiDmDumpTable (Length, 2096228110Sjkim Offset + MemOffset + DomainOffset, DomainArray, 2097228110Sjkim sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); 2098228110Sjkim if (ACPI_FAILURE (Status)) 2099228110Sjkim { 2100228110Sjkim return; 2101228110Sjkim } 2102228110Sjkim 2103228110Sjkim DomainOffset += sizeof (ACPI_PMTT_DOMAIN); 2104228110Sjkim DomainArray++; 2105228110Sjkim DomainCount--; 2106228110Sjkim } 2107228110Sjkim 2108228110Sjkim if (DomainCount) 2109228110Sjkim { 2110228110Sjkim AcpiOsPrintf ( 2111228110Sjkim "\n**** DomainCount exceeds subtable length\n\n", 2112228110Sjkim MemSubTable->Type); 2113228110Sjkim } 2114228110Sjkim 2115228110Sjkim /* Walk the physical component (DIMM) subtables */ 2116228110Sjkim 2117228110Sjkim DimmOffset = DomainOffset; 2118228110Sjkim DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable, 2119228110Sjkim DomainOffset); 2120228110Sjkim 2121228110Sjkim while (((Offset + MemOffset + DimmOffset) < Table->Length) && 2122228110Sjkim (DimmOffset < MemSubTable->Length)) 2123228110Sjkim { 2124228110Sjkim /* Common subtable header */ 2125228110Sjkim 2126228110Sjkim AcpiOsPrintf ("\n"); 2127228110Sjkim Status = AcpiDmDumpTable (Length, 2128228110Sjkim Offset + MemOffset + DimmOffset, DimmSubTable, 2129228110Sjkim DimmSubTable->Length, AcpiDmTableInfoPmttHdr); 2130228110Sjkim if (ACPI_FAILURE (Status)) 2131228110Sjkim { 2132228110Sjkim return; 2133228110Sjkim } 2134228110Sjkim 2135228110Sjkim /* Only DIMM subtables are expected at this level */ 2136228110Sjkim 2137228110Sjkim if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM) 2138228110Sjkim { 2139228110Sjkim AcpiOsPrintf ( 2140228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2141228110Sjkim DimmSubTable->Type); 2142228110Sjkim return; 2143228110Sjkim } 2144228110Sjkim 2145228110Sjkim /* Dump the fixed-length DIMM subtable */ 2146228110Sjkim 2147228110Sjkim Status = AcpiDmDumpTable (Length, 2148228110Sjkim Offset + MemOffset + DimmOffset, DimmSubTable, 2149228110Sjkim DimmSubTable->Length, AcpiDmTableInfoPmtt2); 2150228110Sjkim if (ACPI_FAILURE (Status)) 2151228110Sjkim { 2152228110Sjkim return; 2153228110Sjkim } 2154228110Sjkim 2155228110Sjkim /* Point to next DIMM subtable */ 2156228110Sjkim 2157228110Sjkim DimmOffset += DimmSubTable->Length; 2158228110Sjkim DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 2159228110Sjkim DimmSubTable, DimmSubTable->Length); 2160228110Sjkim } 2161228110Sjkim 2162228110Sjkim /* Point to next Controller subtable */ 2163228110Sjkim 2164228110Sjkim MemOffset += MemSubTable->Length; 2165228110Sjkim MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 2166228110Sjkim MemSubTable, MemSubTable->Length); 2167228110Sjkim } 2168228110Sjkim 2169228110Sjkim /* Point to next Socket subtable */ 2170228110Sjkim 2171228110Sjkim Offset += SubTable->Length; 2172228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 2173228110Sjkim SubTable, SubTable->Length); 2174228110Sjkim } 2175228110Sjkim} 2176228110Sjkim 2177228110Sjkim 2178228110Sjkim/******************************************************************************* 2179228110Sjkim * 2180228110Sjkim * FUNCTION: AcpiDmDumpS3pt 2181228110Sjkim * 2182228110Sjkim * PARAMETERS: Table - A S3PT table 2183228110Sjkim * 2184228110Sjkim * RETURN: Length of the table 2185228110Sjkim * 2186228110Sjkim * DESCRIPTION: Format the contents of a S3PT 2187228110Sjkim * 2188228110Sjkim ******************************************************************************/ 2189228110Sjkim 2190228110SjkimUINT32 2191228110SjkimAcpiDmDumpS3pt ( 2192228110Sjkim ACPI_TABLE_HEADER *Tables) 2193228110Sjkim{ 2194228110Sjkim ACPI_STATUS Status; 2195228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_S3PT); 2196228110Sjkim ACPI_S3PT_HEADER *SubTable; 2197228110Sjkim ACPI_DMTABLE_INFO *InfoTable; 2198228110Sjkim ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); 2199228110Sjkim 2200228110Sjkim 2201228110Sjkim /* Main table */ 2202228110Sjkim 2203228110Sjkim Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); 2204228110Sjkim if (ACPI_FAILURE (Status)) 2205228110Sjkim { 2206228110Sjkim return 0; 2207228110Sjkim } 2208228110Sjkim 2209228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset); 2210228110Sjkim while (Offset < S3ptTable->Length) 2211228110Sjkim { 2212228110Sjkim /* Common sub-table header */ 2213228110Sjkim 2214228110Sjkim AcpiOsPrintf ("\n"); 2215228110Sjkim Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable, 2216228110Sjkim SubTable->Length, AcpiDmTableInfoS3ptHdr); 2217228110Sjkim if (ACPI_FAILURE (Status)) 2218228110Sjkim { 2219228110Sjkim return 0; 2220228110Sjkim } 2221228110Sjkim 2222228110Sjkim switch (SubTable->Type) 2223228110Sjkim { 2224228110Sjkim case ACPI_S3PT_TYPE_RESUME: 2225250838Sjkim 2226228110Sjkim InfoTable = AcpiDmTableInfoS3pt0; 2227228110Sjkim break; 2228250838Sjkim 2229228110Sjkim case ACPI_S3PT_TYPE_SUSPEND: 2230250838Sjkim 2231228110Sjkim InfoTable = AcpiDmTableInfoS3pt1; 2232228110Sjkim break; 2233250838Sjkim 2234228110Sjkim default: 2235250838Sjkim 2236228110Sjkim AcpiOsPrintf ("\n**** Unknown S3PT sub-table type 0x%X\n", SubTable->Type); 2237228110Sjkim 2238228110Sjkim /* Attempt to continue */ 2239228110Sjkim 2240228110Sjkim if (!SubTable->Length) 2241228110Sjkim { 2242228110Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2243228110Sjkim return 0; 2244228110Sjkim } 2245228110Sjkim goto NextSubTable; 2246228110Sjkim } 2247228110Sjkim 2248228110Sjkim AcpiOsPrintf ("\n"); 2249228110Sjkim Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable, 2250228110Sjkim SubTable->Length, InfoTable); 2251228110Sjkim if (ACPI_FAILURE (Status)) 2252228110Sjkim { 2253228110Sjkim return 0; 2254228110Sjkim } 2255228110Sjkim 2256228110SjkimNextSubTable: 2257228110Sjkim /* Point to next sub-table */ 2258228110Sjkim 2259228110Sjkim Offset += SubTable->Length; 2260228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length); 2261228110Sjkim } 2262228110Sjkim 2263228110Sjkim return (S3ptTable->Length); 2264228110Sjkim} 2265228110Sjkim 2266228110Sjkim 2267228110Sjkim/******************************************************************************* 2268228110Sjkim * 2269219707Sjkim * FUNCTION: AcpiDmDumpSlic 2270219707Sjkim * 2271219707Sjkim * PARAMETERS: Table - A SLIC table 2272219707Sjkim * 2273219707Sjkim * RETURN: None 2274219707Sjkim * 2275219707Sjkim * DESCRIPTION: Format the contents of a SLIC 2276219707Sjkim * 2277219707Sjkim ******************************************************************************/ 2278219707Sjkim 2279219707Sjkimvoid 2280219707SjkimAcpiDmDumpSlic ( 2281219707Sjkim ACPI_TABLE_HEADER *Table) 2282219707Sjkim{ 2283219707Sjkim ACPI_STATUS Status; 2284219707Sjkim UINT32 Offset = sizeof (ACPI_TABLE_SLIC); 2285219707Sjkim ACPI_SLIC_HEADER *SubTable; 2286219707Sjkim ACPI_DMTABLE_INFO *InfoTable; 2287219707Sjkim 2288219707Sjkim 2289219707Sjkim /* There is no main SLIC table, only subtables */ 2290219707Sjkim 2291219707Sjkim SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, Table, Offset); 2292219707Sjkim while (Offset < Table->Length) 2293219707Sjkim { 2294219707Sjkim /* Common sub-table header */ 2295219707Sjkim 2296219707Sjkim AcpiOsPrintf ("\n"); 2297219707Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2298219707Sjkim SubTable->Length, AcpiDmTableInfoSlicHdr); 2299219707Sjkim if (ACPI_FAILURE (Status)) 2300219707Sjkim { 2301219707Sjkim return; 2302219707Sjkim } 2303219707Sjkim 2304219707Sjkim switch (SubTable->Type) 2305219707Sjkim { 2306219707Sjkim case ACPI_SLIC_TYPE_PUBLIC_KEY: 2307250838Sjkim 2308219707Sjkim InfoTable = AcpiDmTableInfoSlic0; 2309219707Sjkim break; 2310250838Sjkim 2311219707Sjkim case ACPI_SLIC_TYPE_WINDOWS_MARKER: 2312250838Sjkim 2313219707Sjkim InfoTable = AcpiDmTableInfoSlic1; 2314219707Sjkim break; 2315250838Sjkim 2316219707Sjkim default: 2317250838Sjkim 2318219707Sjkim AcpiOsPrintf ("\n**** Unknown SLIC sub-table type 0x%X\n", SubTable->Type); 2319219707Sjkim 2320219707Sjkim /* Attempt to continue */ 2321219707Sjkim 2322219707Sjkim if (!SubTable->Length) 2323219707Sjkim { 2324219707Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2325219707Sjkim return; 2326219707Sjkim } 2327219707Sjkim goto NextSubTable; 2328219707Sjkim } 2329219707Sjkim 2330219707Sjkim AcpiOsPrintf ("\n"); 2331219707Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2332219707Sjkim SubTable->Length, InfoTable); 2333219707Sjkim if (ACPI_FAILURE (Status)) 2334219707Sjkim { 2335219707Sjkim return; 2336219707Sjkim } 2337219707Sjkim 2338219707SjkimNextSubTable: 2339219707Sjkim /* Point to next sub-table */ 2340219707Sjkim 2341219707Sjkim Offset += SubTable->Length; 2342219707Sjkim SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, SubTable, SubTable->Length); 2343219707Sjkim } 2344219707Sjkim} 2345219707Sjkim 2346219707Sjkim 2347219707Sjkim/******************************************************************************* 2348219707Sjkim * 2349167802Sjkim * FUNCTION: AcpiDmDumpSlit 2350167802Sjkim * 2351167802Sjkim * PARAMETERS: Table - An SLIT 2352167802Sjkim * 2353167802Sjkim * RETURN: None 2354167802Sjkim * 2355167802Sjkim * DESCRIPTION: Format the contents of a SLIT 2356167802Sjkim * 2357167802Sjkim ******************************************************************************/ 2358167802Sjkim 2359167802Sjkimvoid 2360167802SjkimAcpiDmDumpSlit ( 2361167802Sjkim ACPI_TABLE_HEADER *Table) 2362167802Sjkim{ 2363193529Sjkim ACPI_STATUS Status; 2364167802Sjkim UINT32 Offset; 2365167802Sjkim UINT8 *Row; 2366167802Sjkim UINT32 Localities; 2367167802Sjkim UINT32 i; 2368167802Sjkim UINT32 j; 2369167802Sjkim 2370167802Sjkim 2371167802Sjkim /* Main table */ 2372167802Sjkim 2373193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); 2374193529Sjkim if (ACPI_FAILURE (Status)) 2375193529Sjkim { 2376193529Sjkim return; 2377193529Sjkim } 2378167802Sjkim 2379167802Sjkim /* Display the Locality NxN Matrix */ 2380167802Sjkim 2381167802Sjkim Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; 2382167802Sjkim Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); 2383167802Sjkim Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; 2384167802Sjkim 2385167802Sjkim for (i = 0; i < Localities; i++) 2386167802Sjkim { 2387167802Sjkim /* Display one row of the matrix */ 2388167802Sjkim 2389167802Sjkim AcpiDmLineHeader2 (Offset, Localities, "Locality", i); 2390167802Sjkim for (j = 0; j < Localities; j++) 2391167802Sjkim { 2392167802Sjkim /* Check for beyond EOT */ 2393167802Sjkim 2394167802Sjkim if (Offset >= Table->Length) 2395167802Sjkim { 2396167802Sjkim AcpiOsPrintf ("\n**** Not enough room in table for all localities\n"); 2397167802Sjkim return; 2398167802Sjkim } 2399167802Sjkim 2400209746Sjkim AcpiOsPrintf ("%2.2X", Row[j]); 2401167802Sjkim Offset++; 2402167802Sjkim 2403167802Sjkim /* Display up to 16 bytes per output row */ 2404167802Sjkim 2405209746Sjkim if ((j+1) < Localities) 2406167802Sjkim { 2407220663Sjkim AcpiOsPrintf (" "); 2408209746Sjkim 2409209746Sjkim if (j && (((j+1) % 16) == 0)) 2410209746Sjkim { 2411220663Sjkim AcpiOsPrintf ("\\\n"); /* With line continuation char */ 2412220663Sjkim AcpiDmLineHeader (Offset, 0, NULL); 2413209746Sjkim } 2414167802Sjkim } 2415167802Sjkim } 2416167802Sjkim 2417167802Sjkim /* Point to next row */ 2418167802Sjkim 2419167802Sjkim AcpiOsPrintf ("\n"); 2420167802Sjkim Row += Localities; 2421167802Sjkim } 2422167802Sjkim} 2423167802Sjkim 2424167802Sjkim 2425167802Sjkim/******************************************************************************* 2426167802Sjkim * 2427167802Sjkim * FUNCTION: AcpiDmDumpSrat 2428167802Sjkim * 2429167802Sjkim * PARAMETERS: Table - A SRAT table 2430167802Sjkim * 2431167802Sjkim * RETURN: None 2432167802Sjkim * 2433167802Sjkim * DESCRIPTION: Format the contents of a SRAT 2434167802Sjkim * 2435167802Sjkim ******************************************************************************/ 2436167802Sjkim 2437167802Sjkimvoid 2438167802SjkimAcpiDmDumpSrat ( 2439167802Sjkim ACPI_TABLE_HEADER *Table) 2440167802Sjkim{ 2441193529Sjkim ACPI_STATUS Status; 2442167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_SRAT); 2443167802Sjkim ACPI_SUBTABLE_HEADER *SubTable; 2444167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 2445167802Sjkim 2446167802Sjkim 2447167802Sjkim /* Main table */ 2448167802Sjkim 2449193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); 2450193529Sjkim if (ACPI_FAILURE (Status)) 2451193529Sjkim { 2452193529Sjkim return; 2453193529Sjkim } 2454167802Sjkim 2455167802Sjkim /* Sub-tables */ 2456167802Sjkim 2457167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); 2458167802Sjkim while (Offset < Table->Length) 2459167802Sjkim { 2460193529Sjkim /* Common sub-table header */ 2461193529Sjkim 2462193529Sjkim AcpiOsPrintf ("\n"); 2463193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2464193529Sjkim SubTable->Length, AcpiDmTableInfoSratHdr); 2465193529Sjkim if (ACPI_FAILURE (Status)) 2466193529Sjkim { 2467193529Sjkim return; 2468193529Sjkim } 2469193529Sjkim 2470167802Sjkim switch (SubTable->Type) 2471167802Sjkim { 2472167802Sjkim case ACPI_SRAT_TYPE_CPU_AFFINITY: 2473250838Sjkim 2474167802Sjkim InfoTable = AcpiDmTableInfoSrat0; 2475167802Sjkim break; 2476250838Sjkim 2477167802Sjkim case ACPI_SRAT_TYPE_MEMORY_AFFINITY: 2478250838Sjkim 2479167802Sjkim InfoTable = AcpiDmTableInfoSrat1; 2480167802Sjkim break; 2481250838Sjkim 2482193529Sjkim case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: 2483250838Sjkim 2484193529Sjkim InfoTable = AcpiDmTableInfoSrat2; 2485193529Sjkim break; 2486250838Sjkim 2487167802Sjkim default: 2488204773Sjkim AcpiOsPrintf ("\n**** Unknown SRAT sub-table type 0x%X\n", SubTable->Type); 2489193529Sjkim 2490193529Sjkim /* Attempt to continue */ 2491193529Sjkim 2492193529Sjkim if (!SubTable->Length) 2493193529Sjkim { 2494193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2495193529Sjkim return; 2496193529Sjkim } 2497193529Sjkim goto NextSubTable; 2498167802Sjkim } 2499167802Sjkim 2500167802Sjkim AcpiOsPrintf ("\n"); 2501193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2502193529Sjkim SubTable->Length, InfoTable); 2503193529Sjkim if (ACPI_FAILURE (Status)) 2504193529Sjkim { 2505193529Sjkim return; 2506193529Sjkim } 2507167802Sjkim 2508193529SjkimNextSubTable: 2509167802Sjkim /* Point to next sub-table */ 2510167802Sjkim 2511167802Sjkim Offset += SubTable->Length; 2512167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length); 2513167802Sjkim } 2514167802Sjkim} 2515167802Sjkim 2516197104Sjkim 2517197104Sjkim/******************************************************************************* 2518197104Sjkim * 2519246849Sjkim * FUNCTION: AcpiDmDumpVrtc 2520246849Sjkim * 2521246849Sjkim * PARAMETERS: Table - A VRTC table 2522246849Sjkim * 2523246849Sjkim * RETURN: None 2524246849Sjkim * 2525246849Sjkim * DESCRIPTION: Format the contents of a VRTC 2526246849Sjkim * 2527246849Sjkim ******************************************************************************/ 2528246849Sjkim 2529246849Sjkimvoid 2530246849SjkimAcpiDmDumpVrtc ( 2531246849Sjkim ACPI_TABLE_HEADER *Table) 2532246849Sjkim{ 2533246849Sjkim ACPI_STATUS Status; 2534246849Sjkim UINT32 Offset = sizeof (ACPI_TABLE_VRTC); 2535246849Sjkim ACPI_VRTC_ENTRY *SubTable; 2536246849Sjkim 2537246849Sjkim 2538246849Sjkim /* Main table */ 2539246849Sjkim 2540246849Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); 2541246849Sjkim if (ACPI_FAILURE (Status)) 2542246849Sjkim { 2543246849Sjkim return; 2544246849Sjkim } 2545246849Sjkim 2546246849Sjkim /* Sub-tables */ 2547246849Sjkim 2548246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); 2549246849Sjkim while (Offset < Table->Length) 2550246849Sjkim { 2551246849Sjkim /* Common sub-table header */ 2552246849Sjkim 2553246849Sjkim AcpiOsPrintf ("\n"); 2554246849Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2555246849Sjkim sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); 2556246849Sjkim if (ACPI_FAILURE (Status)) 2557246849Sjkim { 2558246849Sjkim return; 2559246849Sjkim } 2560246849Sjkim 2561246849Sjkim /* Point to next sub-table */ 2562246849Sjkim 2563246849Sjkim Offset += sizeof (ACPI_VRTC_ENTRY); 2564246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, sizeof (ACPI_VRTC_ENTRY)); 2565246849Sjkim } 2566246849Sjkim} 2567246849Sjkim 2568246849Sjkim 2569246849Sjkim/******************************************************************************* 2570246849Sjkim * 2571197104Sjkim * FUNCTION: AcpiDmDumpWdat 2572197104Sjkim * 2573197104Sjkim * PARAMETERS: Table - A WDAT table 2574197104Sjkim * 2575197104Sjkim * RETURN: None 2576197104Sjkim * 2577197104Sjkim * DESCRIPTION: Format the contents of a WDAT 2578197104Sjkim * 2579197104Sjkim ******************************************************************************/ 2580197104Sjkim 2581197104Sjkimvoid 2582197104SjkimAcpiDmDumpWdat ( 2583197104Sjkim ACPI_TABLE_HEADER *Table) 2584197104Sjkim{ 2585197104Sjkim ACPI_STATUS Status; 2586197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_WDAT); 2587197104Sjkim ACPI_WDAT_ENTRY *SubTable; 2588197104Sjkim 2589197104Sjkim 2590197104Sjkim /* Main table */ 2591197104Sjkim 2592197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); 2593197104Sjkim if (ACPI_FAILURE (Status)) 2594197104Sjkim { 2595197104Sjkim return; 2596197104Sjkim } 2597197104Sjkim 2598197104Sjkim /* Sub-tables */ 2599197104Sjkim 2600197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); 2601197104Sjkim while (Offset < Table->Length) 2602197104Sjkim { 2603197104Sjkim /* Common sub-table header */ 2604197104Sjkim 2605197104Sjkim AcpiOsPrintf ("\n"); 2606197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2607197104Sjkim sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); 2608197104Sjkim if (ACPI_FAILURE (Status)) 2609197104Sjkim { 2610197104Sjkim return; 2611197104Sjkim } 2612197104Sjkim 2613197104Sjkim /* Point to next sub-table */ 2614197104Sjkim 2615197104Sjkim Offset += sizeof (ACPI_WDAT_ENTRY); 2616197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY)); 2617197104Sjkim } 2618197104Sjkim} 2619