1167802Sjkim/****************************************************************************** 2167802Sjkim * 3167802Sjkim * Module Name: dmtable - Support for ACPI tables that contain no AML code 4167802Sjkim * 5167802Sjkim *****************************************************************************/ 6167802Sjkim 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9167802Sjkim * All rights reserved. 10167802Sjkim * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25167802Sjkim * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29167802Sjkim * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43167802Sjkim 44193529Sjkim#include <contrib/dev/acpica/include/acpi.h> 45193529Sjkim#include <contrib/dev/acpica/include/accommon.h> 46193529Sjkim#include <contrib/dev/acpica/include/acdisasm.h> 47193529Sjkim#include <contrib/dev/acpica/include/actables.h> 48209746Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h> 49209746Sjkim#include <contrib/dev/acpica/compiler/dtcompiler.h> 50167802Sjkim 51167802Sjkim/* This module used for application-level code only */ 52167802Sjkim 53167802Sjkim#define _COMPONENT ACPI_CA_DISASSEMBLER 54167802Sjkim ACPI_MODULE_NAME ("dmtable") 55167802Sjkim 56284460Sjkimconst AH_TABLE * 57284460SjkimAcpiAhGetTableInfo ( 58284460Sjkim char *Signature); 59284460Sjkim 60284460Sjkim 61220663Sjkim/* Common format strings for commented values */ 62220663Sjkim 63220663Sjkim#define UINT8_FORMAT "%2.2X [%s]\n" 64220663Sjkim#define UINT16_FORMAT "%4.4X [%s]\n" 65220663Sjkim#define UINT32_FORMAT "%8.8X [%s]\n" 66220663Sjkim#define STRING_FORMAT "[%s]\n" 67220663Sjkim 68167802Sjkim/* These tables map a subtable type to a description string */ 69167802Sjkim 70193529Sjkimstatic const char *AcpiDmAsfSubnames[] = 71193529Sjkim{ 72193529Sjkim "ASF Information", 73193529Sjkim "ASF Alerts", 74193529Sjkim "ASF Remote Control", 75193529Sjkim "ASF RMCP Boot Options", 76193529Sjkim "ASF Address", 77284460Sjkim "Unknown Subtable Type" /* Reserved */ 78193529Sjkim}; 79193529Sjkim 80167802Sjkimstatic const char *AcpiDmDmarSubnames[] = 81167802Sjkim{ 82167802Sjkim "Hardware Unit Definition", 83167802Sjkim "Reserved Memory Region", 84193529Sjkim "Root Port ATS Capability", 85197104Sjkim "Remapping Hardware Static Affinity", 86281075Sdim "ACPI Namespace Device Declaration", 87284460Sjkim "Unknown Subtable Type" /* Reserved */ 88167802Sjkim}; 89167802Sjkim 90281075Sdimstatic const char *AcpiDmDmarScope[] = 91281075Sdim{ 92281075Sdim "Reserved value", 93281075Sdim "PCI Endpoint Device", 94281075Sdim "PCI Bridge Device", 95281075Sdim "IOAPIC Device", 96281075Sdim "Message-capable HPET Device", 97281075Sdim "Namespace Device", 98281075Sdim "Unknown Scope Type" /* Reserved */ 99281075Sdim}; 100281075Sdim 101209746Sjkimstatic const char *AcpiDmEinjActions[] = 102209746Sjkim{ 103209746Sjkim "Begin Operation", 104209746Sjkim "Get Trigger Table", 105209746Sjkim "Set Error Type", 106209746Sjkim "Get Error Type", 107209746Sjkim "End Operation", 108209746Sjkim "Execute Operation", 109209746Sjkim "Check Busy Status", 110209746Sjkim "Get Command Status", 111252279Sjkim "Set Error Type With Address", 112306536Sjkim "Get Execute Timings", 113209746Sjkim "Unknown Action" 114209746Sjkim}; 115209746Sjkim 116209746Sjkimstatic const char *AcpiDmEinjInstructions[] = 117209746Sjkim{ 118209746Sjkim "Read Register", 119209746Sjkim "Read Register Value", 120209746Sjkim "Write Register", 121209746Sjkim "Write Register Value", 122209746Sjkim "Noop", 123252279Sjkim "Flush Cacheline", 124209746Sjkim "Unknown Instruction" 125209746Sjkim}; 126209746Sjkim 127209746Sjkimstatic const char *AcpiDmErstActions[] = 128209746Sjkim{ 129209746Sjkim "Begin Write Operation", 130209746Sjkim "Begin Read Operation", 131209746Sjkim "Begin Clear Operation", 132209746Sjkim "End Operation", 133209746Sjkim "Set Record Offset", 134209746Sjkim "Execute Operation", 135209746Sjkim "Check Busy Status", 136209746Sjkim "Get Command Status", 137209746Sjkim "Get Record Identifier", 138209746Sjkim "Set Record Identifier", 139209746Sjkim "Get Record Count", 140209746Sjkim "Begin Dummy Write", 141209746Sjkim "Unused/Unknown Action", 142209746Sjkim "Get Error Address Range", 143209746Sjkim "Get Error Address Length", 144209746Sjkim "Get Error Attributes", 145306536Sjkim "Execute Timings", 146209746Sjkim "Unknown Action" 147209746Sjkim}; 148209746Sjkim 149209746Sjkimstatic const char *AcpiDmErstInstructions[] = 150209746Sjkim{ 151209746Sjkim "Read Register", 152209746Sjkim "Read Register Value", 153209746Sjkim "Write Register", 154209746Sjkim "Write Register Value", 155209746Sjkim "Noop", 156209746Sjkim "Load Var1", 157209746Sjkim "Load Var2", 158209746Sjkim "Store Var1", 159209746Sjkim "Add", 160209746Sjkim "Subtract", 161209746Sjkim "Add Value", 162209746Sjkim "Subtract Value", 163209746Sjkim "Stall", 164209746Sjkim "Stall While True", 165209746Sjkim "Skip Next If True", 166209746Sjkim "GoTo", 167209746Sjkim "Set Source Address", 168209746Sjkim "Set Destination Address", 169209746Sjkim "Move Data", 170209746Sjkim "Unknown Instruction" 171209746Sjkim}; 172209746Sjkim 173281075Sdimstatic const char *AcpiDmGtdtSubnames[] = 174281075Sdim{ 175281075Sdim "Generic Timer Block", 176281075Sdim "Generic Watchdog Timer", 177284460Sjkim "Unknown Subtable Type" /* Reserved */ 178281075Sdim}; 179281075Sdim 180193529Sjkimstatic const char *AcpiDmHestSubnames[] = 181193529Sjkim{ 182197104Sjkim "IA-32 Machine Check Exception", 183197104Sjkim "IA-32 Corrected Machine Check", 184197104Sjkim "IA-32 Non-Maskable Interrupt", 185197104Sjkim "Unknown SubTable Type", /* 3 - Reserved */ 186197104Sjkim "Unknown SubTable Type", /* 4 - Reserved */ 187197104Sjkim "Unknown SubTable Type", /* 5 - Reserved */ 188193529Sjkim "PCI Express Root Port AER", 189193529Sjkim "PCI Express AER (AER Endpoint)", 190193529Sjkim "PCI Express/PCI-X Bridge AER", 191193529Sjkim "Generic Hardware Error Source", 192306536Sjkim "Generic Hardware Error Source V2", 193284460Sjkim "Unknown Subtable Type" /* Reserved */ 194193529Sjkim}; 195193529Sjkim 196193529Sjkimstatic const char *AcpiDmHestNotifySubnames[] = 197193529Sjkim{ 198193529Sjkim "Polled", 199193529Sjkim "External Interrupt", 200193529Sjkim "Local Interrupt", 201193529Sjkim "SCI", 202193529Sjkim "NMI", 203252279Sjkim "CMCI", /* ACPI 5.0 */ 204252279Sjkim "MCE", /* ACPI 5.0 */ 205306536Sjkim "GPIO", /* ACPI 6.0 */ 206306536Sjkim "SEA", /* ACPI 6.1 */ 207306536Sjkim "SEI", /* ACPI 6.1 */ 208306536Sjkim "GSIV", /* ACPI 6.1 */ 209193529Sjkim "Unknown Notify Type" /* Reserved */ 210193529Sjkim}; 211193529Sjkim 212167802Sjkimstatic const char *AcpiDmMadtSubnames[] = 213167802Sjkim{ 214281075Sdim "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ 215281075Sdim "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ 216281075Sdim "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ 217281075Sdim "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ 218281075Sdim "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ 219281075Sdim "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ 220281075Sdim "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ 221281075Sdim "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ 222281075Sdim "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ 223281075Sdim "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ 224281075Sdim "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ 225281075Sdim "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ 226281075Sdim "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */ 227281075Sdim "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */ 228281075Sdim "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */ 229284460Sjkim "Generic Interrupt Translator", /* ACPI_MADT_GENERIC_TRANSLATOR */ 230284460Sjkim "Unknown Subtable Type" /* Reserved */ 231167802Sjkim}; 232167802Sjkim 233284460Sjkimstatic const char *AcpiDmNfitSubnames[] = 234284460Sjkim{ 235284460Sjkim "System Physical Address Range", /* ACPI_NFIT_TYPE_SYSTEM_ADDRESS */ 236284460Sjkim "Memory Range Map", /* ACPI_NFIT_TYPE_MEMORY_MAP */ 237284460Sjkim "Interleave Info", /* ACPI_NFIT_TYPE_INTERLEAVE */ 238284460Sjkim "SMBIOS Information", /* ACPI_NFIT_TYPE_SMBIOS */ 239284460Sjkim "NVDIMM Control Region", /* ACPI_NFIT_TYPE_CONTROL_REGION */ 240284460Sjkim "NVDIMM Block Data Window Region", /* ACPI_NFIT_TYPE_DATA_REGION */ 241284460Sjkim "Flush Hint Address", /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */ 242284460Sjkim "Unknown Subtable Type" /* Reserved */ 243284460Sjkim}; 244284460Sjkim 245281075Sdimstatic const char *AcpiDmPcctSubnames[] = 246281075Sdim{ 247281075Sdim "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ 248284460Sjkim "HW-Reduced Comm Subspace", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */ 249306536Sjkim "HW-Reduced Comm Subspace Type2", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */ 250284460Sjkim "Unknown Subtable Type" /* Reserved */ 251281075Sdim}; 252281075Sdim 253228110Sjkimstatic const char *AcpiDmPmttSubnames[] = 254228110Sjkim{ 255228110Sjkim "Socket", /* ACPI_PMTT_TYPE_SOCKET */ 256228110Sjkim "Memory Controller", /* ACPI_PMTT_TYPE_CONTROLLER */ 257228110Sjkim "Physical Component (DIMM)", /* ACPI_PMTT_TYPE_DIMM */ 258284460Sjkim "Unknown Subtable Type" /* Reserved */ 259228110Sjkim}; 260228110Sjkim 261167802Sjkimstatic const char *AcpiDmSratSubnames[] = 262167802Sjkim{ 263167802Sjkim "Processor Local APIC/SAPIC Affinity", 264167802Sjkim "Memory Affinity", 265193529Sjkim "Processor Local x2APIC Affinity", 266281075Sdim "GICC Affinity", 267284460Sjkim "Unknown Subtable Type" /* Reserved */ 268167802Sjkim}; 269167802Sjkim 270197104Sjkimstatic const char *AcpiDmIvrsSubnames[] = 271197104Sjkim{ 272197104Sjkim "Hardware Definition Block", 273197104Sjkim "Memory Definition Block", 274284460Sjkim "Unknown Subtable Type" /* Reserved */ 275197104Sjkim}; 276167802Sjkim 277281075Sdimstatic const char *AcpiDmLpitSubnames[] = 278281075Sdim{ 279281075Sdim "Native C-state Idle Structure", 280284460Sjkim "Unknown Subtable Type" /* Reserved */ 281281075Sdim}; 282197104Sjkim 283229989Sjkim#define ACPI_FADT_PM_RESERVED 9 284193529Sjkim 285193529Sjkimstatic const char *AcpiDmFadtProfiles[] = 286193529Sjkim{ 287193529Sjkim "Unspecified", 288193529Sjkim "Desktop", 289193529Sjkim "Mobile", 290193529Sjkim "Workstation", 291193529Sjkim "Enterprise Server", 292193529Sjkim "SOHO Server", 293193529Sjkim "Appliance PC", 294193529Sjkim "Performance Server", 295229989Sjkim "Tablet", 296193529Sjkim "Unknown Profile Type" 297193529Sjkim}; 298193529Sjkim 299216471Sjkim#define ACPI_GAS_WIDTH_RESERVED 5 300216471Sjkim 301216471Sjkimstatic const char *AcpiDmGasAccessWidth[] = 302216471Sjkim{ 303216471Sjkim "Undefined/Legacy", 304216471Sjkim "Byte Access:8", 305216471Sjkim "Word Access:16", 306216471Sjkim "DWord Access:32", 307216471Sjkim "QWord Access:64", 308216471Sjkim "Unknown Width Encoding" 309216471Sjkim}; 310216471Sjkim 311216471Sjkim 312167802Sjkim/******************************************************************************* 313167802Sjkim * 314167802Sjkim * ACPI Table Data, indexed by signature. 315167802Sjkim * 316209746Sjkim * Each entry contains: Signature, Table Info, Handler, DtHandler, 317209746Sjkim * Template, Description 318197104Sjkim * 319209746Sjkim * Simple tables have only a TableInfo structure, complex tables have a 320209746Sjkim * handler. This table must be NULL terminated. RSDP and FACS are 321209746Sjkim * special-cased elsewhere. 322167802Sjkim * 323284460Sjkim * Note: Any tables added here should be duplicated within AcpiSupportedTables 324284460Sjkim * in the file common/ahtable.c 325284460Sjkim * 326167802Sjkim ******************************************************************************/ 327167802Sjkim 328284460Sjkimconst ACPI_DMTABLE_DATA AcpiDmTableData[] = 329167802Sjkim{ 330284460Sjkim {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf}, 331284460Sjkim {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert}, 332284460Sjkim {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt, NULL, NULL, TemplateBgrt}, 333284460Sjkim {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot}, 334284460Sjkim {ACPI_SIG_CPEP, NULL, AcpiDmDumpCpep, DtCompileCpep, TemplateCpep}, 335284460Sjkim {ACPI_SIG_CSRT, NULL, AcpiDmDumpCsrt, DtCompileCsrt, TemplateCsrt}, 336284460Sjkim {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2, AcpiDmDumpDbg2, DtCompileDbg2, TemplateDbg2}, 337284460Sjkim {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp, NULL, NULL, TemplateDbgp}, 338284460Sjkim {ACPI_SIG_DMAR, NULL, AcpiDmDumpDmar, DtCompileDmar, TemplateDmar}, 339284460Sjkim {ACPI_SIG_DRTM, NULL, AcpiDmDumpDrtm, DtCompileDrtm, TemplateDrtm}, 340284460Sjkim {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt, NULL, NULL, TemplateEcdt}, 341284460Sjkim {ACPI_SIG_EINJ, NULL, AcpiDmDumpEinj, DtCompileEinj, TemplateEinj}, 342284460Sjkim {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst}, 343284460Sjkim {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt}, 344284460Sjkim {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt}, 345284460Sjkim {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt}, 346284460Sjkim {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest}, 347284460Sjkim {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet}, 348284460Sjkim {ACPI_SIG_IORT, NULL, AcpiDmDumpIort, DtCompileIort, TemplateIort}, 349284460Sjkim {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs}, 350284460Sjkim {ACPI_SIG_LPIT, NULL, AcpiDmDumpLpit, DtCompileLpit, TemplateLpit}, 351284460Sjkim {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt}, 352284460Sjkim {ACPI_SIG_MCFG, NULL, AcpiDmDumpMcfg, DtCompileMcfg, TemplateMcfg}, 353284460Sjkim {ACPI_SIG_MCHI, AcpiDmTableInfoMchi, NULL, NULL, TemplateMchi}, 354284460Sjkim {ACPI_SIG_MPST, AcpiDmTableInfoMpst, AcpiDmDumpMpst, DtCompileMpst, TemplateMpst}, 355284460Sjkim {ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, DtCompileMsct, TemplateMsct}, 356284460Sjkim {ACPI_SIG_MSDM, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateMsdm}, 357284460Sjkim {ACPI_SIG_MTMR, NULL, AcpiDmDumpMtmr, DtCompileMtmr, TemplateMtmr}, 358284460Sjkim {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit}, 359284460Sjkim {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct}, 360284460Sjkim {ACPI_SIG_PMTT, NULL, AcpiDmDumpPmtt, DtCompilePmtt, TemplatePmtt}, 361284460Sjkim {ACPI_SIG_RSDT, NULL, AcpiDmDumpRsdt, DtCompileRsdt, TemplateRsdt}, 362284460Sjkim {ACPI_SIG_S3PT, NULL, NULL, NULL, TemplateS3pt}, 363284460Sjkim {ACPI_SIG_SBST, AcpiDmTableInfoSbst, NULL, NULL, TemplateSbst}, 364284460Sjkim {ACPI_SIG_SLIC, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateSlic}, 365284460Sjkim {ACPI_SIG_SLIT, NULL, AcpiDmDumpSlit, DtCompileSlit, TemplateSlit}, 366284460Sjkim {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr, NULL, NULL, TemplateSpcr}, 367284460Sjkim {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi, NULL, NULL, TemplateSpmi}, 368284460Sjkim {ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, DtCompileSrat, TemplateSrat}, 369284460Sjkim {ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao}, 370306536Sjkim {ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa}, 371284460Sjkim {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, NULL, NULL, TemplateTpm2}, 372284460Sjkim {ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, DtCompileUefi, TemplateUefi}, 373284460Sjkim {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc, AcpiDmDumpVrtc, DtCompileVrtc, TemplateVrtc}, 374284460Sjkim {ACPI_SIG_WAET, AcpiDmTableInfoWaet, NULL, NULL, TemplateWaet}, 375284460Sjkim {ACPI_SIG_WDAT, NULL, AcpiDmDumpWdat, DtCompileWdat, TemplateWdat}, 376284460Sjkim {ACPI_SIG_WDDT, AcpiDmTableInfoWddt, NULL, NULL, TemplateWddt}, 377284460Sjkim {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt, NULL, NULL, TemplateWdrt}, 378284460Sjkim {ACPI_SIG_WPBT, NULL, AcpiDmDumpWpbt, DtCompileWpbt, TemplateWpbt}, 379284460Sjkim {ACPI_SIG_XENV, AcpiDmTableInfoXenv, NULL, NULL, TemplateXenv}, 380284460Sjkim {ACPI_SIG_XSDT, NULL, AcpiDmDumpXsdt, DtCompileXsdt, TemplateXsdt}, 381284460Sjkim {NULL, NULL, NULL, NULL, NULL} 382167802Sjkim}; 383167802Sjkim 384167802Sjkim 385167802Sjkim/******************************************************************************* 386167802Sjkim * 387209746Sjkim * FUNCTION: AcpiDmGenerateChecksum 388167802Sjkim * 389209746Sjkim * PARAMETERS: Table - Pointer to table to be checksummed 390209746Sjkim * Length - Length of the table 391209746Sjkim * OriginalChecksum - Value of the checksum field 392167802Sjkim * 393167802Sjkim * RETURN: 8 bit checksum of buffer 394167802Sjkim * 395167802Sjkim * DESCRIPTION: Computes an 8 bit checksum of the table. 396167802Sjkim * 397167802Sjkim ******************************************************************************/ 398167802Sjkim 399167802SjkimUINT8 400209746SjkimAcpiDmGenerateChecksum ( 401209746Sjkim void *Table, 402209746Sjkim UINT32 Length, 403209746Sjkim UINT8 OriginalChecksum) 404167802Sjkim{ 405167802Sjkim UINT8 Checksum; 406167802Sjkim 407167802Sjkim 408167802Sjkim /* Sum the entire table as-is */ 409167802Sjkim 410209746Sjkim Checksum = AcpiTbChecksum ((UINT8 *) Table, Length); 411167802Sjkim 412167802Sjkim /* Subtract off the existing checksum value in the table */ 413167802Sjkim 414209746Sjkim Checksum = (UINT8) (Checksum - OriginalChecksum); 415167802Sjkim 416167802Sjkim /* Compute the final checksum */ 417167802Sjkim 418167802Sjkim Checksum = (UINT8) (0 - Checksum); 419167802Sjkim return (Checksum); 420167802Sjkim} 421167802Sjkim 422167802Sjkim 423167802Sjkim/******************************************************************************* 424167802Sjkim * 425167802Sjkim * FUNCTION: AcpiDmGetTableData 426167802Sjkim * 427167802Sjkim * PARAMETERS: Signature - ACPI signature (4 chars) to match 428167802Sjkim * 429167802Sjkim * RETURN: Pointer to a valid ACPI_DMTABLE_DATA. Null if no match found. 430167802Sjkim * 431167802Sjkim * DESCRIPTION: Find a match in the global table of supported ACPI tables 432167802Sjkim * 433167802Sjkim ******************************************************************************/ 434167802Sjkim 435284460Sjkimconst ACPI_DMTABLE_DATA * 436167802SjkimAcpiDmGetTableData ( 437167802Sjkim char *Signature) 438167802Sjkim{ 439284460Sjkim const ACPI_DMTABLE_DATA *Info; 440167802Sjkim 441167802Sjkim 442284460Sjkim for (Info = AcpiDmTableData; Info->Signature; Info++) 443167802Sjkim { 444284460Sjkim if (ACPI_COMPARE_NAME (Signature, Info->Signature)) 445167802Sjkim { 446284460Sjkim return (Info); 447167802Sjkim } 448167802Sjkim } 449167802Sjkim 450167802Sjkim return (NULL); 451167802Sjkim} 452167802Sjkim 453167802Sjkim 454167802Sjkim/******************************************************************************* 455167802Sjkim * 456167802Sjkim * FUNCTION: AcpiDmDumpDataTable 457167802Sjkim * 458167802Sjkim * PARAMETERS: Table - An ACPI table 459167802Sjkim * 460167802Sjkim * RETURN: None. 461167802Sjkim * 462167802Sjkim * DESCRIPTION: Format the contents of an ACPI data table (any table other 463167802Sjkim * than an SSDT or DSDT that does not contain executable AML code) 464167802Sjkim * 465167802Sjkim ******************************************************************************/ 466167802Sjkim 467167802Sjkimvoid 468167802SjkimAcpiDmDumpDataTable ( 469167802Sjkim ACPI_TABLE_HEADER *Table) 470167802Sjkim{ 471193529Sjkim ACPI_STATUS Status; 472284460Sjkim const ACPI_DMTABLE_DATA *TableData; 473167802Sjkim UINT32 Length; 474167802Sjkim 475167802Sjkim 476167802Sjkim /* Ignore tables that contain AML */ 477167802Sjkim 478167802Sjkim if (AcpiUtIsAmlTable (Table)) 479167802Sjkim { 480241973Sjkim if (Gbl_VerboseTemplates) 481241973Sjkim { 482241973Sjkim /* Dump the raw table data */ 483241973Sjkim 484241973Sjkim Length = Table->Length; 485241973Sjkim 486241973Sjkim AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n", 487241973Sjkim ACPI_RAW_TABLE_DATA_HEADER, Length, Length); 488241973Sjkim AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), 489241973Sjkim Length, DB_BYTE_DISPLAY, 0); 490241973Sjkim AcpiOsPrintf (" */\n"); 491241973Sjkim } 492167802Sjkim return; 493167802Sjkim } 494167802Sjkim 495167802Sjkim /* 496167802Sjkim * Handle tables that don't use the common ACPI table header structure. 497228110Sjkim * Currently, these are the FACS, RSDP, and S3PT. 498167802Sjkim */ 499167802Sjkim if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_FACS)) 500167802Sjkim { 501167802Sjkim Length = Table->Length; 502306536Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs); 503306536Sjkim if (ACPI_FAILURE (Status)) 504306536Sjkim { 505306536Sjkim return; 506306536Sjkim } 507167802Sjkim } 508254745Sjkim else if (ACPI_VALIDATE_RSDP_SIG (Table->Signature)) 509167802Sjkim { 510167802Sjkim Length = AcpiDmDumpRsdp (Table); 511167802Sjkim } 512228110Sjkim else if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_S3PT)) 513228110Sjkim { 514228110Sjkim Length = AcpiDmDumpS3pt (Table); 515228110Sjkim } 516167802Sjkim else 517167802Sjkim { 518167802Sjkim /* 519167802Sjkim * All other tables must use the common ACPI table header, dump it now 520167802Sjkim */ 521167802Sjkim Length = Table->Length; 522193529Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader); 523193529Sjkim if (ACPI_FAILURE (Status)) 524193529Sjkim { 525193529Sjkim return; 526193529Sjkim } 527167802Sjkim AcpiOsPrintf ("\n"); 528167802Sjkim 529167802Sjkim /* Match signature and dispatch appropriately */ 530167802Sjkim 531167802Sjkim TableData = AcpiDmGetTableData (Table->Signature); 532167802Sjkim if (!TableData) 533167802Sjkim { 534306536Sjkim if (!strncmp (Table->Signature, "OEM", 3)) 535167802Sjkim { 536167802Sjkim AcpiOsPrintf ("\n**** OEM-defined ACPI table [%4.4s], unknown contents\n\n", 537167802Sjkim Table->Signature); 538167802Sjkim } 539167802Sjkim else 540167802Sjkim { 541281687Sjkim AcpiOsPrintf ("\n**** Unknown ACPI table signature [%4.4s]\n\n", 542167802Sjkim Table->Signature); 543281687Sjkim 544281687Sjkim fprintf (stderr, "Unknown ACPI table signature [%4.4s], ", 545246849Sjkim Table->Signature); 546281687Sjkim 547281687Sjkim if (!AcpiGbl_ForceAmlDisassembly) 548281687Sjkim { 549281687Sjkim fprintf (stderr, "decoding ACPI table header only\n"); 550281687Sjkim } 551281687Sjkim else 552281687Sjkim { 553281687Sjkim fprintf (stderr, "assuming table contains valid AML code\n"); 554281687Sjkim } 555167802Sjkim } 556167802Sjkim } 557167802Sjkim else if (TableData->TableHandler) 558167802Sjkim { 559167802Sjkim /* Complex table, has a handler */ 560167802Sjkim 561167802Sjkim TableData->TableHandler (Table); 562167802Sjkim } 563167802Sjkim else if (TableData->TableInfo) 564167802Sjkim { 565167802Sjkim /* Simple table, just walk the info table */ 566167802Sjkim 567306536Sjkim Status = AcpiDmDumpTable (Length, 0, Table, 0, TableData->TableInfo); 568306536Sjkim if (ACPI_FAILURE (Status)) 569306536Sjkim { 570306536Sjkim return; 571306536Sjkim } 572167802Sjkim } 573167802Sjkim } 574167802Sjkim 575209746Sjkim if (!Gbl_DoTemplates || Gbl_VerboseTemplates) 576209746Sjkim { 577209746Sjkim /* Dump the raw table data */ 578167802Sjkim 579217365Sjkim AcpiOsPrintf ("\n%s: Length %d (0x%X)\n\n", 580217365Sjkim ACPI_RAW_TABLE_DATA_HEADER, Length, Length); 581241973Sjkim AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), 582241973Sjkim Length, DB_BYTE_DISPLAY, 0); 583209746Sjkim } 584167802Sjkim} 585167802Sjkim 586167802Sjkim 587167802Sjkim/******************************************************************************* 588167802Sjkim * 589167802Sjkim * FUNCTION: AcpiDmLineHeader 590167802Sjkim * 591167802Sjkim * PARAMETERS: Offset - Current byte offset, from table start 592167802Sjkim * ByteLength - Length of the field in bytes, 0 for flags 593167802Sjkim * Name - Name of this field 594167802Sjkim * 595167802Sjkim * RETURN: None 596167802Sjkim * 597167802Sjkim * DESCRIPTION: Utility routines for formatting output lines. Displays the 598167802Sjkim * current table offset in hex and decimal, the field length, 599167802Sjkim * and the field name. 600167802Sjkim * 601167802Sjkim ******************************************************************************/ 602167802Sjkim 603167802Sjkimvoid 604167802SjkimAcpiDmLineHeader ( 605167802Sjkim UINT32 Offset, 606167802Sjkim UINT32 ByteLength, 607167802Sjkim char *Name) 608167802Sjkim{ 609167802Sjkim 610219707Sjkim /* Allow a null name for fields that span multiple lines (large buffers) */ 611219707Sjkim 612219707Sjkim if (!Name) 613219707Sjkim { 614219707Sjkim Name = ""; 615219707Sjkim } 616219707Sjkim 617209746Sjkim if (Gbl_DoTemplates && !Gbl_VerboseTemplates) /* Terse template */ 618167802Sjkim { 619209746Sjkim if (ByteLength) 620209746Sjkim { 621219707Sjkim AcpiOsPrintf ("[%.4d] %34s : ", ByteLength, Name); 622209746Sjkim } 623209746Sjkim else 624209746Sjkim { 625220663Sjkim if (*Name) 626220663Sjkim { 627220663Sjkim AcpiOsPrintf ("%41s : ", Name); 628220663Sjkim } 629220663Sjkim else 630220663Sjkim { 631220663Sjkim AcpiOsPrintf ("%41s ", Name); 632220663Sjkim } 633209746Sjkim } 634167802Sjkim } 635209746Sjkim else /* Normal disassembler or verbose template */ 636167802Sjkim { 637209746Sjkim if (ByteLength) 638209746Sjkim { 639219707Sjkim AcpiOsPrintf ("[%3.3Xh %4.4d% 4d] %28s : ", 640209746Sjkim Offset, Offset, ByteLength, Name); 641209746Sjkim } 642209746Sjkim else 643209746Sjkim { 644220663Sjkim if (*Name) 645220663Sjkim { 646220663Sjkim AcpiOsPrintf ("%44s : ", Name); 647220663Sjkim } 648220663Sjkim else 649220663Sjkim { 650220663Sjkim AcpiOsPrintf ("%44s ", Name); 651220663Sjkim } 652209746Sjkim } 653167802Sjkim } 654167802Sjkim} 655167802Sjkim 656167802Sjkimvoid 657167802SjkimAcpiDmLineHeader2 ( 658167802Sjkim UINT32 Offset, 659167802Sjkim UINT32 ByteLength, 660167802Sjkim char *Name, 661167802Sjkim UINT32 Value) 662167802Sjkim{ 663167802Sjkim 664209746Sjkim if (Gbl_DoTemplates && !Gbl_VerboseTemplates) /* Terse template */ 665167802Sjkim { 666209746Sjkim if (ByteLength) 667209746Sjkim { 668220663Sjkim AcpiOsPrintf ("[%.4d] %30s %3d : ", 669209746Sjkim ByteLength, Name, Value); 670209746Sjkim } 671209746Sjkim else 672209746Sjkim { 673209746Sjkim AcpiOsPrintf ("%36s % 3d : ", 674209746Sjkim Name, Value); 675209746Sjkim } 676167802Sjkim } 677209746Sjkim else /* Normal disassembler or verbose template */ 678167802Sjkim { 679209746Sjkim if (ByteLength) 680209746Sjkim { 681220663Sjkim AcpiOsPrintf ("[%3.3Xh %4.4d %3d] %24s %3d : ", 682209746Sjkim Offset, Offset, ByteLength, Name, Value); 683209746Sjkim } 684209746Sjkim else 685209746Sjkim { 686220663Sjkim AcpiOsPrintf ("[%3.3Xh %4.4d ] %24s %3d : ", 687209746Sjkim Offset, Offset, Name, Value); 688209746Sjkim } 689167802Sjkim } 690167802Sjkim} 691167802Sjkim 692167802Sjkim 693167802Sjkim/******************************************************************************* 694167802Sjkim * 695167802Sjkim * FUNCTION: AcpiDmDumpTable 696167802Sjkim * 697167802Sjkim * PARAMETERS: TableLength - Length of the entire ACPI table 698167802Sjkim * TableOffset - Starting offset within the table for this 699167802Sjkim * sub-descriptor (0 if main table) 700167802Sjkim * Table - The ACPI table 701193529Sjkim * SubtableLength - Length of this sub-descriptor 702167802Sjkim * Info - Info table for this ACPI table 703167802Sjkim * 704306536Sjkim * RETURN: Status 705167802Sjkim * 706167802Sjkim * DESCRIPTION: Display ACPI table contents by walking the Info table. 707167802Sjkim * 708209746Sjkim * Note: This function must remain in sync with DtGetFieldLength. 709209746Sjkim * 710167802Sjkim ******************************************************************************/ 711167802Sjkim 712193529SjkimACPI_STATUS 713167802SjkimAcpiDmDumpTable ( 714167802Sjkim UINT32 TableLength, 715167802Sjkim UINT32 TableOffset, 716167802Sjkim void *Table, 717167802Sjkim UINT32 SubtableLength, 718167802Sjkim ACPI_DMTABLE_INFO *Info) 719167802Sjkim{ 720167802Sjkim UINT8 *Target; 721167802Sjkim UINT32 CurrentOffset; 722167802Sjkim UINT32 ByteLength; 723167802Sjkim UINT8 Temp8; 724167802Sjkim UINT16 Temp16; 725281687Sjkim UINT32 Temp32; 726281075Sdim UINT64 Value; 727284460Sjkim const AH_TABLE *TableData; 728197104Sjkim const char *Name; 729193529Sjkim BOOLEAN LastOutputBlankLine = FALSE; 730306536Sjkim ACPI_STATUS Status; 731197104Sjkim char RepairedName[8]; 732167802Sjkim 733167802Sjkim 734167802Sjkim if (!Info) 735167802Sjkim { 736167802Sjkim AcpiOsPrintf ("Display not implemented\n"); 737193529Sjkim return (AE_NOT_IMPLEMENTED); 738167802Sjkim } 739167802Sjkim 740167802Sjkim /* Walk entire Info table; Null name terminates */ 741167802Sjkim 742167802Sjkim for (; Info->Name; Info++) 743167802Sjkim { 744167802Sjkim /* 745167802Sjkim * Target points to the field within the ACPI Table. CurrentOffset is 746167802Sjkim * the offset of the field from the start of the main table. 747167802Sjkim */ 748167802Sjkim Target = ACPI_ADD_PTR (UINT8, Table, Info->Offset); 749167802Sjkim CurrentOffset = TableOffset + Info->Offset; 750167802Sjkim 751284460Sjkim /* Check for beyond subtable end or (worse) beyond EOT */ 752167802Sjkim 753284460Sjkim if (SubtableLength && (Info->Offset >= SubtableLength)) 754167802Sjkim { 755281687Sjkim AcpiOsPrintf ( 756284460Sjkim "/**** ACPI subtable terminates early - " 757284460Sjkim "may be older version (dump table) */\n"); 758284460Sjkim 759284460Sjkim /* Move on to next subtable */ 760284460Sjkim 761284460Sjkim return (AE_OK); 762284460Sjkim } 763284460Sjkim 764284460Sjkim if (CurrentOffset >= TableLength) 765284460Sjkim { 766284460Sjkim AcpiOsPrintf ( 767284460Sjkim "/**** ACPI table terminates " 768284460Sjkim "in the middle of a data structure! (dump table) */\n"); 769193529Sjkim return (AE_BAD_DATA); 770167802Sjkim } 771167802Sjkim 772167802Sjkim /* Generate the byte length for this field */ 773167802Sjkim 774167802Sjkim switch (Info->Opcode) 775167802Sjkim { 776167802Sjkim case ACPI_DMT_UINT8: 777167802Sjkim case ACPI_DMT_CHKSUM: 778167802Sjkim case ACPI_DMT_SPACEID: 779216471Sjkim case ACPI_DMT_ACCWIDTH: 780197104Sjkim case ACPI_DMT_IVRS: 781281075Sdim case ACPI_DMT_GTDT: 782167802Sjkim case ACPI_DMT_MADT: 783281075Sdim case ACPI_DMT_PCCT: 784228110Sjkim case ACPI_DMT_PMTT: 785167802Sjkim case ACPI_DMT_SRAT: 786193529Sjkim case ACPI_DMT_ASF: 787193529Sjkim case ACPI_DMT_HESTNTYP: 788193529Sjkim case ACPI_DMT_FADTPM: 789209746Sjkim case ACPI_DMT_EINJACT: 790209746Sjkim case ACPI_DMT_EINJINST: 791209746Sjkim case ACPI_DMT_ERSTACT: 792209746Sjkim case ACPI_DMT_ERSTINST: 793281075Sdim case ACPI_DMT_DMAR_SCOPE: 794250838Sjkim 795167802Sjkim ByteLength = 1; 796167802Sjkim break; 797250838Sjkim 798167802Sjkim case ACPI_DMT_UINT16: 799167802Sjkim case ACPI_DMT_DMAR: 800193529Sjkim case ACPI_DMT_HEST: 801284460Sjkim case ACPI_DMT_NFIT: 802250838Sjkim 803167802Sjkim ByteLength = 2; 804167802Sjkim break; 805250838Sjkim 806167802Sjkim case ACPI_DMT_UINT24: 807250838Sjkim 808167802Sjkim ByteLength = 3; 809167802Sjkim break; 810250838Sjkim 811167802Sjkim case ACPI_DMT_UINT32: 812167802Sjkim case ACPI_DMT_NAME4: 813167802Sjkim case ACPI_DMT_SIG: 814281075Sdim case ACPI_DMT_LPIT: 815250838Sjkim 816167802Sjkim ByteLength = 4; 817167802Sjkim break; 818250838Sjkim 819228110Sjkim case ACPI_DMT_UINT40: 820250838Sjkim 821228110Sjkim ByteLength = 5; 822228110Sjkim break; 823250838Sjkim 824228110Sjkim case ACPI_DMT_UINT48: 825167802Sjkim case ACPI_DMT_NAME6: 826250838Sjkim 827167802Sjkim ByteLength = 6; 828167802Sjkim break; 829250838Sjkim 830167802Sjkim case ACPI_DMT_UINT56: 831218590Sjkim case ACPI_DMT_BUF7: 832250838Sjkim 833167802Sjkim ByteLength = 7; 834167802Sjkim break; 835250838Sjkim 836167802Sjkim case ACPI_DMT_UINT64: 837167802Sjkim case ACPI_DMT_NAME8: 838250838Sjkim 839167802Sjkim ByteLength = 8; 840167802Sjkim break; 841250838Sjkim 842252279Sjkim case ACPI_DMT_BUF10: 843252279Sjkim 844252279Sjkim ByteLength = 10; 845252279Sjkim break; 846252279Sjkim 847197104Sjkim case ACPI_DMT_BUF16: 848217365Sjkim case ACPI_DMT_UUID: 849250838Sjkim 850197104Sjkim ByteLength = 16; 851197104Sjkim break; 852250838Sjkim 853219707Sjkim case ACPI_DMT_BUF128: 854250838Sjkim 855219707Sjkim ByteLength = 128; 856219707Sjkim break; 857250838Sjkim 858284460Sjkim case ACPI_DMT_UNICODE: 859281687Sjkim case ACPI_DMT_BUFFER: 860281687Sjkim case ACPI_DMT_RAW_BUFFER: 861281687Sjkim 862281687Sjkim ByteLength = SubtableLength; 863281687Sjkim break; 864281687Sjkim 865167802Sjkim case ACPI_DMT_STRING: 866250838Sjkim 867306536Sjkim ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1; 868167802Sjkim break; 869250838Sjkim 870167802Sjkim case ACPI_DMT_GAS: 871250838Sjkim 872193529Sjkim if (!LastOutputBlankLine) 873193529Sjkim { 874193529Sjkim AcpiOsPrintf ("\n"); 875193529Sjkim LastOutputBlankLine = TRUE; 876193529Sjkim } 877306536Sjkim 878167802Sjkim ByteLength = sizeof (ACPI_GENERIC_ADDRESS); 879167802Sjkim break; 880250838Sjkim 881193529Sjkim case ACPI_DMT_HESTNTFY: 882250838Sjkim 883193529Sjkim if (!LastOutputBlankLine) 884193529Sjkim { 885193529Sjkim AcpiOsPrintf ("\n"); 886193529Sjkim LastOutputBlankLine = TRUE; 887193529Sjkim } 888306536Sjkim 889193529Sjkim ByteLength = sizeof (ACPI_HEST_NOTIFY); 890193529Sjkim break; 891250838Sjkim 892284460Sjkim case ACPI_DMT_IORTMEM: 893284460Sjkim 894284460Sjkim if (!LastOutputBlankLine) 895284460Sjkim { 896284460Sjkim LastOutputBlankLine = FALSE; 897284460Sjkim } 898306536Sjkim 899284460Sjkim ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS); 900284460Sjkim break; 901284460Sjkim 902167802Sjkim default: 903250838Sjkim 904167802Sjkim ByteLength = 0; 905167802Sjkim break; 906167802Sjkim } 907167802Sjkim 908284460Sjkim /* Check if we are beyond a subtable, or (worse) beyond EOT */ 909284460Sjkim 910193529Sjkim if (CurrentOffset + ByteLength > TableLength) 911193529Sjkim { 912284460Sjkim if (SubtableLength) 913284460Sjkim { 914284460Sjkim AcpiOsPrintf ( 915284460Sjkim "/**** ACPI subtable terminates early - " 916284460Sjkim "may be older version (dump table) */\n"); 917284460Sjkim 918284460Sjkim /* Move on to next subtable */ 919284460Sjkim 920284460Sjkim return (AE_OK); 921284460Sjkim } 922284460Sjkim 923281687Sjkim AcpiOsPrintf ( 924284460Sjkim "/**** ACPI table terminates " 925284460Sjkim "in the middle of a data structure! */\n"); 926193529Sjkim return (AE_BAD_DATA); 927193529Sjkim } 928193529Sjkim 929228110Sjkim if (Info->Opcode == ACPI_DMT_EXTRA_TEXT) 930228110Sjkim { 931228110Sjkim AcpiOsPrintf ("%s", Info->Name); 932228110Sjkim continue; 933228110Sjkim } 934228110Sjkim 935167802Sjkim /* Start a new line and decode the opcode */ 936167802Sjkim 937167802Sjkim AcpiDmLineHeader (CurrentOffset, ByteLength, Info->Name); 938167802Sjkim 939167802Sjkim switch (Info->Opcode) 940167802Sjkim { 941167802Sjkim /* Single-bit Flag fields. Note: Opcode is the bit position */ 942167802Sjkim 943167802Sjkim case ACPI_DMT_FLAG0: 944167802Sjkim case ACPI_DMT_FLAG1: 945167802Sjkim case ACPI_DMT_FLAG2: 946167802Sjkim case ACPI_DMT_FLAG3: 947167802Sjkim case ACPI_DMT_FLAG4: 948167802Sjkim case ACPI_DMT_FLAG5: 949167802Sjkim case ACPI_DMT_FLAG6: 950167802Sjkim case ACPI_DMT_FLAG7: 951167802Sjkim 952167802Sjkim AcpiOsPrintf ("%1.1X\n", (*Target >> Info->Opcode) & 0x01); 953167802Sjkim break; 954167802Sjkim 955167802Sjkim /* 2-bit Flag fields */ 956167802Sjkim 957167802Sjkim case ACPI_DMT_FLAGS0: 958167802Sjkim 959167802Sjkim AcpiOsPrintf ("%1.1X\n", *Target & 0x03); 960167802Sjkim break; 961167802Sjkim 962228110Sjkim case ACPI_DMT_FLAGS1: 963228110Sjkim 964228110Sjkim AcpiOsPrintf ("%1.1X\n", (*Target >> 1) & 0x03); 965228110Sjkim break; 966228110Sjkim 967167802Sjkim case ACPI_DMT_FLAGS2: 968167802Sjkim 969167802Sjkim AcpiOsPrintf ("%1.1X\n", (*Target >> 2) & 0x03); 970167802Sjkim break; 971167802Sjkim 972228110Sjkim case ACPI_DMT_FLAGS4: 973167802Sjkim 974228110Sjkim AcpiOsPrintf ("%1.1X\n", (*Target >> 4) & 0x03); 975167802Sjkim break; 976167802Sjkim 977228110Sjkim /* Integer Data Types */ 978228110Sjkim 979228110Sjkim case ACPI_DMT_UINT8: 980167802Sjkim case ACPI_DMT_UINT16: 981167802Sjkim case ACPI_DMT_UINT24: 982167802Sjkim case ACPI_DMT_UINT32: 983228110Sjkim case ACPI_DMT_UINT40: 984228110Sjkim case ACPI_DMT_UINT48: 985167802Sjkim case ACPI_DMT_UINT56: 986228110Sjkim case ACPI_DMT_UINT64: 987228110Sjkim /* 988228110Sjkim * Dump bytes - high byte first, low byte last. 989228110Sjkim * Note: All ACPI tables are little-endian. 990228110Sjkim */ 991281075Sdim Value = 0; 992228110Sjkim for (Temp8 = (UINT8) ByteLength; Temp8 > 0; Temp8--) 993193529Sjkim { 994228110Sjkim AcpiOsPrintf ("%2.2X", Target[Temp8 - 1]); 995281075Sdim Value |= Target[Temp8 - 1]; 996281075Sdim Value <<= 8; 997193529Sjkim } 998281075Sdim 999281075Sdim if (!Value && (Info->Flags & DT_DESCRIBES_OPTIONAL)) 1000281075Sdim { 1001281075Sdim AcpiOsPrintf (" [Optional field not present]"); 1002281075Sdim } 1003281075Sdim 1004193529Sjkim AcpiOsPrintf ("\n"); 1005167802Sjkim break; 1006167802Sjkim 1007218590Sjkim case ACPI_DMT_BUF7: 1008252279Sjkim case ACPI_DMT_BUF10: 1009197104Sjkim case ACPI_DMT_BUF16: 1010219707Sjkim case ACPI_DMT_BUF128: 1011218590Sjkim /* 1012218590Sjkim * Buffer: Size depends on the opcode and was set above. 1013218590Sjkim * Each hex byte is separated with a space. 1014220663Sjkim * Multiple lines are separated by line continuation char. 1015218590Sjkim */ 1016219707Sjkim for (Temp16 = 0; Temp16 < ByteLength; Temp16++) 1017197104Sjkim { 1018219707Sjkim AcpiOsPrintf ("%2.2X", Target[Temp16]); 1019219707Sjkim if ((UINT32) (Temp16 + 1) < ByteLength) 1020209746Sjkim { 1021219707Sjkim if ((Temp16 > 0) && (!((Temp16+1) % 16))) 1022219707Sjkim { 1023220663Sjkim AcpiOsPrintf (" \\\n"); /* Line continuation */ 1024219707Sjkim AcpiDmLineHeader (0, 0, NULL); 1025219707Sjkim } 1026219707Sjkim else 1027219707Sjkim { 1028219707Sjkim AcpiOsPrintf (" "); 1029219707Sjkim } 1030209746Sjkim } 1031197104Sjkim } 1032306536Sjkim 1033197104Sjkim AcpiOsPrintf ("\n"); 1034197104Sjkim break; 1035197104Sjkim 1036217365Sjkim case ACPI_DMT_UUID: 1037217365Sjkim 1038217365Sjkim /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */ 1039217365Sjkim 1040217365Sjkim (void) AuConvertUuidToString ((char *) Target, MsgBuffer); 1041217365Sjkim 1042217365Sjkim AcpiOsPrintf ("%s\n", MsgBuffer); 1043217365Sjkim break; 1044217365Sjkim 1045167802Sjkim case ACPI_DMT_STRING: 1046167802Sjkim 1047197104Sjkim AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target)); 1048167802Sjkim break; 1049167802Sjkim 1050167802Sjkim /* Fixed length ASCII name fields */ 1051167802Sjkim 1052167802Sjkim case ACPI_DMT_SIG: 1053167802Sjkim 1054306536Sjkim AcpiUtCheckAndRepairAscii (Target, RepairedName, 4); 1055197104Sjkim AcpiOsPrintf ("\"%.4s\" ", RepairedName); 1056306536Sjkim 1057284460Sjkim TableData = AcpiAhGetTableInfo (ACPI_CAST_PTR (char, Target)); 1058167802Sjkim if (TableData) 1059167802Sjkim { 1060284460Sjkim AcpiOsPrintf (STRING_FORMAT, TableData->Description); 1061167802Sjkim } 1062220663Sjkim else 1063220663Sjkim { 1064220663Sjkim AcpiOsPrintf ("\n"); 1065220663Sjkim } 1066167802Sjkim break; 1067167802Sjkim 1068167802Sjkim case ACPI_DMT_NAME4: 1069167802Sjkim 1070306536Sjkim AcpiUtCheckAndRepairAscii (Target, RepairedName, 4); 1071197104Sjkim AcpiOsPrintf ("\"%.4s\"\n", RepairedName); 1072167802Sjkim break; 1073167802Sjkim 1074167802Sjkim case ACPI_DMT_NAME6: 1075167802Sjkim 1076306536Sjkim AcpiUtCheckAndRepairAscii (Target, RepairedName, 6); 1077197104Sjkim AcpiOsPrintf ("\"%.6s\"\n", RepairedName); 1078167802Sjkim break; 1079167802Sjkim 1080167802Sjkim case ACPI_DMT_NAME8: 1081167802Sjkim 1082306536Sjkim AcpiUtCheckAndRepairAscii (Target, RepairedName, 8); 1083197104Sjkim AcpiOsPrintf ("\"%.8s\"\n", RepairedName); 1084167802Sjkim break; 1085167802Sjkim 1086167802Sjkim /* Special Data Types */ 1087167802Sjkim 1088167802Sjkim case ACPI_DMT_CHKSUM: 1089167802Sjkim 1090167802Sjkim /* Checksum, display and validate */ 1091167802Sjkim 1092167802Sjkim AcpiOsPrintf ("%2.2X", *Target); 1093209746Sjkim Temp8 = AcpiDmGenerateChecksum (Table, 1094281687Sjkim ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length, 1095281687Sjkim ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum); 1096281687Sjkim 1097167802Sjkim if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum) 1098167802Sjkim { 1099167802Sjkim AcpiOsPrintf ( 1100167802Sjkim " /* Incorrect checksum, should be %2.2X */", Temp8); 1101167802Sjkim } 1102306536Sjkim 1103167802Sjkim AcpiOsPrintf ("\n"); 1104167802Sjkim break; 1105167802Sjkim 1106167802Sjkim case ACPI_DMT_SPACEID: 1107167802Sjkim 1108167802Sjkim /* Address Space ID */ 1109167802Sjkim 1110220663Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiUtGetRegionName (*Target)); 1111167802Sjkim break; 1112167802Sjkim 1113216471Sjkim case ACPI_DMT_ACCWIDTH: 1114216471Sjkim 1115216471Sjkim /* Encoded Access Width */ 1116216471Sjkim 1117216471Sjkim Temp8 = *Target; 1118216471Sjkim if (Temp8 > ACPI_GAS_WIDTH_RESERVED) 1119216471Sjkim { 1120216471Sjkim Temp8 = ACPI_GAS_WIDTH_RESERVED; 1121216471Sjkim } 1122216471Sjkim 1123281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGasAccessWidth[Temp8]); 1124216471Sjkim break; 1125216471Sjkim 1126167802Sjkim case ACPI_DMT_GAS: 1127167802Sjkim 1128167802Sjkim /* Generic Address Structure */ 1129167802Sjkim 1130220663Sjkim AcpiOsPrintf (STRING_FORMAT, "Generic Address Structure"); 1131306536Sjkim Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target, 1132197104Sjkim sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas); 1133306536Sjkim if (ACPI_FAILURE (Status)) 1134306536Sjkim { 1135306536Sjkim return (Status); 1136306536Sjkim } 1137306536Sjkim 1138193529Sjkim AcpiOsPrintf ("\n"); 1139193529Sjkim LastOutputBlankLine = TRUE; 1140167802Sjkim break; 1141167802Sjkim 1142193529Sjkim case ACPI_DMT_ASF: 1143193529Sjkim 1144193529Sjkim /* ASF subtable types */ 1145193529Sjkim 1146193529Sjkim Temp16 = (UINT16) ((*Target) & 0x7F); /* Top bit can be zero or one */ 1147193529Sjkim if (Temp16 > ACPI_ASF_TYPE_RESERVED) 1148193529Sjkim { 1149193529Sjkim Temp16 = ACPI_ASF_TYPE_RESERVED; 1150193529Sjkim } 1151193529Sjkim 1152220663Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAsfSubnames[Temp16]); 1153193529Sjkim break; 1154193529Sjkim 1155167802Sjkim case ACPI_DMT_DMAR: 1156167802Sjkim 1157167802Sjkim /* DMAR subtable types */ 1158167802Sjkim 1159193529Sjkim Temp16 = ACPI_GET16 (Target); 1160167802Sjkim if (Temp16 > ACPI_DMAR_TYPE_RESERVED) 1161167802Sjkim { 1162167802Sjkim Temp16 = ACPI_DMAR_TYPE_RESERVED; 1163167802Sjkim } 1164167802Sjkim 1165281687Sjkim AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), 1166281687Sjkim AcpiDmDmarSubnames[Temp16]); 1167167802Sjkim break; 1168167802Sjkim 1169281075Sdim case ACPI_DMT_DMAR_SCOPE: 1170281075Sdim 1171281075Sdim /* DMAR device scope types */ 1172281075Sdim 1173281075Sdim Temp8 = *Target; 1174281075Sdim if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED) 1175281075Sdim { 1176281075Sdim Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED; 1177281075Sdim } 1178281075Sdim 1179281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1180281687Sjkim AcpiDmDmarScope[Temp8]); 1181281075Sdim break; 1182281075Sdim 1183209746Sjkim case ACPI_DMT_EINJACT: 1184209746Sjkim 1185209746Sjkim /* EINJ Action types */ 1186209746Sjkim 1187209746Sjkim Temp8 = *Target; 1188209746Sjkim if (Temp8 > ACPI_EINJ_ACTION_RESERVED) 1189209746Sjkim { 1190209746Sjkim Temp8 = ACPI_EINJ_ACTION_RESERVED; 1191209746Sjkim } 1192209746Sjkim 1193281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1194281687Sjkim AcpiDmEinjActions[Temp8]); 1195209746Sjkim break; 1196209746Sjkim 1197209746Sjkim case ACPI_DMT_EINJINST: 1198209746Sjkim 1199209746Sjkim /* EINJ Instruction types */ 1200209746Sjkim 1201209746Sjkim Temp8 = *Target; 1202209746Sjkim if (Temp8 > ACPI_EINJ_INSTRUCTION_RESERVED) 1203209746Sjkim { 1204209746Sjkim Temp8 = ACPI_EINJ_INSTRUCTION_RESERVED; 1205209746Sjkim } 1206209746Sjkim 1207281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1208281687Sjkim AcpiDmEinjInstructions[Temp8]); 1209209746Sjkim break; 1210209746Sjkim 1211209746Sjkim case ACPI_DMT_ERSTACT: 1212209746Sjkim 1213209746Sjkim /* ERST Action types */ 1214209746Sjkim 1215209746Sjkim Temp8 = *Target; 1216209746Sjkim if (Temp8 > ACPI_ERST_ACTION_RESERVED) 1217209746Sjkim { 1218209746Sjkim Temp8 = ACPI_ERST_ACTION_RESERVED; 1219209746Sjkim } 1220209746Sjkim 1221281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1222281687Sjkim AcpiDmErstActions[Temp8]); 1223209746Sjkim break; 1224209746Sjkim 1225209746Sjkim case ACPI_DMT_ERSTINST: 1226209746Sjkim 1227209746Sjkim /* ERST Instruction types */ 1228209746Sjkim 1229209746Sjkim Temp8 = *Target; 1230209746Sjkim if (Temp8 > ACPI_ERST_INSTRUCTION_RESERVED) 1231209746Sjkim { 1232209746Sjkim Temp8 = ACPI_ERST_INSTRUCTION_RESERVED; 1233209746Sjkim } 1234209746Sjkim 1235281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1236281687Sjkim AcpiDmErstInstructions[Temp8]); 1237209746Sjkim break; 1238209746Sjkim 1239281075Sdim case ACPI_DMT_GTDT: 1240281075Sdim 1241281075Sdim /* GTDT subtable types */ 1242281075Sdim 1243281075Sdim Temp8 = *Target; 1244281075Sdim if (Temp8 > ACPI_GTDT_TYPE_RESERVED) 1245281075Sdim { 1246281075Sdim Temp8 = ACPI_GTDT_TYPE_RESERVED; 1247281075Sdim } 1248281075Sdim 1249281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1250281687Sjkim AcpiDmGtdtSubnames[Temp8]); 1251281075Sdim break; 1252281075Sdim 1253193529Sjkim case ACPI_DMT_HEST: 1254193529Sjkim 1255193529Sjkim /* HEST subtable types */ 1256193529Sjkim 1257193529Sjkim Temp16 = ACPI_GET16 (Target); 1258193529Sjkim if (Temp16 > ACPI_HEST_TYPE_RESERVED) 1259193529Sjkim { 1260193529Sjkim Temp16 = ACPI_HEST_TYPE_RESERVED; 1261193529Sjkim } 1262193529Sjkim 1263281687Sjkim AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), 1264281687Sjkim AcpiDmHestSubnames[Temp16]); 1265193529Sjkim break; 1266193529Sjkim 1267193529Sjkim case ACPI_DMT_HESTNTFY: 1268193529Sjkim 1269281687Sjkim AcpiOsPrintf (STRING_FORMAT, 1270281687Sjkim "Hardware Error Notification Structure"); 1271281687Sjkim 1272306536Sjkim Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target, 1273197104Sjkim sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify); 1274306536Sjkim if (ACPI_FAILURE (Status)) 1275306536Sjkim { 1276306536Sjkim return (Status); 1277306536Sjkim } 1278306536Sjkim 1279193529Sjkim AcpiOsPrintf ("\n"); 1280193529Sjkim LastOutputBlankLine = TRUE; 1281193529Sjkim break; 1282193529Sjkim 1283193529Sjkim case ACPI_DMT_HESTNTYP: 1284193529Sjkim 1285193529Sjkim /* HEST Notify types */ 1286193529Sjkim 1287193529Sjkim Temp8 = *Target; 1288193529Sjkim if (Temp8 > ACPI_HEST_NOTIFY_RESERVED) 1289193529Sjkim { 1290193529Sjkim Temp8 = ACPI_HEST_NOTIFY_RESERVED; 1291193529Sjkim } 1292193529Sjkim 1293281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1294281687Sjkim AcpiDmHestNotifySubnames[Temp8]); 1295193529Sjkim break; 1296193529Sjkim 1297284460Sjkim case ACPI_DMT_IORTMEM: 1298284460Sjkim 1299284460Sjkim AcpiOsPrintf (STRING_FORMAT, 1300284460Sjkim "IORT Memory Access Properties"); 1301284460Sjkim 1302306536Sjkim Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target, 1303284460Sjkim sizeof (ACPI_IORT_MEMORY_ACCESS), AcpiDmTableInfoIortAcc); 1304306536Sjkim if (ACPI_FAILURE (Status)) 1305306536Sjkim { 1306306536Sjkim return (Status); 1307306536Sjkim } 1308306536Sjkim 1309284460Sjkim LastOutputBlankLine = TRUE; 1310284460Sjkim break; 1311284460Sjkim 1312167802Sjkim case ACPI_DMT_MADT: 1313167802Sjkim 1314167802Sjkim /* MADT subtable types */ 1315167802Sjkim 1316167802Sjkim Temp8 = *Target; 1317167802Sjkim if (Temp8 > ACPI_MADT_TYPE_RESERVED) 1318167802Sjkim { 1319167802Sjkim Temp8 = ACPI_MADT_TYPE_RESERVED; 1320167802Sjkim } 1321167802Sjkim 1322281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1323281687Sjkim AcpiDmMadtSubnames[Temp8]); 1324167802Sjkim break; 1325167802Sjkim 1326284460Sjkim case ACPI_DMT_NFIT: 1327284460Sjkim 1328284460Sjkim /* NFIT subtable types */ 1329284460Sjkim 1330284460Sjkim Temp16 = ACPI_GET16 (Target); 1331284460Sjkim if (Temp16 > ACPI_NFIT_TYPE_RESERVED) 1332284460Sjkim { 1333284460Sjkim Temp16 = ACPI_NFIT_TYPE_RESERVED; 1334284460Sjkim } 1335284460Sjkim 1336284460Sjkim AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), 1337284460Sjkim AcpiDmNfitSubnames[Temp16]); 1338284460Sjkim break; 1339284460Sjkim 1340281075Sdim case ACPI_DMT_PCCT: 1341281075Sdim 1342281075Sdim /* PCCT subtable types */ 1343281075Sdim 1344281075Sdim Temp8 = *Target; 1345281075Sdim if (Temp8 > ACPI_PCCT_TYPE_RESERVED) 1346281075Sdim { 1347281075Sdim Temp8 = ACPI_PCCT_TYPE_RESERVED; 1348281075Sdim } 1349281075Sdim 1350281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1351281687Sjkim AcpiDmPcctSubnames[Temp8]); 1352281075Sdim break; 1353281075Sdim 1354228110Sjkim case ACPI_DMT_PMTT: 1355228110Sjkim 1356228110Sjkim /* PMTT subtable types */ 1357228110Sjkim 1358228110Sjkim Temp8 = *Target; 1359228110Sjkim if (Temp8 > ACPI_PMTT_TYPE_RESERVED) 1360228110Sjkim { 1361228110Sjkim Temp8 = ACPI_PMTT_TYPE_RESERVED; 1362228110Sjkim } 1363228110Sjkim 1364281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1365281687Sjkim AcpiDmPmttSubnames[Temp8]); 1366228110Sjkim break; 1367228110Sjkim 1368284460Sjkim case ACPI_DMT_UNICODE: 1369284460Sjkim 1370284460Sjkim if (ByteLength == 0) 1371284460Sjkim { 1372284460Sjkim AcpiOsPrintf ("/* Zero-length Data */\n"); 1373284460Sjkim break; 1374284460Sjkim } 1375284460Sjkim 1376284460Sjkim AcpiDmDumpUnicode (Table, CurrentOffset, ByteLength); 1377284460Sjkim break; 1378284460Sjkim 1379281687Sjkim case ACPI_DMT_RAW_BUFFER: 1380219707Sjkim 1381284460Sjkim if (ByteLength == 0) 1382284460Sjkim { 1383284460Sjkim AcpiOsPrintf ("/* Zero-length Data */\n"); 1384284460Sjkim break; 1385284460Sjkim } 1386284460Sjkim 1387284460Sjkim AcpiDmDumpBuffer (Table, CurrentOffset, ByteLength, 1388284460Sjkim CurrentOffset, NULL); 1389219707Sjkim break; 1390219707Sjkim 1391167802Sjkim case ACPI_DMT_SRAT: 1392167802Sjkim 1393167802Sjkim /* SRAT subtable types */ 1394167802Sjkim 1395167802Sjkim Temp8 = *Target; 1396167802Sjkim if (Temp8 > ACPI_SRAT_TYPE_RESERVED) 1397167802Sjkim { 1398167802Sjkim Temp8 = ACPI_SRAT_TYPE_RESERVED; 1399167802Sjkim } 1400167802Sjkim 1401281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1402281687Sjkim AcpiDmSratSubnames[Temp8]); 1403167802Sjkim break; 1404167802Sjkim 1405193529Sjkim case ACPI_DMT_FADTPM: 1406193529Sjkim 1407193529Sjkim /* FADT Preferred PM Profile names */ 1408193529Sjkim 1409193529Sjkim Temp8 = *Target; 1410193529Sjkim if (Temp8 > ACPI_FADT_PM_RESERVED) 1411193529Sjkim { 1412193529Sjkim Temp8 = ACPI_FADT_PM_RESERVED; 1413193529Sjkim } 1414193529Sjkim 1415281687Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, 1416281687Sjkim AcpiDmFadtProfiles[Temp8]); 1417193529Sjkim break; 1418193529Sjkim 1419197104Sjkim case ACPI_DMT_IVRS: 1420197104Sjkim 1421197104Sjkim /* IVRS subtable types */ 1422197104Sjkim 1423197104Sjkim Temp8 = *Target; 1424197104Sjkim switch (Temp8) 1425197104Sjkim { 1426197104Sjkim case ACPI_IVRS_TYPE_HARDWARE: 1427250838Sjkim 1428197104Sjkim Name = AcpiDmIvrsSubnames[0]; 1429197104Sjkim break; 1430197104Sjkim 1431197104Sjkim case ACPI_IVRS_TYPE_MEMORY1: 1432197104Sjkim case ACPI_IVRS_TYPE_MEMORY2: 1433197104Sjkim case ACPI_IVRS_TYPE_MEMORY3: 1434250838Sjkim 1435197104Sjkim Name = AcpiDmIvrsSubnames[1]; 1436197104Sjkim break; 1437197104Sjkim 1438197104Sjkim default: 1439250838Sjkim 1440197104Sjkim Name = AcpiDmIvrsSubnames[2]; 1441197104Sjkim break; 1442197104Sjkim } 1443197104Sjkim 1444220663Sjkim AcpiOsPrintf (UINT8_FORMAT, *Target, Name); 1445197104Sjkim break; 1446197104Sjkim 1447281075Sdim case ACPI_DMT_LPIT: 1448281075Sdim 1449281075Sdim /* LPIT subtable types */ 1450281075Sdim 1451281687Sjkim Temp32 = ACPI_GET32 (Target); 1452281687Sjkim if (Temp32 > ACPI_LPIT_TYPE_RESERVED) 1453281075Sdim { 1454281687Sjkim Temp32 = ACPI_LPIT_TYPE_RESERVED; 1455281075Sdim } 1456281075Sdim 1457281687Sjkim AcpiOsPrintf (UINT32_FORMAT, ACPI_GET32 (Target), 1458281687Sjkim AcpiDmLpitSubnames[Temp32]); 1459281075Sdim break; 1460281075Sdim 1461167802Sjkim case ACPI_DMT_EXIT: 1462250838Sjkim 1463193529Sjkim return (AE_OK); 1464167802Sjkim 1465167802Sjkim default: 1466250838Sjkim 1467167802Sjkim ACPI_ERROR ((AE_INFO, 1468204773Sjkim "**** Invalid table opcode [0x%X] ****\n", Info->Opcode)); 1469193529Sjkim return (AE_SUPPORT); 1470167802Sjkim } 1471167802Sjkim } 1472193529Sjkim 1473193529Sjkim if (TableOffset && !SubtableLength) 1474193529Sjkim { 1475281687Sjkim /* 1476281687Sjkim * If this table is not the main table, the subtable must have a 1477281687Sjkim * valid length 1478281687Sjkim */ 1479193529Sjkim AcpiOsPrintf ("Invalid zero length subtable\n"); 1480193529Sjkim return (AE_BAD_DATA); 1481193529Sjkim } 1482193529Sjkim 1483193529Sjkim return (AE_OK); 1484167802Sjkim} 1485