123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563 |
- /******************************************************************************
- *
- * Module Name: dmtable - Support for ACPI tables that contain no AML code
- *
- *****************************************************************************/
- /******************************************************************************
- *
- * 1. Copyright Notice
- *
- * Some or all of this work - Copyright (c) 1999 - 2016, Intel Corp.
- * All rights reserved.
- *
- * 2. License
- *
- * 2.1. This is your license from Intel Corp. under its intellectual property
- * rights. You may have additional license terms from the party that provided
- * you this software, covering your right to use that party's intellectual
- * property rights.
- *
- * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
- * copy of the source code appearing in this file ("Covered Code") an
- * irrevocable, perpetual, worldwide license under Intel's copyrights in the
- * base code distributed originally by Intel ("Original Intel Code") to copy,
- * make derivatives, distribute, use and display any portion of the Covered
- * Code in any form, with the right to sublicense such rights; and
- *
- * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
- * license (with the right to sublicense), under only those claims of Intel
- * patents that are infringed by the Original Intel Code, to make, use, sell,
- * offer to sell, and import the Covered Code and derivative works thereof
- * solely to the minimum extent necessary to exercise the above copyright
- * license, and in no event shall the patent license extend to any additions
- * to or modifications of the Original Intel Code. No other license or right
- * is granted directly or by implication, estoppel or otherwise;
- *
- * The above copyright and patent license is granted only if the following
- * conditions are met:
- *
- * 3. Conditions
- *
- * 3.1. Redistribution of Source with Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification with rights to further distribute source must include
- * the above Copyright Notice, the above License, this list of Conditions,
- * and the following Disclaimer and Export Compliance provision. In addition,
- * Licensee must cause all Covered Code to which Licensee contributes to
- * contain a file documenting the changes Licensee made to create that Covered
- * Code and the date of any change. Licensee must include in that file the
- * documentation of any changes made by any predecessor Licensee. Licensee
- * must include a prominent statement that the modification is derived,
- * directly or indirectly, from Original Intel Code.
- *
- * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
- * Redistribution of source code of any substantial portion of the Covered
- * Code or modification without rights to further distribute source must
- * include the following Disclaimer and Export Compliance provision in the
- * documentation and/or other materials provided with distribution. In
- * addition, Licensee may not authorize further sublicense of source of any
- * portion of the Covered Code, and must include terms to the effect that the
- * license from Licensee to its licensee is limited to the intellectual
- * property embodied in the software Licensee provides to its licensee, and
- * not to intellectual property embodied in modifications its licensee may
- * make.
- *
- * 3.3. Redistribution of Executable. Redistribution in executable form of any
- * substantial portion of the Covered Code or modification must reproduce the
- * above Copyright Notice, and the following Disclaimer and Export Compliance
- * provision in the documentation and/or other materials provided with the
- * distribution.
- *
- * 3.4. Intel retains all right, title, and interest in and to the Original
- * Intel Code.
- *
- * 3.5. Neither the name Intel nor any other trademark owned or controlled by
- * Intel shall be used in advertising or otherwise to promote the sale, use or
- * other dealings in products derived from or relating to the Covered Code
- * without prior written authorization from Intel.
- *
- * 4. Disclaimer and Export Compliance
- *
- * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
- * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
- * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
- * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
- * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
- * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
- * PARTICULAR PURPOSE.
- *
- * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
- * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
- * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
- * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
- * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
- * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
- * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
- * LIMITED REMEDY.
- *
- * 4.3. Licensee shall not export, either directly or indirectly, any of this
- * software or system incorporating such software without first obtaining any
- * required license or other approval from the U. S. Department of Commerce or
- * any other agency or department of the United States Government. In the
- * event Licensee exports any such software from the United States or
- * re-exports any such software from a foreign destination, Licensee shall
- * ensure that the distribution and export/re-export of the software is in
- * compliance with all laws, regulations, orders, or other restrictions of the
- * U.S. Export Administration Regulations. Licensee agrees that neither it nor
- * any of its subsidiaries will export/re-export any technical data, process,
- * software, or service, directly or indirectly, to any country for which the
- * United States government or any agency thereof requires an export license,
- * other governmental approval, or letter of assurance, without first obtaining
- * such license, approval or letter.
- *
- *****************************************************************************/
- #include "acpi.h"
- #include "accommon.h"
- #include "acdisasm.h"
- #include "actables.h"
- #include "aslcompiler.h"
- #include "dtcompiler.h"
- /* This module used for application-level code only */
- #define _COMPONENT ACPI_CA_DISASSEMBLER
- ACPI_MODULE_NAME ("dmtable")
- const AH_TABLE *
- AcpiAhGetTableInfo (
- char *Signature);
- /* Common format strings for commented values */
- #define UINT8_FORMAT "%2.2X [%s]\n"
- #define UINT16_FORMAT "%4.4X [%s]\n"
- #define UINT32_FORMAT "%8.8X [%s]\n"
- #define STRING_FORMAT "[%s]\n"
- /* These tables map a subtable type to a description string */
- static const char *AcpiDmAsfSubnames[] =
- {
- "ASF Information",
- "ASF Alerts",
- "ASF Remote Control",
- "ASF RMCP Boot Options",
- "ASF Address",
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmDmarSubnames[] =
- {
- "Hardware Unit Definition",
- "Reserved Memory Region",
- "Root Port ATS Capability",
- "Remapping Hardware Static Affinity",
- "ACPI Namespace Device Declaration",
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmDmarScope[] =
- {
- "Reserved value",
- "PCI Endpoint Device",
- "PCI Bridge Device",
- "IOAPIC Device",
- "Message-capable HPET Device",
- "Namespace Device",
- "Unknown Scope Type" /* Reserved */
- };
- static const char *AcpiDmEinjActions[] =
- {
- "Begin Operation",
- "Get Trigger Table",
- "Set Error Type",
- "Get Error Type",
- "End Operation",
- "Execute Operation",
- "Check Busy Status",
- "Get Command Status",
- "Set Error Type With Address",
- "Get Execute Timings",
- "Unknown Action"
- };
- static const char *AcpiDmEinjInstructions[] =
- {
- "Read Register",
- "Read Register Value",
- "Write Register",
- "Write Register Value",
- "Noop",
- "Flush Cacheline",
- "Unknown Instruction"
- };
- static const char *AcpiDmErstActions[] =
- {
- "Begin Write Operation",
- "Begin Read Operation",
- "Begin Clear Operation",
- "End Operation",
- "Set Record Offset",
- "Execute Operation",
- "Check Busy Status",
- "Get Command Status",
- "Get Record Identifier",
- "Set Record Identifier",
- "Get Record Count",
- "Begin Dummy Write",
- "Unused/Unknown Action",
- "Get Error Address Range",
- "Get Error Address Length",
- "Get Error Attributes",
- "Execute Timings",
- "Unknown Action"
- };
- static const char *AcpiDmErstInstructions[] =
- {
- "Read Register",
- "Read Register Value",
- "Write Register",
- "Write Register Value",
- "Noop",
- "Load Var1",
- "Load Var2",
- "Store Var1",
- "Add",
- "Subtract",
- "Add Value",
- "Subtract Value",
- "Stall",
- "Stall While True",
- "Skip Next If True",
- "GoTo",
- "Set Source Address",
- "Set Destination Address",
- "Move Data",
- "Unknown Instruction"
- };
- static const char *AcpiDmGtdtSubnames[] =
- {
- "Generic Timer Block",
- "Generic Watchdog Timer",
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmHestSubnames[] =
- {
- "IA-32 Machine Check Exception",
- "IA-32 Corrected Machine Check",
- "IA-32 Non-Maskable Interrupt",
- "Unknown SubTable Type", /* 3 - Reserved */
- "Unknown SubTable Type", /* 4 - Reserved */
- "Unknown SubTable Type", /* 5 - Reserved */
- "PCI Express Root Port AER",
- "PCI Express AER (AER Endpoint)",
- "PCI Express/PCI-X Bridge AER",
- "Generic Hardware Error Source",
- "Generic Hardware Error Source V2",
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmHestNotifySubnames[] =
- {
- "Polled",
- "External Interrupt",
- "Local Interrupt",
- "SCI",
- "NMI",
- "CMCI", /* ACPI 5.0 */
- "MCE", /* ACPI 5.0 */
- "GPIO", /* ACPI 6.0 */
- "SEA", /* ACPI 6.1 */
- "SEI", /* ACPI 6.1 */
- "GSIV", /* ACPI 6.1 */
- "Unknown Notify Type" /* Reserved */
- };
- static const char *AcpiDmMadtSubnames[] =
- {
- "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */
- "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */
- "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
- "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */
- "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
- "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
- "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */
- "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */
- "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
- "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */
- "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
- "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
- "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */
- "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */
- "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
- "Generic Interrupt Translator", /* ACPI_MADT_GENERIC_TRANSLATOR */
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmNfitSubnames[] =
- {
- "System Physical Address Range", /* ACPI_NFIT_TYPE_SYSTEM_ADDRESS */
- "Memory Range Map", /* ACPI_NFIT_TYPE_MEMORY_MAP */
- "Interleave Info", /* ACPI_NFIT_TYPE_INTERLEAVE */
- "SMBIOS Information", /* ACPI_NFIT_TYPE_SMBIOS */
- "NVDIMM Control Region", /* ACPI_NFIT_TYPE_CONTROL_REGION */
- "NVDIMM Block Data Window Region", /* ACPI_NFIT_TYPE_DATA_REGION */
- "Flush Hint Address", /* ACPI_NFIT_TYPE_FLUSH_ADDRESS */
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmPcctSubnames[] =
- {
- "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
- "HW-Reduced Comm Subspace", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */
- "HW-Reduced Comm Subspace Type2", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmPmttSubnames[] =
- {
- "Socket", /* ACPI_PMTT_TYPE_SOCKET */
- "Memory Controller", /* ACPI_PMTT_TYPE_CONTROLLER */
- "Physical Component (DIMM)", /* ACPI_PMTT_TYPE_DIMM */
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmSratSubnames[] =
- {
- "Processor Local APIC/SAPIC Affinity",
- "Memory Affinity",
- "Processor Local x2APIC Affinity",
- "GICC Affinity",
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmIvrsSubnames[] =
- {
- "Hardware Definition Block",
- "Memory Definition Block",
- "Unknown Subtable Type" /* Reserved */
- };
- static const char *AcpiDmLpitSubnames[] =
- {
- "Native C-state Idle Structure",
- "Unknown Subtable Type" /* Reserved */
- };
- #define ACPI_FADT_PM_RESERVED 9
- static const char *AcpiDmFadtProfiles[] =
- {
- "Unspecified",
- "Desktop",
- "Mobile",
- "Workstation",
- "Enterprise Server",
- "SOHO Server",
- "Appliance PC",
- "Performance Server",
- "Tablet",
- "Unknown Profile Type"
- };
- #define ACPI_GAS_WIDTH_RESERVED 5
- static const char *AcpiDmGasAccessWidth[] =
- {
- "Undefined/Legacy",
- "Byte Access:8",
- "Word Access:16",
- "DWord Access:32",
- "QWord Access:64",
- "Unknown Width Encoding"
- };
- /*******************************************************************************
- *
- * ACPI Table Data, indexed by signature.
- *
- * Each entry contains: Signature, Table Info, Handler, DtHandler,
- * Template, Description
- *
- * Simple tables have only a TableInfo structure, complex tables have a
- * handler. This table must be NULL terminated. RSDP and FACS are
- * special-cased elsewhere.
- *
- * Note: Any tables added here should be duplicated within AcpiSupportedTables
- * in the file common/ahtable.c
- *
- ******************************************************************************/
- const ACPI_DMTABLE_DATA AcpiDmTableData[] =
- {
- {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf},
- {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert},
- {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt, NULL, NULL, TemplateBgrt},
- {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot},
- {ACPI_SIG_CPEP, NULL, AcpiDmDumpCpep, DtCompileCpep, TemplateCpep},
- {ACPI_SIG_CSRT, NULL, AcpiDmDumpCsrt, DtCompileCsrt, TemplateCsrt},
- {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2, AcpiDmDumpDbg2, DtCompileDbg2, TemplateDbg2},
- {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp, NULL, NULL, TemplateDbgp},
- {ACPI_SIG_DMAR, NULL, AcpiDmDumpDmar, DtCompileDmar, TemplateDmar},
- {ACPI_SIG_DRTM, NULL, AcpiDmDumpDrtm, DtCompileDrtm, TemplateDrtm},
- {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt, NULL, NULL, TemplateEcdt},
- {ACPI_SIG_EINJ, NULL, AcpiDmDumpEinj, DtCompileEinj, TemplateEinj},
- {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst},
- {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt},
- {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt},
- {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt},
- {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest},
- {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet},
- {ACPI_SIG_IORT, NULL, AcpiDmDumpIort, DtCompileIort, TemplateIort},
- {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs},
- {ACPI_SIG_LPIT, NULL, AcpiDmDumpLpit, DtCompileLpit, TemplateLpit},
- {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt},
- {ACPI_SIG_MCFG, NULL, AcpiDmDumpMcfg, DtCompileMcfg, TemplateMcfg},
- {ACPI_SIG_MCHI, AcpiDmTableInfoMchi, NULL, NULL, TemplateMchi},
- {ACPI_SIG_MPST, AcpiDmTableInfoMpst, AcpiDmDumpMpst, DtCompileMpst, TemplateMpst},
- {ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, DtCompileMsct, TemplateMsct},
- {ACPI_SIG_MSDM, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateMsdm},
- {ACPI_SIG_MTMR, NULL, AcpiDmDumpMtmr, DtCompileMtmr, TemplateMtmr},
- {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit},
- {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct},
- {ACPI_SIG_PMTT, NULL, AcpiDmDumpPmtt, DtCompilePmtt, TemplatePmtt},
- {ACPI_SIG_RASF, AcpiDmTableInfoRasf, NULL, NULL, TemplateRasf},
- {ACPI_SIG_RSDT, NULL, AcpiDmDumpRsdt, DtCompileRsdt, TemplateRsdt},
- {ACPI_SIG_S3PT, NULL, NULL, NULL, TemplateS3pt},
- {ACPI_SIG_SBST, AcpiDmTableInfoSbst, NULL, NULL, TemplateSbst},
- {ACPI_SIG_SLIC, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateSlic},
- {ACPI_SIG_SLIT, NULL, AcpiDmDumpSlit, DtCompileSlit, TemplateSlit},
- {ACPI_SIG_SPCR, AcpiDmTableInfoSpcr, NULL, NULL, TemplateSpcr},
- {ACPI_SIG_SPMI, AcpiDmTableInfoSpmi, NULL, NULL, TemplateSpmi},
- {ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, DtCompileSrat, TemplateSrat},
- {ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao},
- {ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa},
- {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, NULL, NULL, TemplateTpm2},
- {ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, DtCompileUefi, TemplateUefi},
- {ACPI_SIG_VRTC, AcpiDmTableInfoVrtc, AcpiDmDumpVrtc, DtCompileVrtc, TemplateVrtc},
- {ACPI_SIG_WAET, AcpiDmTableInfoWaet, NULL, NULL, TemplateWaet},
- {ACPI_SIG_WDAT, NULL, AcpiDmDumpWdat, DtCompileWdat, TemplateWdat},
- {ACPI_SIG_WDDT, AcpiDmTableInfoWddt, NULL, NULL, TemplateWddt},
- {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt, NULL, NULL, TemplateWdrt},
- {ACPI_SIG_WPBT, NULL, AcpiDmDumpWpbt, DtCompileWpbt, TemplateWpbt},
- {ACPI_SIG_XENV, AcpiDmTableInfoXenv, NULL, NULL, TemplateXenv},
- {ACPI_SIG_XSDT, NULL, AcpiDmDumpXsdt, DtCompileXsdt, TemplateXsdt},
- {NULL, NULL, NULL, NULL, NULL}
- };
- /*******************************************************************************
- *
- * FUNCTION: AcpiDmGenerateChecksum
- *
- * PARAMETERS: Table - Pointer to table to be checksummed
- * Length - Length of the table
- * OriginalChecksum - Value of the checksum field
- *
- * RETURN: 8 bit checksum of buffer
- *
- * DESCRIPTION: Computes an 8 bit checksum of the table.
- *
- ******************************************************************************/
- UINT8
- AcpiDmGenerateChecksum (
- void *Table,
- UINT32 Length,
- UINT8 OriginalChecksum)
- {
- UINT8 Checksum;
- /* Sum the entire table as-is */
- Checksum = AcpiTbChecksum ((UINT8 *) Table, Length);
- /* Subtract off the existing checksum value in the table */
- Checksum = (UINT8) (Checksum - OriginalChecksum);
- /* Compute the final checksum */
- Checksum = (UINT8) (0 - Checksum);
- return (Checksum);
- }
- /*******************************************************************************
- *
- * FUNCTION: AcpiDmGetTableData
- *
- * PARAMETERS: Signature - ACPI signature (4 chars) to match
- *
- * RETURN: Pointer to a valid ACPI_DMTABLE_DATA. Null if no match found.
- *
- * DESCRIPTION: Find a match in the global table of supported ACPI tables
- *
- ******************************************************************************/
- const ACPI_DMTABLE_DATA *
- AcpiDmGetTableData (
- char *Signature)
- {
- const ACPI_DMTABLE_DATA *Info;
- for (Info = AcpiDmTableData; Info->Signature; Info++)
- {
- if (ACPI_COMPARE_NAME (Signature, Info->Signature))
- {
- return (Info);
- }
- }
- return (NULL);
- }
- /*******************************************************************************
- *
- * FUNCTION: AcpiDmDumpDataTable
- *
- * PARAMETERS: Table - An ACPI table
- *
- * RETURN: None.
- *
- * DESCRIPTION: Format the contents of an ACPI data table (any table other
- * than an SSDT or DSDT that does not contain executable AML code)
- *
- ******************************************************************************/
- void
- AcpiDmDumpDataTable (
- ACPI_TABLE_HEADER *Table)
- {
- ACPI_STATUS Status;
- const ACPI_DMTABLE_DATA *TableData;
- UINT32 Length;
- /* Ignore tables that contain AML */
- if (AcpiUtIsAmlTable (Table))
- {
- if (Gbl_VerboseTemplates)
- {
- /* Dump the raw table data */
- Length = Table->Length;
- AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n",
- ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
- AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table),
- Length, DB_BYTE_DISPLAY, 0);
- AcpiOsPrintf (" */\n");
- }
- return;
- }
- /*
- * Handle tables that don't use the common ACPI table header structure.
- * Currently, these are the FACS, RSDP, and S3PT.
- */
- if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_FACS))
- {
- Length = Table->Length;
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
- if (ACPI_FAILURE (Status))
- {
- return;
- }
- }
- else if (ACPI_VALIDATE_RSDP_SIG (Table->Signature))
- {
- Length = AcpiDmDumpRsdp (Table);
- }
- else if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_S3PT))
- {
- Length = AcpiDmDumpS3pt (Table);
- }
- else
- {
- /*
- * All other tables must use the common ACPI table header, dump it now
- */
- Length = Table->Length;
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
- if (ACPI_FAILURE (Status))
- {
- return;
- }
- AcpiOsPrintf ("\n");
- /* Match signature and dispatch appropriately */
- TableData = AcpiDmGetTableData (Table->Signature);
- if (!TableData)
- {
- if (!strncmp (Table->Signature, "OEM", 3))
- {
- AcpiOsPrintf ("\n**** OEM-defined ACPI table [%4.4s], unknown contents\n\n",
- Table->Signature);
- }
- else
- {
- AcpiOsPrintf ("\n**** Unknown ACPI table signature [%4.4s]\n\n",
- Table->Signature);
- fprintf (stderr, "Unknown ACPI table signature [%4.4s], ",
- Table->Signature);
- if (!AcpiGbl_ForceAmlDisassembly)
- {
- fprintf (stderr, "decoding ACPI table header only\n");
- }
- else
- {
- fprintf (stderr, "assuming table contains valid AML code\n");
- }
- }
- }
- else if (TableData->TableHandler)
- {
- /* Complex table, has a handler */
- TableData->TableHandler (Table);
- }
- else if (TableData->TableInfo)
- {
- /* Simple table, just walk the info table */
- Status = AcpiDmDumpTable (Length, 0, Table, 0, TableData->TableInfo);
- if (ACPI_FAILURE (Status))
- {
- return;
- }
- }
- }
- if (!Gbl_DoTemplates || Gbl_VerboseTemplates)
- {
- /* Dump the raw table data */
- AcpiOsPrintf ("\n%s: Length %d (0x%X)\n\n",
- ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
- AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table),
- Length, DB_BYTE_DISPLAY, 0);
- }
- }
- /*******************************************************************************
- *
- * FUNCTION: AcpiDmLineHeader
- *
- * PARAMETERS: Offset - Current byte offset, from table start
- * ByteLength - Length of the field in bytes, 0 for flags
- * Name - Name of this field
- *
- * RETURN: None
- *
- * DESCRIPTION: Utility routines for formatting output lines. Displays the
- * current table offset in hex and decimal, the field length,
- * and the field name.
- *
- ******************************************************************************/
- void
- AcpiDmLineHeader (
- UINT32 Offset,
- UINT32 ByteLength,
- char *Name)
- {
- /* Allow a null name for fields that span multiple lines (large buffers) */
- if (!Name)
- {
- Name = "";
- }
- if (Gbl_DoTemplates && !Gbl_VerboseTemplates) /* Terse template */
- {
- if (ByteLength)
- {
- AcpiOsPrintf ("[%.4d] %34s : ", ByteLength, Name);
- }
- else
- {
- if (*Name)
- {
- AcpiOsPrintf ("%41s : ", Name);
- }
- else
- {
- AcpiOsPrintf ("%41s ", Name);
- }
- }
- }
- else /* Normal disassembler or verbose template */
- {
- if (ByteLength)
- {
- AcpiOsPrintf ("[%3.3Xh %4.4d% 4d] %28s : ",
- Offset, Offset, ByteLength, Name);
- }
- else
- {
- if (*Name)
- {
- AcpiOsPrintf ("%44s : ", Name);
- }
- else
- {
- AcpiOsPrintf ("%44s ", Name);
- }
- }
- }
- }
- void
- AcpiDmLineHeader2 (
- UINT32 Offset,
- UINT32 ByteLength,
- char *Name,
- UINT32 Value)
- {
- if (Gbl_DoTemplates && !Gbl_VerboseTemplates) /* Terse template */
- {
- if (ByteLength)
- {
- AcpiOsPrintf ("[%.4d] %30s %3d : ",
- ByteLength, Name, Value);
- }
- else
- {
- AcpiOsPrintf ("%36s % 3d : ",
- Name, Value);
- }
- }
- else /* Normal disassembler or verbose template */
- {
- if (ByteLength)
- {
- AcpiOsPrintf ("[%3.3Xh %4.4d %3d] %24s %3d : ",
- Offset, Offset, ByteLength, Name, Value);
- }
- else
- {
- AcpiOsPrintf ("[%3.3Xh %4.4d ] %24s %3d : ",
- Offset, Offset, Name, Value);
- }
- }
- }
- /*******************************************************************************
- *
- * FUNCTION: AcpiDmDumpTable
- *
- * PARAMETERS: TableLength - Length of the entire ACPI table
- * TableOffset - Starting offset within the table for this
- * sub-descriptor (0 if main table)
- * Table - The ACPI table
- * SubtableLength - Length of this sub-descriptor
- * Info - Info table for this ACPI table
- *
- * RETURN: Status
- *
- * DESCRIPTION: Display ACPI table contents by walking the Info table.
- *
- * Note: This function must remain in sync with DtGetFieldLength.
- *
- ******************************************************************************/
- ACPI_STATUS
- AcpiDmDumpTable (
- UINT32 TableLength,
- UINT32 TableOffset,
- void *Table,
- UINT32 SubtableLength,
- ACPI_DMTABLE_INFO *Info)
- {
- UINT8 *Target;
- UINT32 CurrentOffset;
- UINT32 ByteLength;
- UINT8 Temp8;
- UINT16 Temp16;
- UINT32 Temp32;
- UINT64 Value;
- const AH_TABLE *TableData;
- const char *Name;
- BOOLEAN LastOutputBlankLine = FALSE;
- ACPI_STATUS Status;
- char RepairedName[8];
- if (!Info)
- {
- AcpiOsPrintf ("Display not implemented\n");
- return (AE_NOT_IMPLEMENTED);
- }
- /* Walk entire Info table; Null name terminates */
- for (; Info->Name; Info++)
- {
- /*
- * Target points to the field within the ACPI Table. CurrentOffset is
- * the offset of the field from the start of the main table.
- */
- Target = ACPI_ADD_PTR (UINT8, Table, Info->Offset);
- CurrentOffset = TableOffset + Info->Offset;
- /* Check for beyond subtable end or (worse) beyond EOT */
- if (SubtableLength && (Info->Offset >= SubtableLength))
- {
- AcpiOsPrintf (
- "/**** ACPI subtable terminates early - "
- "may be older version (dump table) */\n");
- /* Move on to next subtable */
- return (AE_OK);
- }
- if (CurrentOffset >= TableLength)
- {
- AcpiOsPrintf (
- "/**** ACPI table terminates "
- "in the middle of a data structure! (dump table) */\n");
- return (AE_BAD_DATA);
- }
- /* Generate the byte length for this field */
- switch (Info->Opcode)
- {
- case ACPI_DMT_UINT8:
- case ACPI_DMT_CHKSUM:
- case ACPI_DMT_SPACEID:
- case ACPI_DMT_ACCWIDTH:
- case ACPI_DMT_IVRS:
- case ACPI_DMT_GTDT:
- case ACPI_DMT_MADT:
- case ACPI_DMT_PCCT:
- case ACPI_DMT_PMTT:
- case ACPI_DMT_SRAT:
- case ACPI_DMT_ASF:
- case ACPI_DMT_HESTNTYP:
- case ACPI_DMT_FADTPM:
- case ACPI_DMT_EINJACT:
- case ACPI_DMT_EINJINST:
- case ACPI_DMT_ERSTACT:
- case ACPI_DMT_ERSTINST:
- case ACPI_DMT_DMAR_SCOPE:
- ByteLength = 1;
- break;
- case ACPI_DMT_UINT16:
- case ACPI_DMT_DMAR:
- case ACPI_DMT_HEST:
- case ACPI_DMT_NFIT:
- ByteLength = 2;
- break;
- case ACPI_DMT_UINT24:
- ByteLength = 3;
- break;
- case ACPI_DMT_UINT32:
- case ACPI_DMT_NAME4:
- case ACPI_DMT_SIG:
- case ACPI_DMT_LPIT:
- ByteLength = 4;
- break;
- case ACPI_DMT_UINT40:
- ByteLength = 5;
- break;
- case ACPI_DMT_UINT48:
- case ACPI_DMT_NAME6:
- ByteLength = 6;
- break;
- case ACPI_DMT_UINT56:
- case ACPI_DMT_BUF7:
- ByteLength = 7;
- break;
- case ACPI_DMT_UINT64:
- case ACPI_DMT_NAME8:
- ByteLength = 8;
- break;
- case ACPI_DMT_BUF10:
- ByteLength = 10;
- break;
- case ACPI_DMT_BUF12:
- ByteLength = 12;
- break;
- case ACPI_DMT_BUF16:
- case ACPI_DMT_UUID:
- ByteLength = 16;
- break;
- case ACPI_DMT_BUF128:
- ByteLength = 128;
- break;
- case ACPI_DMT_UNICODE:
- case ACPI_DMT_BUFFER:
- case ACPI_DMT_RAW_BUFFER:
- ByteLength = SubtableLength;
- break;
- case ACPI_DMT_STRING:
- ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
- break;
- case ACPI_DMT_GAS:
- if (!LastOutputBlankLine)
- {
- AcpiOsPrintf ("\n");
- LastOutputBlankLine = TRUE;
- }
- ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
- break;
- case ACPI_DMT_HESTNTFY:
- if (!LastOutputBlankLine)
- {
- AcpiOsPrintf ("\n");
- LastOutputBlankLine = TRUE;
- }
- ByteLength = sizeof (ACPI_HEST_NOTIFY);
- break;
- case ACPI_DMT_IORTMEM:
- if (!LastOutputBlankLine)
- {
- LastOutputBlankLine = FALSE;
- }
- ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS);
- break;
- default:
- ByteLength = 0;
- break;
- }
- /* Check if we are beyond a subtable, or (worse) beyond EOT */
- if (CurrentOffset + ByteLength > TableLength)
- {
- if (SubtableLength)
- {
- AcpiOsPrintf (
- "/**** ACPI subtable terminates early - "
- "may be older version (dump table) */\n");
- /* Move on to next subtable */
- return (AE_OK);
- }
- AcpiOsPrintf (
- "/**** ACPI table terminates "
- "in the middle of a data structure! */\n");
- return (AE_BAD_DATA);
- }
- if (Info->Opcode == ACPI_DMT_EXTRA_TEXT)
- {
- AcpiOsPrintf ("%s", Info->Name);
- continue;
- }
- /* Start a new line and decode the opcode */
- AcpiDmLineHeader (CurrentOffset, ByteLength, Info->Name);
- switch (Info->Opcode)
- {
- /* Single-bit Flag fields. Note: Opcode is the bit position */
- case ACPI_DMT_FLAG0:
- case ACPI_DMT_FLAG1:
- case ACPI_DMT_FLAG2:
- case ACPI_DMT_FLAG3:
- case ACPI_DMT_FLAG4:
- case ACPI_DMT_FLAG5:
- case ACPI_DMT_FLAG6:
- case ACPI_DMT_FLAG7:
- AcpiOsPrintf ("%1.1X\n", (*Target >> Info->Opcode) & 0x01);
- break;
- /* 2-bit Flag fields */
- case ACPI_DMT_FLAGS0:
- AcpiOsPrintf ("%1.1X\n", *Target & 0x03);
- break;
- case ACPI_DMT_FLAGS1:
- AcpiOsPrintf ("%1.1X\n", (*Target >> 1) & 0x03);
- break;
- case ACPI_DMT_FLAGS2:
- AcpiOsPrintf ("%1.1X\n", (*Target >> 2) & 0x03);
- break;
- case ACPI_DMT_FLAGS4:
- AcpiOsPrintf ("%1.1X\n", (*Target >> 4) & 0x03);
- break;
- /* Integer Data Types */
- case ACPI_DMT_UINT8:
- case ACPI_DMT_UINT16:
- case ACPI_DMT_UINT24:
- case ACPI_DMT_UINT32:
- case ACPI_DMT_UINT40:
- case ACPI_DMT_UINT48:
- case ACPI_DMT_UINT56:
- case ACPI_DMT_UINT64:
- /*
- * Dump bytes - high byte first, low byte last.
- * Note: All ACPI tables are little-endian.
- */
- Value = 0;
- for (Temp8 = (UINT8) ByteLength; Temp8 > 0; Temp8--)
- {
- AcpiOsPrintf ("%2.2X", Target[Temp8 - 1]);
- Value |= Target[Temp8 - 1];
- Value <<= 8;
- }
- if (!Value && (Info->Flags & DT_DESCRIBES_OPTIONAL))
- {
- AcpiOsPrintf (" [Optional field not present]");
- }
- AcpiOsPrintf ("\n");
- break;
- case ACPI_DMT_BUF7:
- case ACPI_DMT_BUF10:
- case ACPI_DMT_BUF12:
- case ACPI_DMT_BUF16:
- case ACPI_DMT_BUF128:
- /*
- * Buffer: Size depends on the opcode and was set above.
- * Each hex byte is separated with a space.
- * Multiple lines are separated by line continuation char.
- */
- for (Temp16 = 0; Temp16 < ByteLength; Temp16++)
- {
- AcpiOsPrintf ("%2.2X", Target[Temp16]);
- if ((UINT32) (Temp16 + 1) < ByteLength)
- {
- if ((Temp16 > 0) && (!((Temp16+1) % 16)))
- {
- AcpiOsPrintf (" \\\n"); /* Line continuation */
- AcpiDmLineHeader (0, 0, NULL);
- }
- else
- {
- AcpiOsPrintf (" ");
- }
- }
- }
- AcpiOsPrintf ("\n");
- break;
- case ACPI_DMT_UUID:
- /* Convert 16-byte UUID buffer to 36-byte formatted UUID string */
- (void) AuConvertUuidToString ((char *) Target, MsgBuffer);
- AcpiOsPrintf ("%s\n", MsgBuffer);
- break;
- case ACPI_DMT_STRING:
- AcpiOsPrintf ("\"%s\"\n", ACPI_CAST_PTR (char, Target));
- break;
- /* Fixed length ASCII name fields */
- case ACPI_DMT_SIG:
- AcpiUtCheckAndRepairAscii (Target, RepairedName, 4);
- AcpiOsPrintf ("\"%.4s\" ", RepairedName);
- TableData = AcpiAhGetTableInfo (ACPI_CAST_PTR (char, Target));
- if (TableData)
- {
- AcpiOsPrintf (STRING_FORMAT, TableData->Description);
- }
- else
- {
- AcpiOsPrintf ("\n");
- }
- break;
- case ACPI_DMT_NAME4:
- AcpiUtCheckAndRepairAscii (Target, RepairedName, 4);
- AcpiOsPrintf ("\"%.4s\"\n", RepairedName);
- break;
- case ACPI_DMT_NAME6:
- AcpiUtCheckAndRepairAscii (Target, RepairedName, 6);
- AcpiOsPrintf ("\"%.6s\"\n", RepairedName);
- break;
- case ACPI_DMT_NAME8:
- AcpiUtCheckAndRepairAscii (Target, RepairedName, 8);
- AcpiOsPrintf ("\"%.8s\"\n", RepairedName);
- break;
- /* Special Data Types */
- case ACPI_DMT_CHKSUM:
- /* Checksum, display and validate */
- AcpiOsPrintf ("%2.2X", *Target);
- Temp8 = AcpiDmGenerateChecksum (Table,
- ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
- ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
- if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
- {
- AcpiOsPrintf (
- " /* Incorrect checksum, should be %2.2X */", Temp8);
- }
- AcpiOsPrintf ("\n");
- break;
- case ACPI_DMT_SPACEID:
- /* Address Space ID */
- AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiUtGetRegionName (*Target));
- break;
- case ACPI_DMT_ACCWIDTH:
- /* Encoded Access Width */
- Temp8 = *Target;
- if (Temp8 > ACPI_GAS_WIDTH_RESERVED)
- {
- Temp8 = ACPI_GAS_WIDTH_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGasAccessWidth[Temp8]);
- break;
- case ACPI_DMT_GAS:
- /* Generic Address Structure */
- AcpiOsPrintf (STRING_FORMAT, "Generic Address Structure");
- Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
- sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
- AcpiOsPrintf ("\n");
- LastOutputBlankLine = TRUE;
- break;
- case ACPI_DMT_ASF:
- /* ASF subtable types */
- Temp16 = (UINT16) ((*Target) & 0x7F); /* Top bit can be zero or one */
- if (Temp16 > ACPI_ASF_TYPE_RESERVED)
- {
- Temp16 = ACPI_ASF_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAsfSubnames[Temp16]);
- break;
- case ACPI_DMT_DMAR:
- /* DMAR subtable types */
- Temp16 = ACPI_GET16 (Target);
- if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
- {
- Temp16 = ACPI_DMAR_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
- AcpiDmDmarSubnames[Temp16]);
- break;
- case ACPI_DMT_DMAR_SCOPE:
- /* DMAR device scope types */
- Temp8 = *Target;
- if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED)
- {
- Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmDmarScope[Temp8]);
- break;
- case ACPI_DMT_EINJACT:
- /* EINJ Action types */
- Temp8 = *Target;
- if (Temp8 > ACPI_EINJ_ACTION_RESERVED)
- {
- Temp8 = ACPI_EINJ_ACTION_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmEinjActions[Temp8]);
- break;
- case ACPI_DMT_EINJINST:
- /* EINJ Instruction types */
- Temp8 = *Target;
- if (Temp8 > ACPI_EINJ_INSTRUCTION_RESERVED)
- {
- Temp8 = ACPI_EINJ_INSTRUCTION_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmEinjInstructions[Temp8]);
- break;
- case ACPI_DMT_ERSTACT:
- /* ERST Action types */
- Temp8 = *Target;
- if (Temp8 > ACPI_ERST_ACTION_RESERVED)
- {
- Temp8 = ACPI_ERST_ACTION_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmErstActions[Temp8]);
- break;
- case ACPI_DMT_ERSTINST:
- /* ERST Instruction types */
- Temp8 = *Target;
- if (Temp8 > ACPI_ERST_INSTRUCTION_RESERVED)
- {
- Temp8 = ACPI_ERST_INSTRUCTION_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmErstInstructions[Temp8]);
- break;
- case ACPI_DMT_GTDT:
- /* GTDT subtable types */
- Temp8 = *Target;
- if (Temp8 > ACPI_GTDT_TYPE_RESERVED)
- {
- Temp8 = ACPI_GTDT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmGtdtSubnames[Temp8]);
- break;
- case ACPI_DMT_HEST:
- /* HEST subtable types */
- Temp16 = ACPI_GET16 (Target);
- if (Temp16 > ACPI_HEST_TYPE_RESERVED)
- {
- Temp16 = ACPI_HEST_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
- AcpiDmHestSubnames[Temp16]);
- break;
- case ACPI_DMT_HESTNTFY:
- AcpiOsPrintf (STRING_FORMAT,
- "Hardware Error Notification Structure");
- Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
- sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
- AcpiOsPrintf ("\n");
- LastOutputBlankLine = TRUE;
- break;
- case ACPI_DMT_HESTNTYP:
- /* HEST Notify types */
- Temp8 = *Target;
- if (Temp8 > ACPI_HEST_NOTIFY_RESERVED)
- {
- Temp8 = ACPI_HEST_NOTIFY_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmHestNotifySubnames[Temp8]);
- break;
- case ACPI_DMT_IORTMEM:
- AcpiOsPrintf (STRING_FORMAT,
- "IORT Memory Access Properties");
- Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
- sizeof (ACPI_IORT_MEMORY_ACCESS), AcpiDmTableInfoIortAcc);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
- LastOutputBlankLine = TRUE;
- break;
- case ACPI_DMT_MADT:
- /* MADT subtable types */
- Temp8 = *Target;
- if (Temp8 > ACPI_MADT_TYPE_RESERVED)
- {
- Temp8 = ACPI_MADT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmMadtSubnames[Temp8]);
- break;
- case ACPI_DMT_NFIT:
- /* NFIT subtable types */
- Temp16 = ACPI_GET16 (Target);
- if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
- {
- Temp16 = ACPI_NFIT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
- AcpiDmNfitSubnames[Temp16]);
- break;
- case ACPI_DMT_PCCT:
- /* PCCT subtable types */
- Temp8 = *Target;
- if (Temp8 > ACPI_PCCT_TYPE_RESERVED)
- {
- Temp8 = ACPI_PCCT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmPcctSubnames[Temp8]);
- break;
- case ACPI_DMT_PMTT:
- /* PMTT subtable types */
- Temp8 = *Target;
- if (Temp8 > ACPI_PMTT_TYPE_RESERVED)
- {
- Temp8 = ACPI_PMTT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmPmttSubnames[Temp8]);
- break;
- case ACPI_DMT_UNICODE:
- if (ByteLength == 0)
- {
- AcpiOsPrintf ("/* Zero-length Data */\n");
- break;
- }
- AcpiDmDumpUnicode (Table, CurrentOffset, ByteLength);
- break;
- case ACPI_DMT_RAW_BUFFER:
- if (ByteLength == 0)
- {
- AcpiOsPrintf ("/* Zero-length Data */\n");
- break;
- }
- AcpiDmDumpBuffer (Table, CurrentOffset, ByteLength,
- CurrentOffset, NULL);
- break;
- case ACPI_DMT_SRAT:
- /* SRAT subtable types */
- Temp8 = *Target;
- if (Temp8 > ACPI_SRAT_TYPE_RESERVED)
- {
- Temp8 = ACPI_SRAT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmSratSubnames[Temp8]);
- break;
- case ACPI_DMT_FADTPM:
- /* FADT Preferred PM Profile names */
- Temp8 = *Target;
- if (Temp8 > ACPI_FADT_PM_RESERVED)
- {
- Temp8 = ACPI_FADT_PM_RESERVED;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target,
- AcpiDmFadtProfiles[Temp8]);
- break;
- case ACPI_DMT_IVRS:
- /* IVRS subtable types */
- Temp8 = *Target;
- switch (Temp8)
- {
- case ACPI_IVRS_TYPE_HARDWARE:
- Name = AcpiDmIvrsSubnames[0];
- break;
- case ACPI_IVRS_TYPE_MEMORY1:
- case ACPI_IVRS_TYPE_MEMORY2:
- case ACPI_IVRS_TYPE_MEMORY3:
- Name = AcpiDmIvrsSubnames[1];
- break;
- default:
- Name = AcpiDmIvrsSubnames[2];
- break;
- }
- AcpiOsPrintf (UINT8_FORMAT, *Target, Name);
- break;
- case ACPI_DMT_LPIT:
- /* LPIT subtable types */
- Temp32 = ACPI_GET32 (Target);
- if (Temp32 > ACPI_LPIT_TYPE_RESERVED)
- {
- Temp32 = ACPI_LPIT_TYPE_RESERVED;
- }
- AcpiOsPrintf (UINT32_FORMAT, ACPI_GET32 (Target),
- AcpiDmLpitSubnames[Temp32]);
- break;
- case ACPI_DMT_EXIT:
- return (AE_OK);
- default:
- ACPI_ERROR ((AE_INFO,
- "**** Invalid table opcode [0x%X] ****\n", Info->Opcode));
- return (AE_SUPPORT);
- }
- }
- if (TableOffset && !SubtableLength)
- {
- /*
- * If this table is not the main table, the subtable must have a
- * valid length
- */
- AcpiOsPrintf ("Invalid zero length subtable\n");
- return (AE_BAD_DATA);
- }
- return (AE_OK);
- }
|