dmtbdump.c revision 272444
1167802Sjkim/****************************************************************************** 2167802Sjkim * 3167802Sjkim * Module Name: dmtbdump - Dump ACPI data tables that contain no AML code 4167802Sjkim * 5167802Sjkim *****************************************************************************/ 6167802Sjkim 7217365Sjkim/* 8272444Sjkim * Copyright (C) 2000 - 2014, 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 422272444Sjkim /* No main table, only subtables */ 423167802Sjkim 424167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset); 425167802Sjkim while (Offset < Table->Length) 426167802Sjkim { 427272444Sjkim /* Common subtable 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 482272444Sjkim AcpiOsPrintf ("\n**** Unknown ASF subtable 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 544272444Sjkim /* Point to next subtable */ 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 589272444Sjkim /* Subtables */ 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 602272444Sjkim /* Point to next subtable */ 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 641272444Sjkim /* Subtables (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 705272444Sjkim /* Point to next subtable */ 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 749272444Sjkim /* Subtables */ 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 812272444Sjkim if (SubTable->OemDataOffset) 813272444Sjkim { 814272444Sjkim AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength, 815272444Sjkim Offset + SubTable->OemDataOffset, "OEM Data"); 816272444Sjkim } 817239340Sjkim 818272444Sjkim /* Point to next subtable */ 819239340Sjkim 820239340Sjkim Offset += SubTable->Length; 821239340Sjkim SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable, 822239340Sjkim SubTable->Length); 823239340Sjkim } 824239340Sjkim} 825239340Sjkim 826239340Sjkim 827239340Sjkim/******************************************************************************* 828239340Sjkim * 829167802Sjkim * FUNCTION: AcpiDmDumpDmar 830167802Sjkim * 831167802Sjkim * PARAMETERS: Table - A DMAR table 832167802Sjkim * 833167802Sjkim * RETURN: None 834167802Sjkim * 835167802Sjkim * DESCRIPTION: Format the contents of a DMAR. This table type consists 836167802Sjkim * of an open-ended number of subtables. 837167802Sjkim * 838167802Sjkim ******************************************************************************/ 839167802Sjkim 840239340Sjkim 841167802Sjkimvoid 842167802SjkimAcpiDmDumpDmar ( 843167802Sjkim ACPI_TABLE_HEADER *Table) 844167802Sjkim{ 845193529Sjkim ACPI_STATUS Status; 846167802Sjkim ACPI_DMAR_HEADER *SubTable; 847167802Sjkim UINT32 Length = Table->Length; 848167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_DMAR); 849167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 850167802Sjkim ACPI_DMAR_DEVICE_SCOPE *ScopeTable; 851167802Sjkim UINT32 ScopeOffset; 852167802Sjkim UINT8 *PciPath; 853167802Sjkim UINT32 PathOffset; 854167802Sjkim 855167802Sjkim 856167802Sjkim /* Main table */ 857167802Sjkim 858193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar); 859193529Sjkim if (ACPI_FAILURE (Status)) 860193529Sjkim { 861193529Sjkim return; 862193529Sjkim } 863167802Sjkim 864272444Sjkim /* Subtables */ 865167802Sjkim 866167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset); 867167802Sjkim while (Offset < Table->Length) 868167802Sjkim { 869272444Sjkim /* Common subtable header */ 870167802Sjkim 871167802Sjkim AcpiOsPrintf ("\n"); 872193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 873193529Sjkim SubTable->Length, AcpiDmTableInfoDmarHdr); 874193529Sjkim if (ACPI_FAILURE (Status)) 875193529Sjkim { 876193529Sjkim return; 877193529Sjkim } 878252279Sjkim AcpiOsPrintf ("\n"); 879167802Sjkim 880167802Sjkim switch (SubTable->Type) 881167802Sjkim { 882167802Sjkim case ACPI_DMAR_TYPE_HARDWARE_UNIT: 883250838Sjkim 884167802Sjkim InfoTable = AcpiDmTableInfoDmar0; 885167802Sjkim ScopeOffset = sizeof (ACPI_DMAR_HARDWARE_UNIT); 886167802Sjkim break; 887250838Sjkim 888167802Sjkim case ACPI_DMAR_TYPE_RESERVED_MEMORY: 889250838Sjkim 890167802Sjkim InfoTable = AcpiDmTableInfoDmar1; 891167802Sjkim ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); 892167802Sjkim break; 893250838Sjkim 894272444Sjkim case ACPI_DMAR_TYPE_ROOT_ATS: 895250838Sjkim 896193529Sjkim InfoTable = AcpiDmTableInfoDmar2; 897193529Sjkim ScopeOffset = sizeof (ACPI_DMAR_ATSR); 898193529Sjkim break; 899250838Sjkim 900272444Sjkim case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: 901250838Sjkim 902197104Sjkim InfoTable = AcpiDmTableInfoDmar3; 903197104Sjkim ScopeOffset = sizeof (ACPI_DMAR_RHSA); 904197104Sjkim break; 905250838Sjkim 906272444Sjkim case ACPI_DMAR_TYPE_NAMESPACE: 907272444Sjkim 908272444Sjkim InfoTable = AcpiDmTableInfoDmar4; 909272444Sjkim ScopeOffset = sizeof (ACPI_DMAR_ANDD); 910272444Sjkim break; 911272444Sjkim 912167802Sjkim default: 913250838Sjkim 914272444Sjkim AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type); 915167802Sjkim return; 916167802Sjkim } 917167802Sjkim 918193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 919193529Sjkim SubTable->Length, InfoTable); 920193529Sjkim if (ACPI_FAILURE (Status)) 921193529Sjkim { 922193529Sjkim return; 923193529Sjkim } 924167802Sjkim 925272444Sjkim /* 926272444Sjkim * Dump the optional device scope entries 927272444Sjkim */ 928272444Sjkim if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || 929272444Sjkim (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE)) 930272444Sjkim { 931272444Sjkim /* These types do not support device scopes */ 932193529Sjkim 933272444Sjkim goto NextSubtable; 934272444Sjkim } 935272444Sjkim 936193529Sjkim ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset); 937193529Sjkim while (ScopeOffset < SubTable->Length) 938167802Sjkim { 939193529Sjkim AcpiOsPrintf ("\n"); 940193529Sjkim Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable, 941193529Sjkim ScopeTable->Length, AcpiDmTableInfoDmarScope); 942193529Sjkim if (ACPI_FAILURE (Status)) 943167802Sjkim { 944193529Sjkim return; 945193529Sjkim } 946252279Sjkim AcpiOsPrintf ("\n"); 947167802Sjkim 948193529Sjkim /* Dump the PCI Path entries for this device scope */ 949167802Sjkim 950193529Sjkim PathOffset = sizeof (ACPI_DMAR_DEVICE_SCOPE); /* Path entries start at this offset */ 951167802Sjkim 952193529Sjkim PciPath = ACPI_ADD_PTR (UINT8, ScopeTable, 953193529Sjkim sizeof (ACPI_DMAR_DEVICE_SCOPE)); 954167802Sjkim 955193529Sjkim while (PathOffset < ScopeTable->Length) 956193529Sjkim { 957193529Sjkim AcpiDmLineHeader ((PathOffset + ScopeOffset + Offset), 2, "PCI Path"); 958209746Sjkim AcpiOsPrintf ("%2.2X,%2.2X\n", PciPath[0], PciPath[1]); 959167802Sjkim 960193529Sjkim /* Point to next PCI Path entry */ 961167802Sjkim 962193529Sjkim PathOffset += 2; 963193529Sjkim PciPath += 2; 964252279Sjkim AcpiOsPrintf ("\n"); 965193529Sjkim } 966167802Sjkim 967193529Sjkim /* Point to next device scope entry */ 968167802Sjkim 969193529Sjkim ScopeOffset += ScopeTable->Length; 970193529Sjkim ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, 971193529Sjkim ScopeTable, ScopeTable->Length); 972167802Sjkim } 973167802Sjkim 974272444SjkimNextSubtable: 975272444Sjkim /* Point to next subtable */ 976167802Sjkim 977167802Sjkim Offset += SubTable->Length; 978167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubTable->Length); 979167802Sjkim } 980167802Sjkim} 981167802Sjkim 982167802Sjkim 983167802Sjkim/******************************************************************************* 984167802Sjkim * 985193529Sjkim * FUNCTION: AcpiDmDumpEinj 986193529Sjkim * 987193529Sjkim * PARAMETERS: Table - A EINJ table 988193529Sjkim * 989193529Sjkim * RETURN: None 990193529Sjkim * 991193529Sjkim * DESCRIPTION: Format the contents of a EINJ. This table type consists 992193529Sjkim * of an open-ended number of subtables. 993193529Sjkim * 994193529Sjkim ******************************************************************************/ 995193529Sjkim 996193529Sjkimvoid 997193529SjkimAcpiDmDumpEinj ( 998193529Sjkim ACPI_TABLE_HEADER *Table) 999193529Sjkim{ 1000193529Sjkim ACPI_STATUS Status; 1001193529Sjkim ACPI_WHEA_HEADER *SubTable; 1002193529Sjkim UINT32 Length = Table->Length; 1003193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_EINJ); 1004193529Sjkim 1005193529Sjkim 1006193529Sjkim /* Main table */ 1007193529Sjkim 1008193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj); 1009193529Sjkim if (ACPI_FAILURE (Status)) 1010193529Sjkim { 1011193529Sjkim return; 1012193529Sjkim } 1013193529Sjkim 1014272444Sjkim /* Subtables */ 1015193529Sjkim 1016193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); 1017193529Sjkim while (Offset < Table->Length) 1018193529Sjkim { 1019193529Sjkim AcpiOsPrintf ("\n"); 1020193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1021193529Sjkim sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoEinj0); 1022193529Sjkim if (ACPI_FAILURE (Status)) 1023193529Sjkim { 1024193529Sjkim return; 1025193529Sjkim } 1026193529Sjkim 1027272444Sjkim /* Point to next subtable (each subtable is of fixed length) */ 1028193529Sjkim 1029193529Sjkim Offset += sizeof (ACPI_WHEA_HEADER); 1030193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable, 1031193529Sjkim sizeof (ACPI_WHEA_HEADER)); 1032193529Sjkim } 1033193529Sjkim} 1034193529Sjkim 1035193529Sjkim 1036193529Sjkim/******************************************************************************* 1037193529Sjkim * 1038193529Sjkim * FUNCTION: AcpiDmDumpErst 1039193529Sjkim * 1040193529Sjkim * PARAMETERS: Table - A ERST table 1041193529Sjkim * 1042193529Sjkim * RETURN: None 1043193529Sjkim * 1044193529Sjkim * DESCRIPTION: Format the contents of a ERST. This table type consists 1045193529Sjkim * of an open-ended number of subtables. 1046193529Sjkim * 1047193529Sjkim ******************************************************************************/ 1048193529Sjkim 1049193529Sjkimvoid 1050193529SjkimAcpiDmDumpErst ( 1051193529Sjkim ACPI_TABLE_HEADER *Table) 1052193529Sjkim{ 1053193529Sjkim ACPI_STATUS Status; 1054193529Sjkim ACPI_WHEA_HEADER *SubTable; 1055193529Sjkim UINT32 Length = Table->Length; 1056193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_ERST); 1057193529Sjkim 1058193529Sjkim 1059193529Sjkim /* Main table */ 1060193529Sjkim 1061193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst); 1062193529Sjkim if (ACPI_FAILURE (Status)) 1063193529Sjkim { 1064193529Sjkim return; 1065193529Sjkim } 1066193529Sjkim 1067272444Sjkim /* Subtables */ 1068193529Sjkim 1069193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); 1070193529Sjkim while (Offset < Table->Length) 1071193529Sjkim { 1072193529Sjkim AcpiOsPrintf ("\n"); 1073193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1074209746Sjkim sizeof (ACPI_WHEA_HEADER), AcpiDmTableInfoErst0); 1075193529Sjkim if (ACPI_FAILURE (Status)) 1076193529Sjkim { 1077193529Sjkim return; 1078193529Sjkim } 1079193529Sjkim 1080272444Sjkim /* Point to next subtable (each subtable is of fixed length) */ 1081193529Sjkim 1082193529Sjkim Offset += sizeof (ACPI_WHEA_HEADER); 1083193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, SubTable, 1084193529Sjkim sizeof (ACPI_WHEA_HEADER)); 1085193529Sjkim } 1086193529Sjkim} 1087193529Sjkim 1088193529Sjkim 1089193529Sjkim/******************************************************************************* 1090193529Sjkim * 1091228110Sjkim * FUNCTION: AcpiDmDumpFpdt 1092228110Sjkim * 1093228110Sjkim * PARAMETERS: Table - A FPDT table 1094228110Sjkim * 1095228110Sjkim * RETURN: None 1096228110Sjkim * 1097228110Sjkim * DESCRIPTION: Format the contents of a FPDT. This table type consists 1098228110Sjkim * of an open-ended number of subtables. 1099228110Sjkim * 1100228110Sjkim ******************************************************************************/ 1101228110Sjkim 1102228110Sjkimvoid 1103228110SjkimAcpiDmDumpFpdt ( 1104228110Sjkim ACPI_TABLE_HEADER *Table) 1105228110Sjkim{ 1106228110Sjkim ACPI_STATUS Status; 1107228110Sjkim ACPI_FPDT_HEADER *SubTable; 1108228110Sjkim UINT32 Length = Table->Length; 1109228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_FPDT); 1110228110Sjkim ACPI_DMTABLE_INFO *InfoTable; 1111228110Sjkim 1112228110Sjkim 1113228110Sjkim /* There is no main table (other than the standard ACPI header) */ 1114228110Sjkim 1115272444Sjkim /* Subtables */ 1116228110Sjkim 1117228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset); 1118228110Sjkim while (Offset < Table->Length) 1119228110Sjkim { 1120272444Sjkim /* Common subtable header */ 1121228110Sjkim 1122228110Sjkim AcpiOsPrintf ("\n"); 1123228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1124228110Sjkim SubTable->Length, AcpiDmTableInfoFpdtHdr); 1125228110Sjkim if (ACPI_FAILURE (Status)) 1126228110Sjkim { 1127228110Sjkim return; 1128228110Sjkim } 1129228110Sjkim 1130228110Sjkim switch (SubTable->Type) 1131228110Sjkim { 1132228110Sjkim case ACPI_FPDT_TYPE_BOOT: 1133250838Sjkim 1134228110Sjkim InfoTable = AcpiDmTableInfoFpdt0; 1135228110Sjkim break; 1136250838Sjkim 1137228110Sjkim case ACPI_FPDT_TYPE_S3PERF: 1138250838Sjkim 1139228110Sjkim InfoTable = AcpiDmTableInfoFpdt1; 1140228110Sjkim break; 1141250838Sjkim 1142228110Sjkim default: 1143250838Sjkim 1144272444Sjkim AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", SubTable->Type); 1145228110Sjkim 1146228110Sjkim /* Attempt to continue */ 1147228110Sjkim 1148228110Sjkim if (!SubTable->Length) 1149228110Sjkim { 1150228110Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1151228110Sjkim return; 1152228110Sjkim } 1153228110Sjkim goto NextSubTable; 1154228110Sjkim } 1155228110Sjkim 1156228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1157228110Sjkim SubTable->Length, InfoTable); 1158228110Sjkim if (ACPI_FAILURE (Status)) 1159228110Sjkim { 1160228110Sjkim return; 1161228110Sjkim } 1162228110Sjkim 1163228110SjkimNextSubTable: 1164272444Sjkim /* Point to next subtable */ 1165228110Sjkim 1166228110Sjkim Offset += SubTable->Length; 1167228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, SubTable, SubTable->Length); 1168228110Sjkim } 1169228110Sjkim} 1170228110Sjkim 1171228110Sjkim 1172228110Sjkim/******************************************************************************* 1173228110Sjkim * 1174272444Sjkim * FUNCTION: AcpiDmDumpGtdt 1175272444Sjkim * 1176272444Sjkim * PARAMETERS: Table - A GTDT table 1177272444Sjkim * 1178272444Sjkim * RETURN: None 1179272444Sjkim * 1180272444Sjkim * DESCRIPTION: Format the contents of a GTDT. This table type consists 1181272444Sjkim * of an open-ended number of subtables. 1182272444Sjkim * 1183272444Sjkim ******************************************************************************/ 1184272444Sjkim 1185272444Sjkimvoid 1186272444SjkimAcpiDmDumpGtdt ( 1187272444Sjkim ACPI_TABLE_HEADER *Table) 1188272444Sjkim{ 1189272444Sjkim ACPI_STATUS Status; 1190272444Sjkim ACPI_GTDT_HEADER *SubTable; 1191272444Sjkim UINT32 Length = Table->Length; 1192272444Sjkim UINT32 Offset = sizeof (ACPI_TABLE_GTDT); 1193272444Sjkim ACPI_DMTABLE_INFO *InfoTable; 1194272444Sjkim UINT32 SubTableLength; 1195272444Sjkim UINT32 GtCount; 1196272444Sjkim ACPI_GTDT_TIMER_ENTRY *GtxTable; 1197272444Sjkim 1198272444Sjkim 1199272444Sjkim /* Main table */ 1200272444Sjkim 1201272444Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); 1202272444Sjkim if (ACPI_FAILURE (Status)) 1203272444Sjkim { 1204272444Sjkim return; 1205272444Sjkim } 1206272444Sjkim 1207272444Sjkim /* Subtables */ 1208272444Sjkim 1209272444Sjkim SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); 1210272444Sjkim while (Offset < Table->Length) 1211272444Sjkim { 1212272444Sjkim /* Common subtable header */ 1213272444Sjkim 1214272444Sjkim AcpiOsPrintf ("\n"); 1215272444Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1216272444Sjkim SubTable->Length, AcpiDmTableInfoGtdtHdr); 1217272444Sjkim if (ACPI_FAILURE (Status)) 1218272444Sjkim { 1219272444Sjkim return; 1220272444Sjkim } 1221272444Sjkim 1222272444Sjkim GtCount = 0; 1223272444Sjkim switch (SubTable->Type) 1224272444Sjkim { 1225272444Sjkim case ACPI_GTDT_TYPE_TIMER_BLOCK: 1226272444Sjkim 1227272444Sjkim SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); 1228272444Sjkim GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, 1229272444Sjkim SubTable))->TimerCount; 1230272444Sjkim 1231272444Sjkim InfoTable = AcpiDmTableInfoGtdt0; 1232272444Sjkim break; 1233272444Sjkim 1234272444Sjkim case ACPI_GTDT_TYPE_WATCHDOG: 1235272444Sjkim 1236272444Sjkim SubTableLength = sizeof (ACPI_GTDT_WATCHDOG); 1237272444Sjkim 1238272444Sjkim InfoTable = AcpiDmTableInfoGtdt1; 1239272444Sjkim break; 1240272444Sjkim 1241272444Sjkim default: 1242272444Sjkim 1243272444Sjkim /* Cannot continue on unknown type - no length */ 1244272444Sjkim 1245272444Sjkim AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type); 1246272444Sjkim return; 1247272444Sjkim } 1248272444Sjkim 1249272444Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1250272444Sjkim SubTable->Length, InfoTable); 1251272444Sjkim if (ACPI_FAILURE (Status)) 1252272444Sjkim { 1253272444Sjkim return; 1254272444Sjkim } 1255272444Sjkim 1256272444Sjkim /* Point to end of current subtable (each subtable above is of fixed length) */ 1257272444Sjkim 1258272444Sjkim Offset += SubTableLength; 1259272444Sjkim 1260272444Sjkim /* If there are any Gt Timer Blocks from above, dump them now */ 1261272444Sjkim 1262272444Sjkim if (GtCount) 1263272444Sjkim { 1264272444Sjkim GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength); 1265272444Sjkim SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); 1266272444Sjkim 1267272444Sjkim while (GtCount) 1268272444Sjkim { 1269272444Sjkim AcpiOsPrintf ("\n"); 1270272444Sjkim Status = AcpiDmDumpTable (Length, Offset, GtxTable, 1271272444Sjkim sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); 1272272444Sjkim if (ACPI_FAILURE (Status)) 1273272444Sjkim { 1274272444Sjkim return; 1275272444Sjkim } 1276272444Sjkim Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); 1277272444Sjkim GtxTable++; 1278272444Sjkim GtCount--; 1279272444Sjkim } 1280272444Sjkim } 1281272444Sjkim 1282272444Sjkim /* Point to next subtable */ 1283272444Sjkim 1284272444Sjkim SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength); 1285272444Sjkim } 1286272444Sjkim} 1287272444Sjkim 1288272444Sjkim 1289272444Sjkim/******************************************************************************* 1290272444Sjkim * 1291193529Sjkim * FUNCTION: AcpiDmDumpHest 1292193529Sjkim * 1293193529Sjkim * PARAMETERS: Table - A HEST table 1294193529Sjkim * 1295193529Sjkim * RETURN: None 1296193529Sjkim * 1297193529Sjkim * DESCRIPTION: Format the contents of a HEST. This table type consists 1298193529Sjkim * of an open-ended number of subtables. 1299193529Sjkim * 1300193529Sjkim ******************************************************************************/ 1301193529Sjkim 1302193529Sjkimvoid 1303193529SjkimAcpiDmDumpHest ( 1304193529Sjkim ACPI_TABLE_HEADER *Table) 1305193529Sjkim{ 1306193529Sjkim ACPI_STATUS Status; 1307193529Sjkim ACPI_HEST_HEADER *SubTable; 1308193529Sjkim UINT32 Length = Table->Length; 1309193529Sjkim UINT32 Offset = sizeof (ACPI_TABLE_HEST); 1310193529Sjkim ACPI_DMTABLE_INFO *InfoTable; 1311193529Sjkim UINT32 SubTableLength; 1312197104Sjkim UINT32 BankCount; 1313197104Sjkim ACPI_HEST_IA_ERROR_BANK *BankTable; 1314193529Sjkim 1315193529Sjkim 1316193529Sjkim /* Main table */ 1317193529Sjkim 1318193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest); 1319193529Sjkim if (ACPI_FAILURE (Status)) 1320193529Sjkim { 1321193529Sjkim return; 1322193529Sjkim } 1323193529Sjkim 1324272444Sjkim /* Subtables */ 1325193529Sjkim 1326193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset); 1327193529Sjkim while (Offset < Table->Length) 1328193529Sjkim { 1329197104Sjkim BankCount = 0; 1330193529Sjkim switch (SubTable->Type) 1331193529Sjkim { 1332197104Sjkim case ACPI_HEST_TYPE_IA32_CHECK: 1333250838Sjkim 1334193529Sjkim InfoTable = AcpiDmTableInfoHest0; 1335197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_MACHINE_CHECK); 1336197104Sjkim BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_MACHINE_CHECK, 1337197104Sjkim SubTable))->NumHardwareBanks; 1338193529Sjkim break; 1339193529Sjkim 1340197104Sjkim case ACPI_HEST_TYPE_IA32_CORRECTED_CHECK: 1341250838Sjkim 1342193529Sjkim InfoTable = AcpiDmTableInfoHest1; 1343197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_CORRECTED); 1344197104Sjkim BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_CORRECTED, 1345197104Sjkim SubTable))->NumHardwareBanks; 1346193529Sjkim break; 1347193529Sjkim 1348197104Sjkim case ACPI_HEST_TYPE_IA32_NMI: 1349250838Sjkim 1350197104Sjkim InfoTable = AcpiDmTableInfoHest2; 1351197104Sjkim SubTableLength = sizeof (ACPI_HEST_IA_NMI); 1352193529Sjkim break; 1353193529Sjkim 1354193529Sjkim case ACPI_HEST_TYPE_AER_ROOT_PORT: 1355250838Sjkim 1356193529Sjkim InfoTable = AcpiDmTableInfoHest6; 1357193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER_ROOT); 1358193529Sjkim break; 1359193529Sjkim 1360193529Sjkim case ACPI_HEST_TYPE_AER_ENDPOINT: 1361250838Sjkim 1362193529Sjkim InfoTable = AcpiDmTableInfoHest7; 1363193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER); 1364193529Sjkim break; 1365193529Sjkim 1366193529Sjkim case ACPI_HEST_TYPE_AER_BRIDGE: 1367250838Sjkim 1368193529Sjkim InfoTable = AcpiDmTableInfoHest8; 1369193529Sjkim SubTableLength = sizeof (ACPI_HEST_AER_BRIDGE); 1370193529Sjkim break; 1371193529Sjkim 1372197104Sjkim case ACPI_HEST_TYPE_GENERIC_ERROR: 1373250838Sjkim 1374193529Sjkim InfoTable = AcpiDmTableInfoHest9; 1375193529Sjkim SubTableLength = sizeof (ACPI_HEST_GENERIC); 1376193529Sjkim break; 1377193529Sjkim 1378193529Sjkim default: 1379250838Sjkim 1380193529Sjkim /* Cannot continue on unknown type - no length */ 1381193529Sjkim 1382272444Sjkim AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n", SubTable->Type); 1383193529Sjkim return; 1384193529Sjkim } 1385193529Sjkim 1386193529Sjkim AcpiOsPrintf ("\n"); 1387193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1388193529Sjkim SubTableLength, InfoTable); 1389193529Sjkim if (ACPI_FAILURE (Status)) 1390193529Sjkim { 1391193529Sjkim return; 1392193529Sjkim } 1393193529Sjkim 1394197104Sjkim /* Point to end of current subtable (each subtable above is of fixed length) */ 1395193529Sjkim 1396193529Sjkim Offset += SubTableLength; 1397197104Sjkim 1398197104Sjkim /* If there are any (fixed-length) Error Banks from above, dump them now */ 1399197104Sjkim 1400197104Sjkim if (BankCount) 1401197104Sjkim { 1402197104Sjkim BankTable = ACPI_ADD_PTR (ACPI_HEST_IA_ERROR_BANK, SubTable, SubTableLength); 1403197104Sjkim SubTableLength += BankCount * sizeof (ACPI_HEST_IA_ERROR_BANK); 1404197104Sjkim 1405197104Sjkim while (BankCount) 1406197104Sjkim { 1407197104Sjkim AcpiOsPrintf ("\n"); 1408197104Sjkim Status = AcpiDmDumpTable (Length, Offset, BankTable, 1409197104Sjkim sizeof (ACPI_HEST_IA_ERROR_BANK), AcpiDmTableInfoHestBank); 1410197104Sjkim if (ACPI_FAILURE (Status)) 1411197104Sjkim { 1412197104Sjkim return; 1413197104Sjkim } 1414197104Sjkim Offset += sizeof (ACPI_HEST_IA_ERROR_BANK); 1415197104Sjkim BankTable++; 1416197104Sjkim BankCount--; 1417197104Sjkim } 1418197104Sjkim } 1419197104Sjkim 1420272444Sjkim /* Point to next subtable */ 1421197104Sjkim 1422193529Sjkim SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, SubTable, SubTableLength); 1423193529Sjkim } 1424193529Sjkim} 1425193529Sjkim 1426193529Sjkim 1427193529Sjkim/******************************************************************************* 1428193529Sjkim * 1429197104Sjkim * FUNCTION: AcpiDmDumpIvrs 1430197104Sjkim * 1431197104Sjkim * PARAMETERS: Table - A IVRS table 1432197104Sjkim * 1433197104Sjkim * RETURN: None 1434197104Sjkim * 1435197104Sjkim * DESCRIPTION: Format the contents of a IVRS 1436197104Sjkim * 1437197104Sjkim ******************************************************************************/ 1438197104Sjkim 1439197104Sjkimstatic UINT8 EntrySizes[] = {4,8,16,32}; 1440197104Sjkim 1441197104Sjkimvoid 1442197104SjkimAcpiDmDumpIvrs ( 1443197104Sjkim ACPI_TABLE_HEADER *Table) 1444197104Sjkim{ 1445197104Sjkim ACPI_STATUS Status; 1446197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_IVRS); 1447197104Sjkim UINT32 EntryOffset; 1448197104Sjkim UINT32 EntryLength; 1449197104Sjkim UINT32 EntryType; 1450197104Sjkim ACPI_IVRS_DE_HEADER *DeviceEntry; 1451197104Sjkim ACPI_IVRS_HEADER *SubTable; 1452197104Sjkim ACPI_DMTABLE_INFO *InfoTable; 1453197104Sjkim 1454197104Sjkim 1455197104Sjkim /* Main table */ 1456197104Sjkim 1457197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); 1458197104Sjkim if (ACPI_FAILURE (Status)) 1459197104Sjkim { 1460197104Sjkim return; 1461197104Sjkim } 1462197104Sjkim 1463272444Sjkim /* Subtables */ 1464197104Sjkim 1465197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); 1466197104Sjkim while (Offset < Table->Length) 1467197104Sjkim { 1468272444Sjkim /* Common subtable header */ 1469197104Sjkim 1470197104Sjkim AcpiOsPrintf ("\n"); 1471197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1472197104Sjkim SubTable->Length, AcpiDmTableInfoIvrsHdr); 1473197104Sjkim if (ACPI_FAILURE (Status)) 1474197104Sjkim { 1475197104Sjkim return; 1476197104Sjkim } 1477197104Sjkim 1478197104Sjkim switch (SubTable->Type) 1479197104Sjkim { 1480197104Sjkim case ACPI_IVRS_TYPE_HARDWARE: 1481250838Sjkim 1482197104Sjkim InfoTable = AcpiDmTableInfoIvrs0; 1483197104Sjkim break; 1484250838Sjkim 1485197104Sjkim case ACPI_IVRS_TYPE_MEMORY1: 1486197104Sjkim case ACPI_IVRS_TYPE_MEMORY2: 1487197104Sjkim case ACPI_IVRS_TYPE_MEMORY3: 1488250838Sjkim 1489197104Sjkim InfoTable = AcpiDmTableInfoIvrs1; 1490197104Sjkim break; 1491250838Sjkim 1492197104Sjkim default: 1493250838Sjkim 1494272444Sjkim AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n", 1495197104Sjkim SubTable->Type); 1496197104Sjkim 1497197104Sjkim /* Attempt to continue */ 1498197104Sjkim 1499197104Sjkim if (!SubTable->Length) 1500197104Sjkim { 1501197104Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1502197104Sjkim return; 1503197104Sjkim } 1504197104Sjkim goto NextSubTable; 1505197104Sjkim } 1506197104Sjkim 1507197104Sjkim /* Dump the subtable */ 1508197104Sjkim 1509197104Sjkim AcpiOsPrintf ("\n"); 1510197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1511197104Sjkim SubTable->Length, InfoTable); 1512197104Sjkim if (ACPI_FAILURE (Status)) 1513197104Sjkim { 1514197104Sjkim return; 1515197104Sjkim } 1516197104Sjkim 1517197104Sjkim /* The hardware subtable can contain multiple device entries */ 1518197104Sjkim 1519197104Sjkim if (SubTable->Type == ACPI_IVRS_TYPE_HARDWARE) 1520197104Sjkim { 1521197104Sjkim EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); 1522197104Sjkim DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable, 1523197104Sjkim sizeof (ACPI_IVRS_HARDWARE)); 1524197104Sjkim 1525197104Sjkim while (EntryOffset < (Offset + SubTable->Length)) 1526197104Sjkim { 1527197104Sjkim AcpiOsPrintf ("\n"); 1528197104Sjkim /* 1529197104Sjkim * Upper 2 bits of Type encode the length of the device entry 1530197104Sjkim * 1531197104Sjkim * 00 = 4 byte 1532197104Sjkim * 01 = 8 byte 1533197104Sjkim * 10 = 16 byte - currently no entries defined 1534197104Sjkim * 11 = 32 byte - currently no entries defined 1535197104Sjkim */ 1536197104Sjkim EntryType = DeviceEntry->Type; 1537197104Sjkim EntryLength = EntrySizes [EntryType >> 6]; 1538197104Sjkim 1539197104Sjkim switch (EntryType) 1540197104Sjkim { 1541197104Sjkim /* 4-byte device entries */ 1542197104Sjkim 1543197104Sjkim case ACPI_IVRS_TYPE_PAD4: 1544197104Sjkim case ACPI_IVRS_TYPE_ALL: 1545197104Sjkim case ACPI_IVRS_TYPE_SELECT: 1546197104Sjkim case ACPI_IVRS_TYPE_START: 1547197104Sjkim case ACPI_IVRS_TYPE_END: 1548197104Sjkim 1549197104Sjkim InfoTable = AcpiDmTableInfoIvrs4; 1550197104Sjkim break; 1551197104Sjkim 1552197104Sjkim /* 8-byte entries, type A */ 1553197104Sjkim 1554197104Sjkim case ACPI_IVRS_TYPE_ALIAS_SELECT: 1555197104Sjkim case ACPI_IVRS_TYPE_ALIAS_START: 1556197104Sjkim 1557197104Sjkim InfoTable = AcpiDmTableInfoIvrs8a; 1558197104Sjkim break; 1559197104Sjkim 1560197104Sjkim /* 8-byte entries, type B */ 1561197104Sjkim 1562197104Sjkim case ACPI_IVRS_TYPE_PAD8: 1563197104Sjkim case ACPI_IVRS_TYPE_EXT_SELECT: 1564197104Sjkim case ACPI_IVRS_TYPE_EXT_START: 1565197104Sjkim 1566197104Sjkim InfoTable = AcpiDmTableInfoIvrs8b; 1567197104Sjkim break; 1568197104Sjkim 1569197104Sjkim /* 8-byte entries, type C */ 1570197104Sjkim 1571197104Sjkim case ACPI_IVRS_TYPE_SPECIAL: 1572197104Sjkim 1573197104Sjkim InfoTable = AcpiDmTableInfoIvrs8c; 1574197104Sjkim break; 1575197104Sjkim 1576197104Sjkim default: 1577197104Sjkim InfoTable = AcpiDmTableInfoIvrs4; 1578197104Sjkim AcpiOsPrintf ( 1579197104Sjkim "\n**** Unknown IVRS device entry type/length: " 1580204773Sjkim "0x%.2X/0x%X at offset 0x%.4X: (header below)\n", 1581197104Sjkim EntryType, EntryLength, EntryOffset); 1582197104Sjkim break; 1583197104Sjkim } 1584197104Sjkim 1585197104Sjkim /* Dump the Device Entry */ 1586197104Sjkim 1587197104Sjkim Status = AcpiDmDumpTable (Table->Length, EntryOffset, 1588197104Sjkim DeviceEntry, EntryLength, InfoTable); 1589197104Sjkim 1590197104Sjkim EntryOffset += EntryLength; 1591197104Sjkim DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry, 1592197104Sjkim EntryLength); 1593197104Sjkim } 1594197104Sjkim } 1595197104Sjkim 1596197104SjkimNextSubTable: 1597272444Sjkim /* Point to next subtable */ 1598197104Sjkim 1599197104Sjkim Offset += SubTable->Length; 1600197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length); 1601197104Sjkim } 1602197104Sjkim} 1603197104Sjkim 1604197104Sjkim 1605197104Sjkim/******************************************************************************* 1606197104Sjkim * 1607272444Sjkim * FUNCTION: AcpiDmDumpLpit 1608272444Sjkim * 1609272444Sjkim * PARAMETERS: Table - A LPIT table 1610272444Sjkim * 1611272444Sjkim * RETURN: None 1612272444Sjkim * 1613272444Sjkim * DESCRIPTION: Format the contents of a LPIT. This table type consists 1614272444Sjkim * of an open-ended number of subtables. Note: There are no 1615272444Sjkim * entries in the main table. An LPIT consists of the table 1616272444Sjkim * header and then subtables only. 1617272444Sjkim * 1618272444Sjkim ******************************************************************************/ 1619272444Sjkim 1620272444Sjkimvoid 1621272444SjkimAcpiDmDumpLpit ( 1622272444Sjkim ACPI_TABLE_HEADER *Table) 1623272444Sjkim{ 1624272444Sjkim ACPI_STATUS Status; 1625272444Sjkim ACPI_LPIT_HEADER *SubTable; 1626272444Sjkim UINT32 Length = Table->Length; 1627272444Sjkim UINT32 Offset = sizeof (ACPI_TABLE_LPIT); 1628272444Sjkim ACPI_DMTABLE_INFO *InfoTable; 1629272444Sjkim UINT32 SubTableLength; 1630272444Sjkim 1631272444Sjkim 1632272444Sjkim /* Subtables */ 1633272444Sjkim 1634272444Sjkim SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset); 1635272444Sjkim while (Offset < Table->Length) 1636272444Sjkim { 1637272444Sjkim /* Common subtable header */ 1638272444Sjkim 1639272444Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1640272444Sjkim sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr); 1641272444Sjkim if (ACPI_FAILURE (Status)) 1642272444Sjkim { 1643272444Sjkim return; 1644272444Sjkim } 1645272444Sjkim 1646272444Sjkim switch (SubTable->Type) 1647272444Sjkim { 1648272444Sjkim case ACPI_LPIT_TYPE_NATIVE_CSTATE: 1649272444Sjkim 1650272444Sjkim InfoTable = AcpiDmTableInfoLpit0; 1651272444Sjkim SubTableLength = sizeof (ACPI_LPIT_NATIVE); 1652272444Sjkim break; 1653272444Sjkim 1654272444Sjkim case ACPI_LPIT_TYPE_SIMPLE_IO: 1655272444Sjkim 1656272444Sjkim InfoTable = AcpiDmTableInfoLpit1; 1657272444Sjkim SubTableLength = sizeof (ACPI_LPIT_IO); 1658272444Sjkim break; 1659272444Sjkim 1660272444Sjkim default: 1661272444Sjkim 1662272444Sjkim /* Cannot continue on unknown type - no length */ 1663272444Sjkim 1664272444Sjkim AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n", SubTable->Type); 1665272444Sjkim return; 1666272444Sjkim } 1667272444Sjkim 1668272444Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1669272444Sjkim SubTableLength, InfoTable); 1670272444Sjkim if (ACPI_FAILURE (Status)) 1671272444Sjkim { 1672272444Sjkim return; 1673272444Sjkim } 1674272444Sjkim AcpiOsPrintf ("\n"); 1675272444Sjkim 1676272444Sjkim /* Point to next subtable */ 1677272444Sjkim 1678272444Sjkim Offset += SubTableLength; 1679272444Sjkim SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, SubTable, SubTableLength); 1680272444Sjkim } 1681272444Sjkim} 1682272444Sjkim 1683272444Sjkim 1684272444Sjkim/******************************************************************************* 1685272444Sjkim * 1686167802Sjkim * FUNCTION: AcpiDmDumpMadt 1687167802Sjkim * 1688167802Sjkim * PARAMETERS: Table - A MADT table 1689167802Sjkim * 1690167802Sjkim * RETURN: None 1691167802Sjkim * 1692167802Sjkim * DESCRIPTION: Format the contents of a MADT. This table type consists 1693167802Sjkim * of an open-ended number of subtables. 1694167802Sjkim * 1695167802Sjkim ******************************************************************************/ 1696167802Sjkim 1697167802Sjkimvoid 1698167802SjkimAcpiDmDumpMadt ( 1699167802Sjkim ACPI_TABLE_HEADER *Table) 1700167802Sjkim{ 1701193529Sjkim ACPI_STATUS Status; 1702167802Sjkim ACPI_SUBTABLE_HEADER *SubTable; 1703167802Sjkim UINT32 Length = Table->Length; 1704167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MADT); 1705167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 1706167802Sjkim 1707167802Sjkim 1708167802Sjkim /* Main table */ 1709167802Sjkim 1710193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt); 1711193529Sjkim if (ACPI_FAILURE (Status)) 1712193529Sjkim { 1713193529Sjkim return; 1714193529Sjkim } 1715167802Sjkim 1716272444Sjkim /* Subtables */ 1717167802Sjkim 1718167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); 1719167802Sjkim while (Offset < Table->Length) 1720167802Sjkim { 1721272444Sjkim /* Common subtable header */ 1722167802Sjkim 1723167802Sjkim AcpiOsPrintf ("\n"); 1724193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1725193529Sjkim SubTable->Length, AcpiDmTableInfoMadtHdr); 1726193529Sjkim if (ACPI_FAILURE (Status)) 1727193529Sjkim { 1728193529Sjkim return; 1729193529Sjkim } 1730167802Sjkim 1731167802Sjkim switch (SubTable->Type) 1732167802Sjkim { 1733167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC: 1734250838Sjkim 1735167802Sjkim InfoTable = AcpiDmTableInfoMadt0; 1736167802Sjkim break; 1737250838Sjkim 1738167802Sjkim case ACPI_MADT_TYPE_IO_APIC: 1739250838Sjkim 1740167802Sjkim InfoTable = AcpiDmTableInfoMadt1; 1741167802Sjkim break; 1742250838Sjkim 1743167802Sjkim case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: 1744250838Sjkim 1745167802Sjkim InfoTable = AcpiDmTableInfoMadt2; 1746167802Sjkim break; 1747250838Sjkim 1748167802Sjkim case ACPI_MADT_TYPE_NMI_SOURCE: 1749250838Sjkim 1750167802Sjkim InfoTable = AcpiDmTableInfoMadt3; 1751167802Sjkim break; 1752250838Sjkim 1753167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC_NMI: 1754250838Sjkim 1755167802Sjkim InfoTable = AcpiDmTableInfoMadt4; 1756167802Sjkim break; 1757250838Sjkim 1758167802Sjkim case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: 1759250838Sjkim 1760167802Sjkim InfoTable = AcpiDmTableInfoMadt5; 1761167802Sjkim break; 1762250838Sjkim 1763167802Sjkim case ACPI_MADT_TYPE_IO_SAPIC: 1764250838Sjkim 1765167802Sjkim InfoTable = AcpiDmTableInfoMadt6; 1766167802Sjkim break; 1767250838Sjkim 1768167802Sjkim case ACPI_MADT_TYPE_LOCAL_SAPIC: 1769250838Sjkim 1770167802Sjkim InfoTable = AcpiDmTableInfoMadt7; 1771167802Sjkim break; 1772250838Sjkim 1773167802Sjkim case ACPI_MADT_TYPE_INTERRUPT_SOURCE: 1774250838Sjkim 1775167802Sjkim InfoTable = AcpiDmTableInfoMadt8; 1776167802Sjkim break; 1777250838Sjkim 1778193529Sjkim case ACPI_MADT_TYPE_LOCAL_X2APIC: 1779250838Sjkim 1780193529Sjkim InfoTable = AcpiDmTableInfoMadt9; 1781193529Sjkim break; 1782250838Sjkim 1783193529Sjkim case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: 1784250838Sjkim 1785193529Sjkim InfoTable = AcpiDmTableInfoMadt10; 1786193529Sjkim break; 1787250838Sjkim 1788228110Sjkim case ACPI_MADT_TYPE_GENERIC_INTERRUPT: 1789250838Sjkim 1790228110Sjkim InfoTable = AcpiDmTableInfoMadt11; 1791228110Sjkim break; 1792250838Sjkim 1793228110Sjkim case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR: 1794250838Sjkim 1795228110Sjkim InfoTable = AcpiDmTableInfoMadt12; 1796228110Sjkim break; 1797250838Sjkim 1798272444Sjkim case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: 1799272444Sjkim 1800272444Sjkim InfoTable = AcpiDmTableInfoMadt13; 1801272444Sjkim break; 1802272444Sjkim 1803272444Sjkim case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: 1804272444Sjkim 1805272444Sjkim InfoTable = AcpiDmTableInfoMadt14; 1806272444Sjkim break; 1807272444Sjkim 1808167802Sjkim default: 1809250838Sjkim 1810272444Sjkim AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type); 1811193529Sjkim 1812193529Sjkim /* Attempt to continue */ 1813193529Sjkim 1814193529Sjkim if (!SubTable->Length) 1815193529Sjkim { 1816193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1817193529Sjkim return; 1818193529Sjkim } 1819193529Sjkim goto NextSubTable; 1820193529Sjkim } 1821193529Sjkim 1822193529Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 1823193529Sjkim SubTable->Length, InfoTable); 1824193529Sjkim if (ACPI_FAILURE (Status)) 1825193529Sjkim { 1826167802Sjkim return; 1827167802Sjkim } 1828167802Sjkim 1829193529SjkimNextSubTable: 1830272444Sjkim /* Point to next subtable */ 1831167802Sjkim 1832167802Sjkim Offset += SubTable->Length; 1833167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length); 1834167802Sjkim } 1835167802Sjkim} 1836167802Sjkim 1837167802Sjkim 1838167802Sjkim/******************************************************************************* 1839167802Sjkim * 1840167802Sjkim * FUNCTION: AcpiDmDumpMcfg 1841167802Sjkim * 1842167802Sjkim * PARAMETERS: Table - A MCFG Table 1843167802Sjkim * 1844167802Sjkim * RETURN: None 1845167802Sjkim * 1846167802Sjkim * DESCRIPTION: Format the contents of a MCFG table 1847167802Sjkim * 1848167802Sjkim ******************************************************************************/ 1849167802Sjkim 1850167802Sjkimvoid 1851167802SjkimAcpiDmDumpMcfg ( 1852167802Sjkim ACPI_TABLE_HEADER *Table) 1853167802Sjkim{ 1854193529Sjkim ACPI_STATUS Status; 1855167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MCFG); 1856167802Sjkim ACPI_MCFG_ALLOCATION *SubTable; 1857167802Sjkim 1858167802Sjkim 1859167802Sjkim /* Main table */ 1860167802Sjkim 1861193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg); 1862193529Sjkim if (ACPI_FAILURE (Status)) 1863193529Sjkim { 1864193529Sjkim return; 1865193529Sjkim } 1866167802Sjkim 1867272444Sjkim /* Subtables */ 1868167802Sjkim 1869167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); 1870167802Sjkim while (Offset < Table->Length) 1871167802Sjkim { 1872167802Sjkim if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) 1873167802Sjkim { 1874209746Sjkim AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", 1875167802Sjkim sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); 1876167802Sjkim return; 1877167802Sjkim } 1878167802Sjkim 1879167802Sjkim AcpiOsPrintf ("\n"); 1880193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 1881193529Sjkim sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); 1882193529Sjkim if (ACPI_FAILURE (Status)) 1883193529Sjkim { 1884193529Sjkim return; 1885193529Sjkim } 1886167802Sjkim 1887272444Sjkim /* Point to next subtable (each subtable is of fixed length) */ 1888167802Sjkim 1889167802Sjkim Offset += sizeof (ACPI_MCFG_ALLOCATION); 1890167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, SubTable, 1891167802Sjkim sizeof (ACPI_MCFG_ALLOCATION)); 1892167802Sjkim } 1893167802Sjkim} 1894167802Sjkim 1895167802Sjkim 1896167802Sjkim/******************************************************************************* 1897167802Sjkim * 1898228110Sjkim * FUNCTION: AcpiDmDumpMpst 1899228110Sjkim * 1900228110Sjkim * PARAMETERS: Table - A MPST Table 1901228110Sjkim * 1902228110Sjkim * RETURN: None 1903228110Sjkim * 1904228110Sjkim * DESCRIPTION: Format the contents of a MPST table 1905228110Sjkim * 1906228110Sjkim ******************************************************************************/ 1907228110Sjkim 1908228110Sjkimvoid 1909228110SjkimAcpiDmDumpMpst ( 1910228110Sjkim ACPI_TABLE_HEADER *Table) 1911228110Sjkim{ 1912228110Sjkim ACPI_STATUS Status; 1913228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MPST); 1914228110Sjkim ACPI_MPST_POWER_NODE *SubTable0; 1915228110Sjkim ACPI_MPST_POWER_STATE *SubTable0A; 1916228110Sjkim ACPI_MPST_COMPONENT *SubTable0B; 1917228110Sjkim ACPI_MPST_DATA_HDR *SubTable1; 1918228110Sjkim ACPI_MPST_POWER_DATA *SubTable2; 1919228110Sjkim UINT16 SubtableCount; 1920241973Sjkim UINT32 PowerStateCount; 1921241973Sjkim UINT32 ComponentCount; 1922228110Sjkim 1923228110Sjkim 1924228110Sjkim /* Main table */ 1925228110Sjkim 1926228110Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst); 1927228110Sjkim if (ACPI_FAILURE (Status)) 1928228110Sjkim { 1929228110Sjkim return; 1930228110Sjkim } 1931228110Sjkim 1932228110Sjkim /* Subtable: Memory Power Node(s) */ 1933228110Sjkim 1934228110Sjkim SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount; 1935228110Sjkim SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset); 1936228110Sjkim 1937228110Sjkim while ((Offset < Table->Length) && SubtableCount) 1938228110Sjkim { 1939228110Sjkim AcpiOsPrintf ("\n"); 1940228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0, 1941228110Sjkim sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0); 1942228110Sjkim if (ACPI_FAILURE (Status)) 1943228110Sjkim { 1944228110Sjkim return; 1945228110Sjkim } 1946228110Sjkim 1947228110Sjkim /* Extract the sub-subtable counts */ 1948228110Sjkim 1949228110Sjkim PowerStateCount = SubTable0->NumPowerStates; 1950228110Sjkim ComponentCount = SubTable0->NumPhysicalComponents; 1951228110Sjkim Offset += sizeof (ACPI_MPST_POWER_NODE); 1952228110Sjkim 1953228110Sjkim /* Sub-subtables - Memory Power State Structure(s) */ 1954228110Sjkim 1955228110Sjkim SubTable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, SubTable0, 1956228110Sjkim sizeof (ACPI_MPST_POWER_NODE)); 1957228110Sjkim 1958228110Sjkim while (PowerStateCount) 1959228110Sjkim { 1960228110Sjkim AcpiOsPrintf ("\n"); 1961228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A, 1962228110Sjkim sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A); 1963228110Sjkim if (ACPI_FAILURE (Status)) 1964228110Sjkim { 1965228110Sjkim return; 1966228110Sjkim } 1967228110Sjkim 1968228110Sjkim SubTable0A++; 1969228110Sjkim PowerStateCount--; 1970228110Sjkim Offset += sizeof (ACPI_MPST_POWER_STATE); 1971228110Sjkim } 1972228110Sjkim 1973228110Sjkim /* Sub-subtables - Physical Component ID Structure(s) */ 1974228110Sjkim 1975228110Sjkim SubTable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, SubTable0A); 1976228110Sjkim 1977228110Sjkim if (ComponentCount) 1978228110Sjkim { 1979228110Sjkim AcpiOsPrintf ("\n"); 1980228110Sjkim } 1981228110Sjkim 1982228110Sjkim while (ComponentCount) 1983228110Sjkim { 1984228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B, 1985228110Sjkim sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); 1986228110Sjkim if (ACPI_FAILURE (Status)) 1987228110Sjkim { 1988228110Sjkim return; 1989228110Sjkim } 1990228110Sjkim 1991228110Sjkim SubTable0B++; 1992228110Sjkim ComponentCount--; 1993228110Sjkim Offset += sizeof (ACPI_MPST_COMPONENT); 1994228110Sjkim } 1995228110Sjkim 1996228110Sjkim /* Point to next Memory Power Node subtable */ 1997228110Sjkim 1998228110Sjkim SubtableCount--; 1999228110Sjkim SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0, 2000228110Sjkim sizeof (ACPI_MPST_POWER_NODE) + 2001228110Sjkim (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) + 2002228110Sjkim (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents)); 2003228110Sjkim } 2004228110Sjkim 2005228110Sjkim /* Subtable: Count of Memory Power State Characteristic structures */ 2006228110Sjkim 2007228110Sjkim AcpiOsPrintf ("\n"); 2008228110Sjkim SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0); 2009228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1, 2010228110Sjkim sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1); 2011228110Sjkim if (ACPI_FAILURE (Status)) 2012228110Sjkim { 2013228110Sjkim return; 2014228110Sjkim } 2015228110Sjkim 2016228110Sjkim SubtableCount = SubTable1->CharacteristicsCount; 2017228110Sjkim Offset += sizeof (ACPI_MPST_DATA_HDR); 2018228110Sjkim 2019228110Sjkim /* Subtable: Memory Power State Characteristics structure(s) */ 2020228110Sjkim 2021228110Sjkim SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1, sizeof (ACPI_MPST_DATA_HDR)); 2022228110Sjkim 2023228110Sjkim while ((Offset < Table->Length) && SubtableCount) 2024228110Sjkim { 2025228110Sjkim AcpiOsPrintf ("\n"); 2026228110Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2, 2027228110Sjkim sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2); 2028228110Sjkim if (ACPI_FAILURE (Status)) 2029228110Sjkim { 2030228110Sjkim return; 2031228110Sjkim } 2032228110Sjkim 2033228110Sjkim SubTable2++; 2034228110Sjkim SubtableCount--; 2035228110Sjkim Offset += sizeof (ACPI_MPST_POWER_DATA); 2036228110Sjkim } 2037228110Sjkim} 2038228110Sjkim 2039228110Sjkim 2040228110Sjkim/******************************************************************************* 2041228110Sjkim * 2042197104Sjkim * FUNCTION: AcpiDmDumpMsct 2043197104Sjkim * 2044197104Sjkim * PARAMETERS: Table - A MSCT table 2045197104Sjkim * 2046197104Sjkim * RETURN: None 2047197104Sjkim * 2048197104Sjkim * DESCRIPTION: Format the contents of a MSCT 2049197104Sjkim * 2050197104Sjkim ******************************************************************************/ 2051197104Sjkim 2052197104Sjkimvoid 2053197104SjkimAcpiDmDumpMsct ( 2054197104Sjkim ACPI_TABLE_HEADER *Table) 2055197104Sjkim{ 2056197104Sjkim ACPI_STATUS Status; 2057197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MSCT); 2058197104Sjkim ACPI_MSCT_PROXIMITY *SubTable; 2059197104Sjkim 2060197104Sjkim 2061197104Sjkim /* Main table */ 2062197104Sjkim 2063197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct); 2064197104Sjkim if (ACPI_FAILURE (Status)) 2065197104Sjkim { 2066197104Sjkim return; 2067197104Sjkim } 2068197104Sjkim 2069272444Sjkim /* Subtables */ 2070197104Sjkim 2071197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); 2072197104Sjkim while (Offset < Table->Length) 2073197104Sjkim { 2074272444Sjkim /* Common subtable header */ 2075197104Sjkim 2076197104Sjkim AcpiOsPrintf ("\n"); 2077197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2078197104Sjkim sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); 2079197104Sjkim if (ACPI_FAILURE (Status)) 2080197104Sjkim { 2081197104Sjkim return; 2082197104Sjkim } 2083197104Sjkim 2084272444Sjkim /* Point to next subtable */ 2085197104Sjkim 2086197104Sjkim Offset += sizeof (ACPI_MSCT_PROXIMITY); 2087197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, SubTable, sizeof (ACPI_MSCT_PROXIMITY)); 2088197104Sjkim } 2089197104Sjkim} 2090197104Sjkim 2091197104Sjkim 2092197104Sjkim/******************************************************************************* 2093197104Sjkim * 2094246849Sjkim * FUNCTION: AcpiDmDumpMtmr 2095246849Sjkim * 2096246849Sjkim * PARAMETERS: Table - A MTMR table 2097246849Sjkim * 2098246849Sjkim * RETURN: None 2099246849Sjkim * 2100246849Sjkim * DESCRIPTION: Format the contents of a MTMR 2101246849Sjkim * 2102246849Sjkim ******************************************************************************/ 2103246849Sjkim 2104246849Sjkimvoid 2105246849SjkimAcpiDmDumpMtmr ( 2106246849Sjkim ACPI_TABLE_HEADER *Table) 2107246849Sjkim{ 2108246849Sjkim ACPI_STATUS Status; 2109246849Sjkim UINT32 Offset = sizeof (ACPI_TABLE_MTMR); 2110246849Sjkim ACPI_MTMR_ENTRY *SubTable; 2111246849Sjkim 2112246849Sjkim 2113246849Sjkim /* Main table */ 2114246849Sjkim 2115246849Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr); 2116246849Sjkim if (ACPI_FAILURE (Status)) 2117246849Sjkim { 2118246849Sjkim return; 2119246849Sjkim } 2120246849Sjkim 2121272444Sjkim /* Subtables */ 2122246849Sjkim 2123246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset); 2124246849Sjkim while (Offset < Table->Length) 2125246849Sjkim { 2126272444Sjkim /* Common subtable header */ 2127246849Sjkim 2128246849Sjkim AcpiOsPrintf ("\n"); 2129246849Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2130246849Sjkim sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0); 2131246849Sjkim if (ACPI_FAILURE (Status)) 2132246849Sjkim { 2133246849Sjkim return; 2134246849Sjkim } 2135246849Sjkim 2136272444Sjkim /* Point to next subtable */ 2137246849Sjkim 2138246849Sjkim Offset += sizeof (ACPI_MTMR_ENTRY); 2139246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, SubTable, sizeof (ACPI_MTMR_ENTRY)); 2140246849Sjkim } 2141246849Sjkim} 2142246849Sjkim 2143246849Sjkim 2144246849Sjkim/******************************************************************************* 2145246849Sjkim * 2146228110Sjkim * FUNCTION: AcpiDmDumpPcct 2147228110Sjkim * 2148228110Sjkim * PARAMETERS: Table - A PCCT table 2149228110Sjkim * 2150228110Sjkim * RETURN: None 2151228110Sjkim * 2152228110Sjkim * DESCRIPTION: Format the contents of a PCCT. This table type consists 2153228110Sjkim * of an open-ended number of subtables. 2154228110Sjkim * 2155228110Sjkim ******************************************************************************/ 2156228110Sjkim 2157228110Sjkimvoid 2158228110SjkimAcpiDmDumpPcct ( 2159228110Sjkim ACPI_TABLE_HEADER *Table) 2160228110Sjkim{ 2161228110Sjkim ACPI_STATUS Status; 2162228110Sjkim ACPI_PCCT_SUBSPACE *SubTable; 2163272444Sjkim ACPI_DMTABLE_INFO *InfoTable; 2164228110Sjkim UINT32 Length = Table->Length; 2165228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_PCCT); 2166228110Sjkim 2167228110Sjkim 2168228110Sjkim /* Main table */ 2169228110Sjkim 2170228110Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct); 2171228110Sjkim if (ACPI_FAILURE (Status)) 2172228110Sjkim { 2173228110Sjkim return; 2174228110Sjkim } 2175228110Sjkim 2176272444Sjkim /* Subtables */ 2177228110Sjkim 2178228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); 2179228110Sjkim while (Offset < Table->Length) 2180228110Sjkim { 2181272444Sjkim /* Common subtable header */ 2182272444Sjkim 2183228110Sjkim AcpiOsPrintf ("\n"); 2184228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2185272444Sjkim SubTable->Header.Length, AcpiDmTableInfoPcctHdr); 2186228110Sjkim if (ACPI_FAILURE (Status)) 2187228110Sjkim { 2188228110Sjkim return; 2189228110Sjkim } 2190228110Sjkim 2191272444Sjkim switch (SubTable->Header.Type) 2192272444Sjkim { 2193272444Sjkim case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: 2194228110Sjkim 2195272444Sjkim InfoTable = AcpiDmTableInfoPcct0; 2196272444Sjkim break; 2197272444Sjkim 2198272444Sjkim case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: 2199272444Sjkim 2200272444Sjkim InfoTable = AcpiDmTableInfoPcct1; 2201272444Sjkim break; 2202272444Sjkim 2203272444Sjkim default: 2204272444Sjkim 2205272444Sjkim AcpiOsPrintf ( 2206272444Sjkim "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", 2207272444Sjkim SubTable->Header.Type); 2208272444Sjkim return; 2209272444Sjkim } 2210272444Sjkim 2211272444Sjkim AcpiOsPrintf ("\n"); 2212272444Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2213272444Sjkim SubTable->Header.Length, InfoTable); 2214272444Sjkim if (ACPI_FAILURE (Status)) 2215272444Sjkim { 2216272444Sjkim return; 2217272444Sjkim } 2218272444Sjkim 2219272444Sjkim /* Point to next subtable */ 2220272444Sjkim 2221228110Sjkim Offset += SubTable->Header.Length; 2222228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, SubTable, 2223228110Sjkim SubTable->Header.Length); 2224228110Sjkim } 2225228110Sjkim} 2226228110Sjkim 2227228110Sjkim 2228228110Sjkim/******************************************************************************* 2229228110Sjkim * 2230228110Sjkim * FUNCTION: AcpiDmDumpPmtt 2231228110Sjkim * 2232228110Sjkim * PARAMETERS: Table - A PMTT table 2233228110Sjkim * 2234228110Sjkim * RETURN: None 2235228110Sjkim * 2236228110Sjkim * DESCRIPTION: Format the contents of a PMTT. This table type consists 2237228110Sjkim * of an open-ended number of subtables. 2238228110Sjkim * 2239228110Sjkim ******************************************************************************/ 2240228110Sjkim 2241228110Sjkimvoid 2242228110SjkimAcpiDmDumpPmtt ( 2243228110Sjkim ACPI_TABLE_HEADER *Table) 2244228110Sjkim{ 2245228110Sjkim ACPI_STATUS Status; 2246228110Sjkim ACPI_PMTT_HEADER *SubTable; 2247228110Sjkim ACPI_PMTT_HEADER *MemSubTable; 2248228110Sjkim ACPI_PMTT_HEADER *DimmSubTable; 2249228110Sjkim ACPI_PMTT_DOMAIN *DomainArray; 2250228110Sjkim UINT32 Length = Table->Length; 2251228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_PMTT); 2252228110Sjkim UINT32 MemOffset; 2253228110Sjkim UINT32 DimmOffset; 2254228110Sjkim UINT32 DomainOffset; 2255228110Sjkim UINT32 DomainCount; 2256228110Sjkim 2257228110Sjkim 2258228110Sjkim /* Main table */ 2259228110Sjkim 2260228110Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); 2261228110Sjkim if (ACPI_FAILURE (Status)) 2262228110Sjkim { 2263228110Sjkim return; 2264228110Sjkim } 2265228110Sjkim 2266228110Sjkim /* Subtables */ 2267228110Sjkim 2268228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); 2269228110Sjkim while (Offset < Table->Length) 2270228110Sjkim { 2271228110Sjkim /* Common subtable header */ 2272228110Sjkim 2273228110Sjkim AcpiOsPrintf ("\n"); 2274228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2275228110Sjkim SubTable->Length, AcpiDmTableInfoPmttHdr); 2276228110Sjkim if (ACPI_FAILURE (Status)) 2277228110Sjkim { 2278228110Sjkim return; 2279228110Sjkim } 2280228110Sjkim 2281228110Sjkim /* Only Socket subtables are expected at this level */ 2282228110Sjkim 2283228110Sjkim if (SubTable->Type != ACPI_PMTT_TYPE_SOCKET) 2284228110Sjkim { 2285228110Sjkim AcpiOsPrintf ( 2286228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2287228110Sjkim SubTable->Type); 2288228110Sjkim return; 2289228110Sjkim } 2290228110Sjkim 2291228110Sjkim /* Dump the fixed-length portion of the subtable */ 2292228110Sjkim 2293228110Sjkim Status = AcpiDmDumpTable (Length, Offset, SubTable, 2294228110Sjkim SubTable->Length, AcpiDmTableInfoPmtt0); 2295228110Sjkim if (ACPI_FAILURE (Status)) 2296228110Sjkim { 2297228110Sjkim return; 2298228110Sjkim } 2299228110Sjkim 2300228110Sjkim /* Walk the memory controller subtables */ 2301228110Sjkim 2302228110Sjkim MemOffset = sizeof (ACPI_PMTT_SOCKET); 2303228110Sjkim MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable, 2304228110Sjkim sizeof (ACPI_PMTT_SOCKET)); 2305228110Sjkim 2306228110Sjkim while (((Offset + MemOffset) < Table->Length) && 2307228110Sjkim (MemOffset < SubTable->Length)) 2308228110Sjkim { 2309228110Sjkim /* Common subtable header */ 2310228110Sjkim 2311228110Sjkim AcpiOsPrintf ("\n"); 2312228110Sjkim Status = AcpiDmDumpTable (Length, 2313228110Sjkim Offset + MemOffset, MemSubTable, 2314228110Sjkim MemSubTable->Length, AcpiDmTableInfoPmttHdr); 2315228110Sjkim if (ACPI_FAILURE (Status)) 2316228110Sjkim { 2317228110Sjkim return; 2318228110Sjkim } 2319228110Sjkim 2320228110Sjkim /* Only memory controller subtables are expected at this level */ 2321228110Sjkim 2322228110Sjkim if (MemSubTable->Type != ACPI_PMTT_TYPE_CONTROLLER) 2323228110Sjkim { 2324228110Sjkim AcpiOsPrintf ( 2325228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2326228110Sjkim MemSubTable->Type); 2327228110Sjkim return; 2328228110Sjkim } 2329228110Sjkim 2330228110Sjkim /* Dump the fixed-length portion of the controller subtable */ 2331228110Sjkim 2332228110Sjkim Status = AcpiDmDumpTable (Length, 2333228110Sjkim Offset + MemOffset, MemSubTable, 2334228110Sjkim MemSubTable->Length, AcpiDmTableInfoPmtt1); 2335228110Sjkim if (ACPI_FAILURE (Status)) 2336228110Sjkim { 2337228110Sjkim return; 2338228110Sjkim } 2339228110Sjkim 2340228110Sjkim /* Walk the variable count of proximity domains */ 2341228110Sjkim 2342228110Sjkim DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount; 2343228110Sjkim DomainOffset = sizeof (ACPI_PMTT_CONTROLLER); 2344228110Sjkim DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable, 2345228110Sjkim sizeof (ACPI_PMTT_CONTROLLER)); 2346228110Sjkim 2347228110Sjkim while (((Offset + MemOffset + DomainOffset) < Table->Length) && 2348228110Sjkim ((MemOffset + DomainOffset) < SubTable->Length) && 2349228110Sjkim DomainCount) 2350228110Sjkim { 2351228110Sjkim Status = AcpiDmDumpTable (Length, 2352228110Sjkim Offset + MemOffset + DomainOffset, DomainArray, 2353228110Sjkim sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); 2354228110Sjkim if (ACPI_FAILURE (Status)) 2355228110Sjkim { 2356228110Sjkim return; 2357228110Sjkim } 2358228110Sjkim 2359228110Sjkim DomainOffset += sizeof (ACPI_PMTT_DOMAIN); 2360228110Sjkim DomainArray++; 2361228110Sjkim DomainCount--; 2362228110Sjkim } 2363228110Sjkim 2364228110Sjkim if (DomainCount) 2365228110Sjkim { 2366228110Sjkim AcpiOsPrintf ( 2367272444Sjkim "\n**** DomainCount exceeds subtable length\n\n"); 2368228110Sjkim } 2369228110Sjkim 2370228110Sjkim /* Walk the physical component (DIMM) subtables */ 2371228110Sjkim 2372228110Sjkim DimmOffset = DomainOffset; 2373228110Sjkim DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable, 2374228110Sjkim DomainOffset); 2375228110Sjkim 2376228110Sjkim while (((Offset + MemOffset + DimmOffset) < Table->Length) && 2377228110Sjkim (DimmOffset < MemSubTable->Length)) 2378228110Sjkim { 2379228110Sjkim /* Common subtable header */ 2380228110Sjkim 2381228110Sjkim AcpiOsPrintf ("\n"); 2382228110Sjkim Status = AcpiDmDumpTable (Length, 2383228110Sjkim Offset + MemOffset + DimmOffset, DimmSubTable, 2384228110Sjkim DimmSubTable->Length, AcpiDmTableInfoPmttHdr); 2385228110Sjkim if (ACPI_FAILURE (Status)) 2386228110Sjkim { 2387228110Sjkim return; 2388228110Sjkim } 2389228110Sjkim 2390228110Sjkim /* Only DIMM subtables are expected at this level */ 2391228110Sjkim 2392228110Sjkim if (DimmSubTable->Type != ACPI_PMTT_TYPE_DIMM) 2393228110Sjkim { 2394228110Sjkim AcpiOsPrintf ( 2395228110Sjkim "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n", 2396228110Sjkim DimmSubTable->Type); 2397228110Sjkim return; 2398228110Sjkim } 2399228110Sjkim 2400228110Sjkim /* Dump the fixed-length DIMM subtable */ 2401228110Sjkim 2402228110Sjkim Status = AcpiDmDumpTable (Length, 2403228110Sjkim Offset + MemOffset + DimmOffset, DimmSubTable, 2404228110Sjkim DimmSubTable->Length, AcpiDmTableInfoPmtt2); 2405228110Sjkim if (ACPI_FAILURE (Status)) 2406228110Sjkim { 2407228110Sjkim return; 2408228110Sjkim } 2409228110Sjkim 2410228110Sjkim /* Point to next DIMM subtable */ 2411228110Sjkim 2412228110Sjkim DimmOffset += DimmSubTable->Length; 2413228110Sjkim DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 2414228110Sjkim DimmSubTable, DimmSubTable->Length); 2415228110Sjkim } 2416228110Sjkim 2417228110Sjkim /* Point to next Controller subtable */ 2418228110Sjkim 2419228110Sjkim MemOffset += MemSubTable->Length; 2420228110Sjkim MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 2421228110Sjkim MemSubTable, MemSubTable->Length); 2422228110Sjkim } 2423228110Sjkim 2424228110Sjkim /* Point to next Socket subtable */ 2425228110Sjkim 2426228110Sjkim Offset += SubTable->Length; 2427228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, 2428228110Sjkim SubTable, SubTable->Length); 2429228110Sjkim } 2430228110Sjkim} 2431228110Sjkim 2432228110Sjkim 2433228110Sjkim/******************************************************************************* 2434228110Sjkim * 2435228110Sjkim * FUNCTION: AcpiDmDumpS3pt 2436228110Sjkim * 2437228110Sjkim * PARAMETERS: Table - A S3PT table 2438228110Sjkim * 2439228110Sjkim * RETURN: Length of the table 2440228110Sjkim * 2441228110Sjkim * DESCRIPTION: Format the contents of a S3PT 2442228110Sjkim * 2443228110Sjkim ******************************************************************************/ 2444228110Sjkim 2445228110SjkimUINT32 2446228110SjkimAcpiDmDumpS3pt ( 2447228110Sjkim ACPI_TABLE_HEADER *Tables) 2448228110Sjkim{ 2449228110Sjkim ACPI_STATUS Status; 2450228110Sjkim UINT32 Offset = sizeof (ACPI_TABLE_S3PT); 2451228110Sjkim ACPI_S3PT_HEADER *SubTable; 2452228110Sjkim ACPI_DMTABLE_INFO *InfoTable; 2453228110Sjkim ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables); 2454228110Sjkim 2455228110Sjkim 2456228110Sjkim /* Main table */ 2457228110Sjkim 2458228110Sjkim Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt); 2459228110Sjkim if (ACPI_FAILURE (Status)) 2460228110Sjkim { 2461228110Sjkim return 0; 2462228110Sjkim } 2463228110Sjkim 2464228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, S3ptTable, Offset); 2465228110Sjkim while (Offset < S3ptTable->Length) 2466228110Sjkim { 2467272444Sjkim /* Common subtable header */ 2468228110Sjkim 2469228110Sjkim AcpiOsPrintf ("\n"); 2470228110Sjkim Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable, 2471228110Sjkim SubTable->Length, AcpiDmTableInfoS3ptHdr); 2472228110Sjkim if (ACPI_FAILURE (Status)) 2473228110Sjkim { 2474228110Sjkim return 0; 2475228110Sjkim } 2476228110Sjkim 2477228110Sjkim switch (SubTable->Type) 2478228110Sjkim { 2479228110Sjkim case ACPI_S3PT_TYPE_RESUME: 2480250838Sjkim 2481228110Sjkim InfoTable = AcpiDmTableInfoS3pt0; 2482228110Sjkim break; 2483250838Sjkim 2484228110Sjkim case ACPI_S3PT_TYPE_SUSPEND: 2485250838Sjkim 2486228110Sjkim InfoTable = AcpiDmTableInfoS3pt1; 2487228110Sjkim break; 2488250838Sjkim 2489228110Sjkim default: 2490250838Sjkim 2491272444Sjkim AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", SubTable->Type); 2492228110Sjkim 2493228110Sjkim /* Attempt to continue */ 2494228110Sjkim 2495228110Sjkim if (!SubTable->Length) 2496228110Sjkim { 2497228110Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2498228110Sjkim return 0; 2499228110Sjkim } 2500228110Sjkim goto NextSubTable; 2501228110Sjkim } 2502228110Sjkim 2503228110Sjkim AcpiOsPrintf ("\n"); 2504228110Sjkim Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable, 2505228110Sjkim SubTable->Length, InfoTable); 2506228110Sjkim if (ACPI_FAILURE (Status)) 2507228110Sjkim { 2508228110Sjkim return 0; 2509228110Sjkim } 2510228110Sjkim 2511228110SjkimNextSubTable: 2512272444Sjkim /* Point to next subtable */ 2513228110Sjkim 2514228110Sjkim Offset += SubTable->Length; 2515228110Sjkim SubTable = ACPI_ADD_PTR (ACPI_S3PT_HEADER, SubTable, SubTable->Length); 2516228110Sjkim } 2517228110Sjkim 2518228110Sjkim return (S3ptTable->Length); 2519228110Sjkim} 2520228110Sjkim 2521228110Sjkim 2522228110Sjkim/******************************************************************************* 2523228110Sjkim * 2524219707Sjkim * FUNCTION: AcpiDmDumpSlic 2525219707Sjkim * 2526219707Sjkim * PARAMETERS: Table - A SLIC table 2527219707Sjkim * 2528219707Sjkim * RETURN: None 2529219707Sjkim * 2530219707Sjkim * DESCRIPTION: Format the contents of a SLIC 2531219707Sjkim * 2532219707Sjkim ******************************************************************************/ 2533219707Sjkim 2534219707Sjkimvoid 2535219707SjkimAcpiDmDumpSlic ( 2536219707Sjkim ACPI_TABLE_HEADER *Table) 2537219707Sjkim{ 2538219707Sjkim ACPI_STATUS Status; 2539219707Sjkim UINT32 Offset = sizeof (ACPI_TABLE_SLIC); 2540219707Sjkim ACPI_SLIC_HEADER *SubTable; 2541219707Sjkim ACPI_DMTABLE_INFO *InfoTable; 2542219707Sjkim 2543219707Sjkim 2544219707Sjkim /* There is no main SLIC table, only subtables */ 2545219707Sjkim 2546219707Sjkim SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, Table, Offset); 2547219707Sjkim while (Offset < Table->Length) 2548219707Sjkim { 2549272444Sjkim /* Common subtable header */ 2550219707Sjkim 2551219707Sjkim AcpiOsPrintf ("\n"); 2552219707Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2553219707Sjkim SubTable->Length, AcpiDmTableInfoSlicHdr); 2554219707Sjkim if (ACPI_FAILURE (Status)) 2555219707Sjkim { 2556219707Sjkim return; 2557219707Sjkim } 2558219707Sjkim 2559219707Sjkim switch (SubTable->Type) 2560219707Sjkim { 2561219707Sjkim case ACPI_SLIC_TYPE_PUBLIC_KEY: 2562250838Sjkim 2563219707Sjkim InfoTable = AcpiDmTableInfoSlic0; 2564219707Sjkim break; 2565250838Sjkim 2566219707Sjkim case ACPI_SLIC_TYPE_WINDOWS_MARKER: 2567250838Sjkim 2568219707Sjkim InfoTable = AcpiDmTableInfoSlic1; 2569219707Sjkim break; 2570250838Sjkim 2571219707Sjkim default: 2572250838Sjkim 2573272444Sjkim AcpiOsPrintf ("\n**** Unknown SLIC subtable type 0x%X\n", SubTable->Type); 2574219707Sjkim 2575219707Sjkim /* Attempt to continue */ 2576219707Sjkim 2577219707Sjkim if (!SubTable->Length) 2578219707Sjkim { 2579219707Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2580219707Sjkim return; 2581219707Sjkim } 2582219707Sjkim goto NextSubTable; 2583219707Sjkim } 2584219707Sjkim 2585219707Sjkim AcpiOsPrintf ("\n"); 2586219707Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2587219707Sjkim SubTable->Length, InfoTable); 2588219707Sjkim if (ACPI_FAILURE (Status)) 2589219707Sjkim { 2590219707Sjkim return; 2591219707Sjkim } 2592219707Sjkim 2593219707SjkimNextSubTable: 2594272444Sjkim /* Point to next subtable */ 2595219707Sjkim 2596219707Sjkim Offset += SubTable->Length; 2597219707Sjkim SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, SubTable, SubTable->Length); 2598219707Sjkim } 2599219707Sjkim} 2600219707Sjkim 2601219707Sjkim 2602219707Sjkim/******************************************************************************* 2603219707Sjkim * 2604167802Sjkim * FUNCTION: AcpiDmDumpSlit 2605167802Sjkim * 2606167802Sjkim * PARAMETERS: Table - An SLIT 2607167802Sjkim * 2608167802Sjkim * RETURN: None 2609167802Sjkim * 2610167802Sjkim * DESCRIPTION: Format the contents of a SLIT 2611167802Sjkim * 2612167802Sjkim ******************************************************************************/ 2613167802Sjkim 2614167802Sjkimvoid 2615167802SjkimAcpiDmDumpSlit ( 2616167802Sjkim ACPI_TABLE_HEADER *Table) 2617167802Sjkim{ 2618193529Sjkim ACPI_STATUS Status; 2619167802Sjkim UINT32 Offset; 2620167802Sjkim UINT8 *Row; 2621167802Sjkim UINT32 Localities; 2622167802Sjkim UINT32 i; 2623167802Sjkim UINT32 j; 2624167802Sjkim 2625167802Sjkim 2626167802Sjkim /* Main table */ 2627167802Sjkim 2628193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit); 2629193529Sjkim if (ACPI_FAILURE (Status)) 2630193529Sjkim { 2631193529Sjkim return; 2632193529Sjkim } 2633167802Sjkim 2634167802Sjkim /* Display the Locality NxN Matrix */ 2635167802Sjkim 2636167802Sjkim Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount; 2637167802Sjkim Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]); 2638167802Sjkim Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry; 2639167802Sjkim 2640167802Sjkim for (i = 0; i < Localities; i++) 2641167802Sjkim { 2642167802Sjkim /* Display one row of the matrix */ 2643167802Sjkim 2644167802Sjkim AcpiDmLineHeader2 (Offset, Localities, "Locality", i); 2645167802Sjkim for (j = 0; j < Localities; j++) 2646167802Sjkim { 2647167802Sjkim /* Check for beyond EOT */ 2648167802Sjkim 2649167802Sjkim if (Offset >= Table->Length) 2650167802Sjkim { 2651167802Sjkim AcpiOsPrintf ("\n**** Not enough room in table for all localities\n"); 2652167802Sjkim return; 2653167802Sjkim } 2654167802Sjkim 2655209746Sjkim AcpiOsPrintf ("%2.2X", Row[j]); 2656167802Sjkim Offset++; 2657167802Sjkim 2658167802Sjkim /* Display up to 16 bytes per output row */ 2659167802Sjkim 2660209746Sjkim if ((j+1) < Localities) 2661167802Sjkim { 2662220663Sjkim AcpiOsPrintf (" "); 2663209746Sjkim 2664209746Sjkim if (j && (((j+1) % 16) == 0)) 2665209746Sjkim { 2666220663Sjkim AcpiOsPrintf ("\\\n"); /* With line continuation char */ 2667220663Sjkim AcpiDmLineHeader (Offset, 0, NULL); 2668209746Sjkim } 2669167802Sjkim } 2670167802Sjkim } 2671167802Sjkim 2672167802Sjkim /* Point to next row */ 2673167802Sjkim 2674167802Sjkim AcpiOsPrintf ("\n"); 2675167802Sjkim Row += Localities; 2676167802Sjkim } 2677167802Sjkim} 2678167802Sjkim 2679167802Sjkim 2680167802Sjkim/******************************************************************************* 2681167802Sjkim * 2682167802Sjkim * FUNCTION: AcpiDmDumpSrat 2683167802Sjkim * 2684167802Sjkim * PARAMETERS: Table - A SRAT table 2685167802Sjkim * 2686167802Sjkim * RETURN: None 2687167802Sjkim * 2688167802Sjkim * DESCRIPTION: Format the contents of a SRAT 2689167802Sjkim * 2690167802Sjkim ******************************************************************************/ 2691167802Sjkim 2692167802Sjkimvoid 2693167802SjkimAcpiDmDumpSrat ( 2694167802Sjkim ACPI_TABLE_HEADER *Table) 2695167802Sjkim{ 2696193529Sjkim ACPI_STATUS Status; 2697167802Sjkim UINT32 Offset = sizeof (ACPI_TABLE_SRAT); 2698167802Sjkim ACPI_SUBTABLE_HEADER *SubTable; 2699167802Sjkim ACPI_DMTABLE_INFO *InfoTable; 2700167802Sjkim 2701167802Sjkim 2702167802Sjkim /* Main table */ 2703167802Sjkim 2704193529Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat); 2705193529Sjkim if (ACPI_FAILURE (Status)) 2706193529Sjkim { 2707193529Sjkim return; 2708193529Sjkim } 2709167802Sjkim 2710272444Sjkim /* Subtables */ 2711167802Sjkim 2712167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); 2713167802Sjkim while (Offset < Table->Length) 2714167802Sjkim { 2715272444Sjkim /* Common subtable header */ 2716193529Sjkim 2717193529Sjkim AcpiOsPrintf ("\n"); 2718193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2719193529Sjkim SubTable->Length, AcpiDmTableInfoSratHdr); 2720193529Sjkim if (ACPI_FAILURE (Status)) 2721193529Sjkim { 2722193529Sjkim return; 2723193529Sjkim } 2724193529Sjkim 2725167802Sjkim switch (SubTable->Type) 2726167802Sjkim { 2727167802Sjkim case ACPI_SRAT_TYPE_CPU_AFFINITY: 2728250838Sjkim 2729167802Sjkim InfoTable = AcpiDmTableInfoSrat0; 2730167802Sjkim break; 2731250838Sjkim 2732167802Sjkim case ACPI_SRAT_TYPE_MEMORY_AFFINITY: 2733250838Sjkim 2734167802Sjkim InfoTable = AcpiDmTableInfoSrat1; 2735167802Sjkim break; 2736250838Sjkim 2737193529Sjkim case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: 2738250838Sjkim 2739193529Sjkim InfoTable = AcpiDmTableInfoSrat2; 2740193529Sjkim break; 2741250838Sjkim 2742272444Sjkim case ACPI_SRAT_TYPE_GICC_AFFINITY: 2743272444Sjkim 2744272444Sjkim InfoTable = AcpiDmTableInfoSrat3; 2745272444Sjkim break; 2746272444Sjkim 2747167802Sjkim default: 2748272444Sjkim AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", SubTable->Type); 2749193529Sjkim 2750193529Sjkim /* Attempt to continue */ 2751193529Sjkim 2752193529Sjkim if (!SubTable->Length) 2753193529Sjkim { 2754193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 2755193529Sjkim return; 2756193529Sjkim } 2757193529Sjkim goto NextSubTable; 2758167802Sjkim } 2759167802Sjkim 2760167802Sjkim AcpiOsPrintf ("\n"); 2761193529Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2762193529Sjkim SubTable->Length, InfoTable); 2763193529Sjkim if (ACPI_FAILURE (Status)) 2764193529Sjkim { 2765193529Sjkim return; 2766193529Sjkim } 2767167802Sjkim 2768193529SjkimNextSubTable: 2769272444Sjkim /* Point to next subtable */ 2770167802Sjkim 2771167802Sjkim Offset += SubTable->Length; 2772167802Sjkim SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTable->Length); 2773167802Sjkim } 2774167802Sjkim} 2775167802Sjkim 2776197104Sjkim 2777197104Sjkim/******************************************************************************* 2778197104Sjkim * 2779246849Sjkim * FUNCTION: AcpiDmDumpVrtc 2780246849Sjkim * 2781246849Sjkim * PARAMETERS: Table - A VRTC table 2782246849Sjkim * 2783246849Sjkim * RETURN: None 2784246849Sjkim * 2785246849Sjkim * DESCRIPTION: Format the contents of a VRTC 2786246849Sjkim * 2787246849Sjkim ******************************************************************************/ 2788246849Sjkim 2789246849Sjkimvoid 2790246849SjkimAcpiDmDumpVrtc ( 2791246849Sjkim ACPI_TABLE_HEADER *Table) 2792246849Sjkim{ 2793246849Sjkim ACPI_STATUS Status; 2794246849Sjkim UINT32 Offset = sizeof (ACPI_TABLE_VRTC); 2795246849Sjkim ACPI_VRTC_ENTRY *SubTable; 2796246849Sjkim 2797246849Sjkim 2798246849Sjkim /* Main table */ 2799246849Sjkim 2800246849Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc); 2801246849Sjkim if (ACPI_FAILURE (Status)) 2802246849Sjkim { 2803246849Sjkim return; 2804246849Sjkim } 2805246849Sjkim 2806272444Sjkim /* Subtables */ 2807246849Sjkim 2808246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset); 2809246849Sjkim while (Offset < Table->Length) 2810246849Sjkim { 2811272444Sjkim /* Common subtable header */ 2812246849Sjkim 2813246849Sjkim AcpiOsPrintf ("\n"); 2814246849Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2815246849Sjkim sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0); 2816246849Sjkim if (ACPI_FAILURE (Status)) 2817246849Sjkim { 2818246849Sjkim return; 2819246849Sjkim } 2820246849Sjkim 2821272444Sjkim /* Point to next subtable */ 2822246849Sjkim 2823246849Sjkim Offset += sizeof (ACPI_VRTC_ENTRY); 2824246849Sjkim SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, SubTable, sizeof (ACPI_VRTC_ENTRY)); 2825246849Sjkim } 2826246849Sjkim} 2827246849Sjkim 2828246849Sjkim 2829246849Sjkim/******************************************************************************* 2830246849Sjkim * 2831197104Sjkim * FUNCTION: AcpiDmDumpWdat 2832197104Sjkim * 2833197104Sjkim * PARAMETERS: Table - A WDAT table 2834197104Sjkim * 2835197104Sjkim * RETURN: None 2836197104Sjkim * 2837197104Sjkim * DESCRIPTION: Format the contents of a WDAT 2838197104Sjkim * 2839197104Sjkim ******************************************************************************/ 2840197104Sjkim 2841197104Sjkimvoid 2842197104SjkimAcpiDmDumpWdat ( 2843197104Sjkim ACPI_TABLE_HEADER *Table) 2844197104Sjkim{ 2845197104Sjkim ACPI_STATUS Status; 2846197104Sjkim UINT32 Offset = sizeof (ACPI_TABLE_WDAT); 2847197104Sjkim ACPI_WDAT_ENTRY *SubTable; 2848197104Sjkim 2849197104Sjkim 2850197104Sjkim /* Main table */ 2851197104Sjkim 2852197104Sjkim Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat); 2853197104Sjkim if (ACPI_FAILURE (Status)) 2854197104Sjkim { 2855197104Sjkim return; 2856197104Sjkim } 2857197104Sjkim 2858272444Sjkim /* Subtables */ 2859197104Sjkim 2860197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); 2861197104Sjkim while (Offset < Table->Length) 2862197104Sjkim { 2863272444Sjkim /* Common subtable header */ 2864197104Sjkim 2865197104Sjkim AcpiOsPrintf ("\n"); 2866197104Sjkim Status = AcpiDmDumpTable (Table->Length, Offset, SubTable, 2867197104Sjkim sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); 2868197104Sjkim if (ACPI_FAILURE (Status)) 2869197104Sjkim { 2870197104Sjkim return; 2871197104Sjkim } 2872197104Sjkim 2873272444Sjkim /* Point to next subtable */ 2874197104Sjkim 2875197104Sjkim Offset += sizeof (ACPI_WDAT_ENTRY); 2876197104Sjkim SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, SubTable, sizeof (ACPI_WDAT_ENTRY)); 2877197104Sjkim } 2878197104Sjkim} 2879