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 /* 8ec3fc72fSJung-uk Kim * Copyright (C) 2000 - 2012, 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, 62a88e22b7SJung-uk Kim 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 { 115a88e22b7SJung-uk Kim ACPI_DMTABLE_DATA *TableData; 116a88e22b7SJung-uk Kim ACPI_STATUS Status; 117a88e22b7SJung-uk Kim 118a88e22b7SJung-uk Kim 119a88e22b7SJung-uk Kim AslInitializeGlobals (); 120a88e22b7SJung-uk Kim AcpiUtStrupr (Signature); 121a88e22b7SJung-uk Kim 122a88e22b7SJung-uk Kim /* Create all known templates if requested */ 123a88e22b7SJung-uk Kim 124d052a1ccSJung-uk Kim if (!ACPI_STRNCMP (Signature, "ALL", 3) || 125d052a1ccSJung-uk Kim !ACPI_STRCMP (Signature, "*")) 126a88e22b7SJung-uk Kim { 127a88e22b7SJung-uk Kim Status = DtCreateAllTemplates (); 128a88e22b7SJung-uk Kim return (Status); 129a88e22b7SJung-uk Kim } 130a88e22b7SJung-uk Kim 131a88e22b7SJung-uk Kim /* 132a88e22b7SJung-uk Kim * Validate signature and get the template data: 133a88e22b7SJung-uk Kim * 1) Signature must be 4 characters 134a88e22b7SJung-uk Kim * 2) Signature must be a recognized ACPI table 135a88e22b7SJung-uk Kim * 3) There must be a template associated with the signature 136a88e22b7SJung-uk Kim */ 137a88e22b7SJung-uk Kim if (strlen (Signature) != ACPI_NAME_SIZE) 138a88e22b7SJung-uk Kim { 139a88e22b7SJung-uk Kim fprintf (stderr, "%s, Invalid ACPI table signature\n", Signature); 140a88e22b7SJung-uk Kim return (AE_ERROR); 141a88e22b7SJung-uk Kim } 142a88e22b7SJung-uk Kim 143a88e22b7SJung-uk Kim /* 144a88e22b7SJung-uk Kim * Some slack for the two strange tables whose name is different than 145a88e22b7SJung-uk Kim * their signatures: MADT->APIC and FADT->FACP. 146a88e22b7SJung-uk Kim */ 147a88e22b7SJung-uk Kim if (!strcmp (Signature, "MADT")) 148a88e22b7SJung-uk Kim { 149a88e22b7SJung-uk Kim Signature = "APIC"; 150a88e22b7SJung-uk Kim } 151a88e22b7SJung-uk Kim else if (!strcmp (Signature, "FADT")) 152a88e22b7SJung-uk Kim { 153a88e22b7SJung-uk Kim Signature = "FACP"; 154a88e22b7SJung-uk Kim } 155a88e22b7SJung-uk Kim 156a88e22b7SJung-uk Kim TableData = AcpiDmGetTableData (Signature); 157a88e22b7SJung-uk Kim if (TableData) 158a88e22b7SJung-uk Kim { 159a88e22b7SJung-uk Kim if (!TableData->Template) 160a88e22b7SJung-uk Kim { 161a88e22b7SJung-uk Kim fprintf (stderr, "%4.4s, No template available\n", Signature); 162a88e22b7SJung-uk Kim return (AE_ERROR); 163a88e22b7SJung-uk Kim } 164a88e22b7SJung-uk Kim } 165a88e22b7SJung-uk Kim else if (!AcpiUtIsSpecialTable (Signature)) 166a88e22b7SJung-uk Kim { 167a88e22b7SJung-uk Kim fprintf (stderr, 168a88e22b7SJung-uk Kim "%4.4s, Unrecognized ACPI table signature\n", Signature); 169a88e22b7SJung-uk Kim return (AE_ERROR); 170a88e22b7SJung-uk Kim } 171a88e22b7SJung-uk Kim 172a88e22b7SJung-uk Kim Status = AdInitialize (); 173a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 174a88e22b7SJung-uk Kim { 175a88e22b7SJung-uk Kim return (Status); 176a88e22b7SJung-uk Kim } 177a88e22b7SJung-uk Kim 178a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (Signature, TableData); 179a88e22b7SJung-uk Kim return (Status); 180a88e22b7SJung-uk Kim } 181a88e22b7SJung-uk Kim 182a88e22b7SJung-uk Kim 183a88e22b7SJung-uk Kim /******************************************************************************* 184a88e22b7SJung-uk Kim * 185a88e22b7SJung-uk Kim * FUNCTION: DtCreateAllTemplates 186a88e22b7SJung-uk Kim * 187a88e22b7SJung-uk Kim * PARAMETERS: None 188a88e22b7SJung-uk Kim * 189a88e22b7SJung-uk Kim * RETURN: Status 190a88e22b7SJung-uk Kim * 191a88e22b7SJung-uk Kim * DESCRIPTION: Create all currently defined template files 192a88e22b7SJung-uk Kim * 193a88e22b7SJung-uk Kim ******************************************************************************/ 194a88e22b7SJung-uk Kim 195a88e22b7SJung-uk Kim static ACPI_STATUS 196a88e22b7SJung-uk Kim DtCreateAllTemplates ( 197a88e22b7SJung-uk Kim void) 198a88e22b7SJung-uk Kim { 199a88e22b7SJung-uk Kim ACPI_DMTABLE_DATA *TableData; 200a88e22b7SJung-uk Kim ACPI_STATUS Status; 201a88e22b7SJung-uk Kim 202a88e22b7SJung-uk Kim 203a88e22b7SJung-uk Kim Status = AdInitialize (); 204a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 205a88e22b7SJung-uk Kim { 206a88e22b7SJung-uk Kim return (Status); 207a88e22b7SJung-uk Kim } 208a88e22b7SJung-uk Kim 209a88e22b7SJung-uk Kim fprintf (stderr, "Creating all supported Template files\n"); 210a88e22b7SJung-uk Kim 211a88e22b7SJung-uk Kim /* Walk entire ACPI table data structure */ 212a88e22b7SJung-uk Kim 213a88e22b7SJung-uk Kim for (TableData = AcpiDmTableData; TableData->Signature; TableData++) 214a88e22b7SJung-uk Kim { 215a88e22b7SJung-uk Kim /* If table has a template, create the template file */ 216a88e22b7SJung-uk Kim 217a88e22b7SJung-uk Kim if (TableData->Template) 218a88e22b7SJung-uk Kim { 219a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (TableData->Signature, 220a88e22b7SJung-uk Kim TableData); 221a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 222a88e22b7SJung-uk Kim { 223a88e22b7SJung-uk Kim return (Status); 224a88e22b7SJung-uk Kim } 225a88e22b7SJung-uk Kim } 226a88e22b7SJung-uk Kim } 227a88e22b7SJung-uk Kim 228a88e22b7SJung-uk Kim /* 229*f38b0f21SJung-uk Kim * Create the special ACPI tables: 230a88e22b7SJung-uk Kim * 1) DSDT/SSDT are AML tables, not data tables 231a88e22b7SJung-uk Kim * 2) FACS and RSDP have non-standard headers 232a88e22b7SJung-uk Kim */ 233a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_SIG_DSDT, NULL); 234a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 235a88e22b7SJung-uk Kim { 236a88e22b7SJung-uk Kim return (Status); 237a88e22b7SJung-uk Kim } 238a88e22b7SJung-uk Kim 239a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_SIG_SSDT, NULL); 240a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 241a88e22b7SJung-uk Kim { 242a88e22b7SJung-uk Kim return (Status); 243a88e22b7SJung-uk Kim } 244a88e22b7SJung-uk Kim 245a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_SIG_FACS, NULL); 246a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 247a88e22b7SJung-uk Kim { 248a88e22b7SJung-uk Kim return (Status); 249a88e22b7SJung-uk Kim } 250a88e22b7SJung-uk Kim 251a88e22b7SJung-uk Kim Status = DtCreateOneTemplate (ACPI_RSDP_NAME, NULL); 252a88e22b7SJung-uk Kim if (ACPI_FAILURE (Status)) 253a88e22b7SJung-uk Kim { 254a88e22b7SJung-uk Kim return (Status); 255a88e22b7SJung-uk Kim } 256a88e22b7SJung-uk Kim 257a88e22b7SJung-uk Kim return (AE_OK); 258a88e22b7SJung-uk Kim } 259a88e22b7SJung-uk Kim 260a88e22b7SJung-uk Kim 261a88e22b7SJung-uk Kim /******************************************************************************* 262a88e22b7SJung-uk Kim * 263a88e22b7SJung-uk Kim * FUNCTION: DtCreateOneTemplate 264a88e22b7SJung-uk Kim * 265a88e22b7SJung-uk Kim * PARAMETERS: Signature - ACPI signature, NULL terminated. 266a88e22b7SJung-uk Kim * TableData - Entry in ACPI table data structure. 267a88e22b7SJung-uk Kim * NULL if a special ACPI table. 268a88e22b7SJung-uk Kim * 269a88e22b7SJung-uk Kim * RETURN: Status 270a88e22b7SJung-uk Kim * 271a88e22b7SJung-uk Kim * DESCRIPTION: Create one template source file for the requested ACPI table. 272a88e22b7SJung-uk Kim * 273a88e22b7SJung-uk Kim ******************************************************************************/ 274a88e22b7SJung-uk Kim 275a88e22b7SJung-uk Kim static ACPI_STATUS 276a88e22b7SJung-uk Kim DtCreateOneTemplate ( 277a88e22b7SJung-uk Kim char *Signature, 278a88e22b7SJung-uk Kim ACPI_DMTABLE_DATA *TableData) 279a88e22b7SJung-uk Kim { 280a88e22b7SJung-uk Kim char *DisasmFilename; 281a88e22b7SJung-uk Kim FILE *File; 282a88e22b7SJung-uk Kim ACPI_STATUS Status = AE_OK; 283a88e22b7SJung-uk Kim 284a88e22b7SJung-uk Kim 285a88e22b7SJung-uk Kim /* New file will have a .asl suffix */ 286a88e22b7SJung-uk Kim 287a88e22b7SJung-uk Kim DisasmFilename = FlGenerateFilename ( 288a88e22b7SJung-uk Kim Signature, FILE_SUFFIX_ASL_CODE); 289a88e22b7SJung-uk Kim if (!DisasmFilename) 290a88e22b7SJung-uk Kim { 291a88e22b7SJung-uk Kim fprintf (stderr, "Could not generate output filename\n"); 292a88e22b7SJung-uk Kim return (AE_ERROR); 293a88e22b7SJung-uk Kim } 294a88e22b7SJung-uk Kim 295a88e22b7SJung-uk Kim /* Probably should prompt to overwrite the file */ 296a88e22b7SJung-uk Kim 297a88e22b7SJung-uk Kim AcpiUtStrlwr (DisasmFilename); 298a88e22b7SJung-uk Kim File = fopen (DisasmFilename, "w+"); 299a88e22b7SJung-uk Kim if (!File) 300a88e22b7SJung-uk Kim { 301a88e22b7SJung-uk Kim fprintf (stderr, "Could not open output file %s\n", DisasmFilename); 302a88e22b7SJung-uk Kim return (AE_ERROR); 303a88e22b7SJung-uk Kim } 304a88e22b7SJung-uk Kim 305a88e22b7SJung-uk Kim /* Emit the common file header */ 306a88e22b7SJung-uk Kim 307a88e22b7SJung-uk Kim AcpiOsRedirectOutput (File); 308a88e22b7SJung-uk Kim 3093c1812acSJung-uk Kim AcpiOsPrintf ("/*\n"); 3103c1812acSJung-uk Kim AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * ")); 3113c1812acSJung-uk Kim 312a88e22b7SJung-uk Kim AcpiOsPrintf (" * Template for [%4.4s] ACPI Table\n", 313a88e22b7SJung-uk Kim Signature); 314a88e22b7SJung-uk Kim 315a88e22b7SJung-uk Kim /* Dump the actual ACPI table */ 316a88e22b7SJung-uk Kim 317a88e22b7SJung-uk Kim if (TableData) 318a88e22b7SJung-uk Kim { 319a88e22b7SJung-uk Kim /* Normal case, tables that appear in AcpiDmTableData */ 320a88e22b7SJung-uk Kim 321a88e22b7SJung-uk Kim if (Gbl_VerboseTemplates) 322a88e22b7SJung-uk Kim { 323a88e22b7SJung-uk Kim AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]" 324a88e22b7SJung-uk Kim " FieldName : HexFieldValue\n */\n\n"); 325a88e22b7SJung-uk Kim } 326a88e22b7SJung-uk Kim else 327a88e22b7SJung-uk Kim { 328a88e22b7SJung-uk Kim AcpiOsPrintf (" * Format: [ByteLength]" 329a88e22b7SJung-uk Kim " FieldName : HexFieldValue\n */\n\n"); 330a88e22b7SJung-uk Kim } 331a88e22b7SJung-uk Kim 332a88e22b7SJung-uk Kim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 333a88e22b7SJung-uk Kim TableData->Template)); 334a88e22b7SJung-uk Kim } 335a88e22b7SJung-uk Kim else 336a88e22b7SJung-uk Kim { 337a88e22b7SJung-uk Kim /* Special ACPI tables - DSDT, SSDT, FACS, RSDP */ 338a88e22b7SJung-uk Kim 339a88e22b7SJung-uk Kim AcpiOsPrintf (" */\n\n"); 340a88e22b7SJung-uk Kim if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT)) 341a88e22b7SJung-uk Kim { 342a88e22b7SJung-uk Kim fwrite (TemplateDsdt, sizeof (TemplateDsdt) -1, 1, File); 343a88e22b7SJung-uk Kim } 344a88e22b7SJung-uk Kim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT)) 345a88e22b7SJung-uk Kim { 346a88e22b7SJung-uk Kim fwrite (TemplateSsdt, sizeof (TemplateSsdt) -1, 1, File); 347a88e22b7SJung-uk Kim } 348a88e22b7SJung-uk Kim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS)) 349a88e22b7SJung-uk Kim { 350a88e22b7SJung-uk Kim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 351a88e22b7SJung-uk Kim TemplateFacs)); 352a88e22b7SJung-uk Kim } 353a88e22b7SJung-uk Kim else if (ACPI_COMPARE_NAME (Signature, ACPI_RSDP_NAME)) 354a88e22b7SJung-uk Kim { 355a88e22b7SJung-uk Kim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 356a88e22b7SJung-uk Kim TemplateRsdp)); 357a88e22b7SJung-uk Kim } 358a88e22b7SJung-uk Kim else 359a88e22b7SJung-uk Kim { 360a88e22b7SJung-uk Kim fprintf (stderr, 361a88e22b7SJung-uk Kim "%4.4s, Unrecognized ACPI table signature\n", Signature); 362a88e22b7SJung-uk Kim return (AE_ERROR); 363a88e22b7SJung-uk Kim } 364a88e22b7SJung-uk Kim } 365a88e22b7SJung-uk Kim 366a88e22b7SJung-uk Kim fprintf (stderr, 367a88e22b7SJung-uk Kim "Created ACPI table template for [%4.4s], written to \"%s\"\n", 368a88e22b7SJung-uk Kim Signature, DisasmFilename); 369a88e22b7SJung-uk Kim 370a88e22b7SJung-uk Kim fclose (File); 371a88e22b7SJung-uk Kim AcpiOsRedirectOutput (stdout); 372a88e22b7SJung-uk Kim ACPI_FREE (DisasmFilename); 373a88e22b7SJung-uk Kim return (Status); 374a88e22b7SJung-uk Kim } 375