1a88e22b7SJung-uk Kim /****************************************************************************** 2a88e22b7SJung-uk Kim * 3a88e22b7SJung-uk Kim * Module Name: dttemplate - ACPI table template generation 4a88e22b7SJung-uk Kim * 5a88e22b7SJung-uk Kim *****************************************************************************/ 6a88e22b7SJung-uk Kim 7d244b227SJung-uk Kim /* 81c0e1b6dSJung-uk Kim * Copyright (C) 2000 - 2015, Intel Corp. 9a88e22b7SJung-uk Kim * All rights reserved. 10a88e22b7SJung-uk Kim * 11d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 13d244b227SJung-uk Kim * are met: 14d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16d244b227SJung-uk Kim * without modification. 17d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21d244b227SJung-uk Kim * binary redistribution. 22d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24d244b227SJung-uk Kim * from this software without specific prior written permission. 25a88e22b7SJung-uk Kim * 26d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28d244b227SJung-uk Kim * Software Foundation. 29a88e22b7SJung-uk Kim * 30d244b227SJung-uk Kim * NO WARRANTY 31d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42d244b227SJung-uk Kim */ 43a88e22b7SJung-uk Kim 44a88e22b7SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 45a88e22b7SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 46a88e22b7SJung-uk Kim #include <contrib/dev/acpica/compiler/dtcompiler.h> 47a88e22b7SJung-uk Kim #include <contrib/dev/acpica/compiler/dttemplate.h> /* Contains the hex ACPI table templates */ 48a88e22b7SJung-uk Kim 49a88e22b7SJung-uk Kim #define _COMPONENT DT_COMPILER 50a88e22b7SJung-uk Kim ACPI_MODULE_NAME ("dttemplate") 51a88e22b7SJung-uk Kim 52a88e22b7SJung-uk Kim 53a88e22b7SJung-uk Kim /* Local prototypes */ 54a88e22b7SJung-uk Kim 55a88e22b7SJung-uk Kim static BOOLEAN 56a88e22b7SJung-uk Kim AcpiUtIsSpecialTable ( 57a88e22b7SJung-uk Kim char *Signature); 58a88e22b7SJung-uk Kim 59a88e22b7SJung-uk Kim static ACPI_STATUS 60a88e22b7SJung-uk Kim DtCreateOneTemplate ( 61a88e22b7SJung-uk Kim char *Signature, 62*a371a5fdSJung-uk Kim const ACPI_DMTABLE_DATA *TableData); 63a88e22b7SJung-uk Kim 64a88e22b7SJung-uk Kim static ACPI_STATUS 65a88e22b7SJung-uk Kim DtCreateAllTemplates ( 66a88e22b7SJung-uk Kim void); 67a88e22b7SJung-uk Kim 68a88e22b7SJung-uk Kim 69a88e22b7SJung-uk Kim /******************************************************************************* 70a88e22b7SJung-uk Kim * 71a88e22b7SJung-uk Kim * FUNCTION: AcpiUtIsSpecialTable 72a88e22b7SJung-uk Kim * 73a88e22b7SJung-uk Kim * PARAMETERS: Signature - ACPI table signature 74a88e22b7SJung-uk Kim * 75a88e22b7SJung-uk Kim * RETURN: TRUE if signature is a special ACPI table 76a88e22b7SJung-uk Kim * 77a88e22b7SJung-uk Kim * DESCRIPTION: Check for valid ACPI tables that are not in the main ACPI 78a88e22b7SJung-uk Kim * table data structure (AcpiDmTableData). 79a88e22b7SJung-uk Kim * 80a88e22b7SJung-uk Kim ******************************************************************************/ 81a88e22b7SJung-uk Kim 82a88e22b7SJung-uk Kim static BOOLEAN 83a88e22b7SJung-uk Kim AcpiUtIsSpecialTable ( 84a88e22b7SJung-uk Kim char *Signature) 85a88e22b7SJung-uk Kim { 86a88e22b7SJung-uk Kim 87a88e22b7SJung-uk Kim if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT) || 88a88e22b7SJung-uk Kim ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT) || 89a88e22b7SJung-uk Kim ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS) || 90a88e22b7SJung-uk Kim ACPI_COMPARE_NAME (Signature, ACPI_RSDP_NAME)) 91a88e22b7SJung-uk Kim { 92a88e22b7SJung-uk Kim return (TRUE); 93a88e22b7SJung-uk Kim } 94a88e22b7SJung-uk Kim 95a88e22b7SJung-uk Kim return (FALSE); 96a88e22b7SJung-uk Kim } 97a88e22b7SJung-uk Kim 98a88e22b7SJung-uk Kim 99a88e22b7SJung-uk Kim /******************************************************************************* 100a88e22b7SJung-uk Kim * 101a88e22b7SJung-uk Kim * FUNCTION: DtCreateTemplates 102a88e22b7SJung-uk Kim * 103a88e22b7SJung-uk Kim * PARAMETERS: Signature - ACPI table signature 104a88e22b7SJung-uk Kim * 105a88e22b7SJung-uk Kim * RETURN: Status 106a88e22b7SJung-uk Kim * 107a88e22b7SJung-uk Kim * DESCRIPTION: Create one or more template files. 108a88e22b7SJung-uk Kim * 109a88e22b7SJung-uk Kim ******************************************************************************/ 110a88e22b7SJung-uk Kim 111a88e22b7SJung-uk Kim ACPI_STATUS 112a88e22b7SJung-uk Kim DtCreateTemplates ( 113a88e22b7SJung-uk Kim char *Signature) 114a88e22b7SJung-uk Kim { 115*a371a5fdSJung-uk Kim const ACPI_DMTABLE_DATA *TableData; 116a88e22b7SJung-uk Kim ACPI_STATUS Status; 117a88e22b7SJung-uk Kim 118a88e22b7SJung-uk Kim 119a88e22b7SJung-uk Kim AslInitializeGlobals (); 120bf6fac21SJung-uk Kim 121bf6fac21SJung-uk Kim /* Default (no signature) is DSDT */ 122bf6fac21SJung-uk Kim 123bf6fac21SJung-uk Kim if (!Signature) 124bf6fac21SJung-uk Kim { 125bf6fac21SJung-uk Kim Signature = "DSDT"; 126bf6fac21SJung-uk Kim goto GetTemplate; 127bf6fac21SJung-uk Kim } 128bf6fac21SJung-uk Kim 129a88e22b7SJung-uk Kim AcpiUtStrupr (Signature); 130bf6fac21SJung-uk Kim if (!ACPI_STRCMP (Signature, "ALL") || 131d052a1ccSJung-uk Kim !ACPI_STRCMP (Signature, "*")) 132a88e22b7SJung-uk Kim { 133bf6fac21SJung-uk Kim /* Create all available/known templates */ 134bf6fac21SJung-uk Kim 135a88e22b7SJung-uk Kim Status = DtCreateAllTemplates (); 136a88e22b7SJung-uk Kim return (Status); 137a88e22b7SJung-uk Kim } 138a88e22b7SJung-uk Kim 139a88e22b7SJung-uk Kim /* 140a88e22b7SJung-uk Kim * Validate signature and get the template data: 141a88e22b7SJung-uk Kim * 1) Signature must be 4 characters 142a88e22b7SJung-uk Kim * 2) Signature must be a recognized ACPI table 143a88e22b7SJung-uk Kim * 3) There must be a template associated with the signature 144a88e22b7SJung-uk Kim */ 145a88e22b7SJung-uk Kim if (strlen (Signature) != ACPI_NAME_SIZE) 146a88e22b7SJung-uk Kim { 147bf6fac21SJung-uk Kim fprintf (stderr, 148bf6fac21SJung-uk Kim "%s: Invalid ACPI table signature (length must be 4 characters)\n", 149bf6fac21SJung-uk Kim Signature); 150a88e22b7SJung-uk Kim return (AE_ERROR); 151a88e22b7SJung-uk Kim } 152a88e22b7SJung-uk Kim 153a88e22b7SJung-uk Kim /* 154a88e22b7SJung-uk Kim * Some slack for the two strange tables whose name is different than 155a88e22b7SJung-uk Kim * their signatures: MADT->APIC and FADT->FACP. 156a88e22b7SJung-uk Kim */ 157a88e22b7SJung-uk Kim if (!strcmp (Signature, "MADT")) 158a88e22b7SJung-uk Kim { 159a88e22b7SJung-uk Kim Signature = "APIC"; 160a88e22b7SJung-uk Kim } 161a88e22b7SJung-uk Kim else if (!strcmp (Signature, "FADT")) 162a88e22b7SJung-uk Kim { 163a88e22b7SJung-uk Kim Signature = "FACP"; 164a88e22b7SJung-uk Kim } 165a88e22b7SJung-uk Kim 166bf6fac21SJung-uk Kim GetTemplate: 167a88e22b7SJung-uk Kim TableData = AcpiDmGetTableData (Signature); 168a88e22b7SJung-uk Kim if (TableData) 169a88e22b7SJung-uk Kim { 170a88e22b7SJung-uk Kim if (!TableData->Template) 171a88e22b7SJung-uk Kim { 172bf6fac21SJung-uk Kim fprintf (stderr, "%4.4s: No template available\n", Signature); 173a88e22b7SJung-uk Kim return (AE_ERROR); 174a88e22b7SJung-uk Kim } 175a88e22b7SJung-uk Kim } 176a88e22b7SJung-uk Kim else if (!AcpiUtIsSpecialTable (Signature)) 177a88e22b7SJung-uk Kim { 178a88e22b7SJung-uk Kim fprintf (stderr, 179bf6fac21SJung-uk Kim "%4.4s: Unrecognized ACPI table signature\n", Signature); 180a88e22b7SJung-uk Kim return (AE_ERROR); 181a88e22b7SJung-uk Kim } 182a88e22b7SJung-uk Kim 183a88e22b7SJung-uk Kim Status = AdInitialize (); 184a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 185a88e22b7SJung-uk Kim { 186a88e22b7SJung-uk Kim return (Status); 187a88e22b7SJung-uk Kim } 188a88e22b7SJung-uk Kim 189a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (Signature, TableData); 190313a0c13SJung-uk Kim 191313a0c13SJung-uk Kim 192313a0c13SJung-uk Kim /* Shutdown ACPICA subsystem */ 193313a0c13SJung-uk Kim 194313a0c13SJung-uk Kim (void) AcpiTerminate (); 195313a0c13SJung-uk Kim CmDeleteCaches (); 196a88e22b7SJung-uk Kim return (Status); 197a88e22b7SJung-uk Kim } 198a88e22b7SJung-uk Kim 199a88e22b7SJung-uk Kim 200a88e22b7SJung-uk Kim /******************************************************************************* 201a88e22b7SJung-uk Kim * 202a88e22b7SJung-uk Kim * FUNCTION: DtCreateAllTemplates 203a88e22b7SJung-uk Kim * 204a88e22b7SJung-uk Kim * PARAMETERS: None 205a88e22b7SJung-uk Kim * 206a88e22b7SJung-uk Kim * RETURN: Status 207a88e22b7SJung-uk Kim * 208a88e22b7SJung-uk Kim * DESCRIPTION: Create all currently defined template files 209a88e22b7SJung-uk Kim * 210a88e22b7SJung-uk Kim ******************************************************************************/ 211a88e22b7SJung-uk Kim 212a88e22b7SJung-uk Kim static ACPI_STATUS 213a88e22b7SJung-uk Kim DtCreateAllTemplates ( 214a88e22b7SJung-uk Kim void) 215a88e22b7SJung-uk Kim { 216*a371a5fdSJung-uk Kim const ACPI_DMTABLE_DATA *TableData; 217a88e22b7SJung-uk Kim ACPI_STATUS Status; 218a88e22b7SJung-uk Kim 219a88e22b7SJung-uk Kim 220a88e22b7SJung-uk Kim Status = AdInitialize (); 221a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 222a88e22b7SJung-uk Kim { 223a88e22b7SJung-uk Kim return (Status); 224a88e22b7SJung-uk Kim } 225a88e22b7SJung-uk Kim 226a88e22b7SJung-uk Kim fprintf (stderr, "Creating all supported Template files\n"); 227a88e22b7SJung-uk Kim 228a88e22b7SJung-uk Kim /* Walk entire ACPI table data structure */ 229a88e22b7SJung-uk Kim 230a88e22b7SJung-uk Kim for (TableData = AcpiDmTableData; TableData->Signature; TableData++) 231a88e22b7SJung-uk Kim { 232a88e22b7SJung-uk Kim /* If table has a template, create the template file */ 233a88e22b7SJung-uk Kim 234a88e22b7SJung-uk Kim if (TableData->Template) 235a88e22b7SJung-uk Kim { 236a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (TableData->Signature, 237a88e22b7SJung-uk Kim TableData); 238a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 239a88e22b7SJung-uk Kim { 240a88e22b7SJung-uk Kim return (Status); 241a88e22b7SJung-uk Kim } 242a88e22b7SJung-uk Kim } 243a88e22b7SJung-uk Kim } 244a88e22b7SJung-uk Kim 245a88e22b7SJung-uk Kim /* 246f38b0f21SJung-uk Kim * Create the special ACPI tables: 247a88e22b7SJung-uk Kim * 1) DSDT/SSDT are AML tables, not data tables 248a88e22b7SJung-uk Kim * 2) FACS and RSDP have non-standard headers 249a88e22b7SJung-uk Kim */ 250a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_SIG_DSDT, NULL); 251a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 252a88e22b7SJung-uk Kim { 253a88e22b7SJung-uk Kim return (Status); 254a88e22b7SJung-uk Kim } 255a88e22b7SJung-uk Kim 256a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_SIG_SSDT, NULL); 257a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 258a88e22b7SJung-uk Kim { 259a88e22b7SJung-uk Kim return (Status); 260a88e22b7SJung-uk Kim } 261a88e22b7SJung-uk Kim 262a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_SIG_FACS, NULL); 263a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 264a88e22b7SJung-uk Kim { 265a88e22b7SJung-uk Kim return (Status); 266a88e22b7SJung-uk Kim } 267a88e22b7SJung-uk Kim 268a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_RSDP_NAME, NULL); 269a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 270a88e22b7SJung-uk Kim { 271a88e22b7SJung-uk Kim return (Status); 272a88e22b7SJung-uk Kim } 273a88e22b7SJung-uk Kim 274a88e22b7SJung-uk Kim return (AE_OK); 275a88e22b7SJung-uk Kim } 276a88e22b7SJung-uk Kim 277a88e22b7SJung-uk Kim 278a88e22b7SJung-uk Kim /******************************************************************************* 279a88e22b7SJung-uk Kim * 280a88e22b7SJung-uk Kim * FUNCTION: DtCreateOneTemplate 281a88e22b7SJung-uk Kim * 282a88e22b7SJung-uk Kim * PARAMETERS: Signature - ACPI signature, NULL terminated. 283a88e22b7SJung-uk Kim * TableData - Entry in ACPI table data structure. 284a88e22b7SJung-uk Kim * NULL if a special ACPI table. 285a88e22b7SJung-uk Kim * 286a88e22b7SJung-uk Kim * RETURN: Status 287a88e22b7SJung-uk Kim * 288a88e22b7SJung-uk Kim * DESCRIPTION: Create one template source file for the requested ACPI table. 289a88e22b7SJung-uk Kim * 290a88e22b7SJung-uk Kim ******************************************************************************/ 291a88e22b7SJung-uk Kim 292a88e22b7SJung-uk Kim static ACPI_STATUS 293a88e22b7SJung-uk Kim DtCreateOneTemplate ( 294a88e22b7SJung-uk Kim char *Signature, 295*a371a5fdSJung-uk Kim const ACPI_DMTABLE_DATA *TableData) 296a88e22b7SJung-uk Kim { 297a88e22b7SJung-uk Kim char *DisasmFilename; 298a88e22b7SJung-uk Kim FILE *File; 299a88e22b7SJung-uk Kim ACPI_STATUS Status = AE_OK; 300ed17e06eSJung-uk Kim ACPI_SIZE Actual; 301a88e22b7SJung-uk Kim 302a88e22b7SJung-uk Kim 303a88e22b7SJung-uk Kim /* New file will have a .asl suffix */ 304a88e22b7SJung-uk Kim 305a88e22b7SJung-uk Kim DisasmFilename = FlGenerateFilename ( 306a88e22b7SJung-uk Kim Signature, FILE_SUFFIX_ASL_CODE); 307a88e22b7SJung-uk Kim if (!DisasmFilename) 308a88e22b7SJung-uk Kim { 309a88e22b7SJung-uk Kim fprintf (stderr, "Could not generate output filename\n"); 310a88e22b7SJung-uk Kim return (AE_ERROR); 311a88e22b7SJung-uk Kim } 312a88e22b7SJung-uk Kim 313a88e22b7SJung-uk Kim /* Probably should prompt to overwrite the file */ 314a88e22b7SJung-uk Kim 315a88e22b7SJung-uk Kim AcpiUtStrlwr (DisasmFilename); 316a88e22b7SJung-uk Kim File = fopen (DisasmFilename, "w+"); 317a88e22b7SJung-uk Kim if (!File) 318a88e22b7SJung-uk Kim { 319a88e22b7SJung-uk Kim fprintf (stderr, "Could not open output file %s\n", DisasmFilename); 320a88e22b7SJung-uk Kim return (AE_ERROR); 321a88e22b7SJung-uk Kim } 322a88e22b7SJung-uk Kim 323a88e22b7SJung-uk Kim /* Emit the common file header */ 324a88e22b7SJung-uk Kim 325a88e22b7SJung-uk Kim AcpiOsRedirectOutput (File); 326a88e22b7SJung-uk Kim 3273c1812acSJung-uk Kim AcpiOsPrintf ("/*\n"); 3283c1812acSJung-uk Kim AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * ")); 3293c1812acSJung-uk Kim 330a88e22b7SJung-uk Kim AcpiOsPrintf (" * Template for [%4.4s] ACPI Table\n", 331a88e22b7SJung-uk Kim Signature); 332a88e22b7SJung-uk Kim 333a88e22b7SJung-uk Kim /* Dump the actual ACPI table */ 334a88e22b7SJung-uk Kim 335a88e22b7SJung-uk Kim if (TableData) 336a88e22b7SJung-uk Kim { 337a88e22b7SJung-uk Kim /* Normal case, tables that appear in AcpiDmTableData */ 338a88e22b7SJung-uk Kim 339a88e22b7SJung-uk Kim if (Gbl_VerboseTemplates) 340a88e22b7SJung-uk Kim { 341a88e22b7SJung-uk Kim AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]" 342a88e22b7SJung-uk Kim " FieldName : HexFieldValue\n */\n\n"); 343a88e22b7SJung-uk Kim } 344a88e22b7SJung-uk Kim else 345a88e22b7SJung-uk Kim { 346a88e22b7SJung-uk Kim AcpiOsPrintf (" * Format: [ByteLength]" 347a88e22b7SJung-uk Kim " FieldName : HexFieldValue\n */\n\n"); 348a88e22b7SJung-uk Kim } 349a88e22b7SJung-uk Kim 350a88e22b7SJung-uk Kim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 351a88e22b7SJung-uk Kim TableData->Template)); 352a88e22b7SJung-uk Kim } 353a88e22b7SJung-uk Kim else 354a88e22b7SJung-uk Kim { 355ed17e06eSJung-uk Kim /* Special ACPI tables - DSDT, SSDT, FADT, RSDP */ 356a88e22b7SJung-uk Kim 357a88e22b7SJung-uk Kim AcpiOsPrintf (" */\n\n"); 358a88e22b7SJung-uk Kim if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT)) 359a88e22b7SJung-uk Kim { 360ed17e06eSJung-uk Kim Actual = fwrite (TemplateDsdt, 1, sizeof (TemplateDsdt) -1, File); 361ed17e06eSJung-uk Kim if (Actual != sizeof (TemplateDsdt) -1) 362ed17e06eSJung-uk Kim { 363ed17e06eSJung-uk Kim fprintf (stderr, 364ed17e06eSJung-uk Kim "Could not write to output file %s\n", DisasmFilename); 365ed17e06eSJung-uk Kim Status = AE_ERROR; 366ed17e06eSJung-uk Kim goto Cleanup; 367ed17e06eSJung-uk Kim } 368a88e22b7SJung-uk Kim } 369a88e22b7SJung-uk Kim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT)) 370a88e22b7SJung-uk Kim { 371ed17e06eSJung-uk Kim Actual = fwrite (TemplateSsdt, 1, sizeof (TemplateSsdt) -1, File); 372ed17e06eSJung-uk Kim if (Actual != sizeof (TemplateSsdt) -1) 373ed17e06eSJung-uk Kim { 374ed17e06eSJung-uk Kim fprintf (stderr, 375ed17e06eSJung-uk Kim "Could not write to output file %s\n", DisasmFilename); 376ed17e06eSJung-uk Kim Status = AE_ERROR; 377ed17e06eSJung-uk Kim goto Cleanup; 378a88e22b7SJung-uk Kim } 379ed17e06eSJung-uk Kim } 380ed17e06eSJung-uk Kim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS)) /* FADT */ 381a88e22b7SJung-uk Kim { 382a88e22b7SJung-uk Kim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 383a88e22b7SJung-uk Kim TemplateFacs)); 384a88e22b7SJung-uk Kim } 385a88e22b7SJung-uk Kim else if (ACPI_COMPARE_NAME (Signature, ACPI_RSDP_NAME)) 386a88e22b7SJung-uk Kim { 387a88e22b7SJung-uk Kim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 388a88e22b7SJung-uk Kim TemplateRsdp)); 389a88e22b7SJung-uk Kim } 390a88e22b7SJung-uk Kim else 391a88e22b7SJung-uk Kim { 392a88e22b7SJung-uk Kim fprintf (stderr, 393a88e22b7SJung-uk Kim "%4.4s, Unrecognized ACPI table signature\n", Signature); 394ed17e06eSJung-uk Kim Status = AE_ERROR; 395ed17e06eSJung-uk Kim goto Cleanup; 396a88e22b7SJung-uk Kim } 397a88e22b7SJung-uk Kim } 398a88e22b7SJung-uk Kim 399a88e22b7SJung-uk Kim fprintf (stderr, 400a88e22b7SJung-uk Kim "Created ACPI table template for [%4.4s], written to \"%s\"\n", 401a88e22b7SJung-uk Kim Signature, DisasmFilename); 402a88e22b7SJung-uk Kim 403ed17e06eSJung-uk Kim Cleanup: 404a88e22b7SJung-uk Kim fclose (File); 405a88e22b7SJung-uk Kim AcpiOsRedirectOutput (stdout); 406a88e22b7SJung-uk Kim return (Status); 407a88e22b7SJung-uk Kim } 408