1209734Sjkim/****************************************************************************** 2209734Sjkim * 3209734Sjkim * Module Name: dttemplate - ACPI table template generation 4209734Sjkim * 5209734Sjkim *****************************************************************************/ 6209734Sjkim 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 9209734Sjkim * All rights reserved. 10209734Sjkim * 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. 25209734Sjkim * 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. 29209734Sjkim * 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 */ 43209734Sjkim 44209746Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h> 45209746Sjkim#include <contrib/dev/acpica/include/acapps.h> 46209746Sjkim#include <contrib/dev/acpica/compiler/dtcompiler.h> 47209746Sjkim#include <contrib/dev/acpica/compiler/dttemplate.h> /* Contains the hex ACPI table templates */ 48209734Sjkim 49209734Sjkim#define _COMPONENT DT_COMPILER 50209734Sjkim ACPI_MODULE_NAME ("dttemplate") 51209734Sjkim 52209734Sjkim 53209734Sjkim/* Local prototypes */ 54209734Sjkim 55209734Sjkimstatic BOOLEAN 56209734SjkimAcpiUtIsSpecialTable ( 57209734Sjkim char *Signature); 58209734Sjkim 59209734Sjkimstatic ACPI_STATUS 60306536SjkimDtCreateOneTemplateFile ( 61306536Sjkim char *Signature, 62306536Sjkim UINT32 TableCount); 63306536Sjkim 64306536Sjkimstatic ACPI_STATUS 65209734SjkimDtCreateOneTemplate ( 66209734Sjkim char *Signature, 67306536Sjkim UINT32 TableCount, 68284460Sjkim const ACPI_DMTABLE_DATA *TableData); 69209734Sjkim 70209734Sjkimstatic ACPI_STATUS 71209734SjkimDtCreateAllTemplates ( 72209734Sjkim void); 73209734Sjkim 74306536Sjkimstatic int 75306536SjkimDtEmitDefinitionBlock ( 76306536Sjkim FILE *File, 77306536Sjkim char *Filename, 78306536Sjkim char *Signature, 79306536Sjkim UINT32 Instance); 80209734Sjkim 81306536Sjkim 82209734Sjkim/******************************************************************************* 83209734Sjkim * 84209734Sjkim * FUNCTION: AcpiUtIsSpecialTable 85209734Sjkim * 86209734Sjkim * PARAMETERS: Signature - ACPI table signature 87209734Sjkim * 88209734Sjkim * RETURN: TRUE if signature is a special ACPI table 89209734Sjkim * 90209734Sjkim * DESCRIPTION: Check for valid ACPI tables that are not in the main ACPI 91209734Sjkim * table data structure (AcpiDmTableData). 92209734Sjkim * 93209734Sjkim ******************************************************************************/ 94209734Sjkim 95209734Sjkimstatic BOOLEAN 96209734SjkimAcpiUtIsSpecialTable ( 97209734Sjkim char *Signature) 98209734Sjkim{ 99209734Sjkim 100209734Sjkim if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT) || 101306536Sjkim ACPI_COMPARE_NAME (Signature, ACPI_SIG_OSDT) || 102209734Sjkim ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT) || 103209734Sjkim ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS) || 104209734Sjkim ACPI_COMPARE_NAME (Signature, ACPI_RSDP_NAME)) 105209734Sjkim { 106209734Sjkim return (TRUE); 107209734Sjkim } 108209734Sjkim 109209734Sjkim return (FALSE); 110209734Sjkim} 111209734Sjkim 112209734Sjkim 113209734Sjkim/******************************************************************************* 114209734Sjkim * 115209734Sjkim * FUNCTION: DtCreateTemplates 116209734Sjkim * 117306536Sjkim * PARAMETERS: argv - Standard command line arguments 118209734Sjkim * 119209734Sjkim * RETURN: Status 120209734Sjkim * 121209734Sjkim * DESCRIPTION: Create one or more template files. 122209734Sjkim * 123209734Sjkim ******************************************************************************/ 124209734Sjkim 125209734SjkimACPI_STATUS 126209734SjkimDtCreateTemplates ( 127306536Sjkim char **argv) 128209734Sjkim{ 129306536Sjkim char *Signature; 130306536Sjkim char *End; 131306536Sjkim unsigned long TableCount; 132306536Sjkim ACPI_STATUS Status = AE_OK; 133209734Sjkim 134209734Sjkim 135209734Sjkim AslInitializeGlobals (); 136209734Sjkim 137306536Sjkim Status = AdInitialize (); 138306536Sjkim if (ACPI_FAILURE (Status)) 139306536Sjkim { 140306536Sjkim return (Status); 141306536Sjkim } 142209734Sjkim 143306536Sjkim /* 144306536Sjkim * Special cases for DSDT, ALL, and '*' 145306536Sjkim */ 146306536Sjkim 147306536Sjkim /* Default (no signature option) is DSDT */ 148306536Sjkim 149306536Sjkim if (AcpiGbl_Optind < 3) 150253690Sjkim { 151306536Sjkim Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, 0); 152306536Sjkim goto Exit; 153253690Sjkim } 154253690Sjkim 155306536Sjkim AcpiGbl_Optind--; 156306536Sjkim Signature = argv[AcpiGbl_Optind]; 157253690Sjkim AcpiUtStrupr (Signature); 158306536Sjkim 159306536Sjkim /* 160306536Sjkim * Multiple SSDT support (-T <ssdt count>) 161306536Sjkim */ 162306536Sjkim TableCount = strtoul (Signature, &End, 0); 163306536Sjkim if (Signature != End) 164209734Sjkim { 165306536Sjkim /* The count is used for table ID and method name - max is 254(+1) */ 166306536Sjkim 167306536Sjkim if (TableCount > 254) 168306536Sjkim { 169306536Sjkim fprintf (stderr, "%u SSDTs requested, maximum is 254\n", 170306536Sjkim (unsigned int) TableCount); 171306536Sjkim 172306536Sjkim Status = AE_LIMIT; 173306536Sjkim goto Exit; 174306536Sjkim } 175306536Sjkim 176306536Sjkim Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, TableCount); 177306536Sjkim goto Exit; 178306536Sjkim } 179306536Sjkim 180306536Sjkim if (!strcmp (Signature, "ALL")) 181306536Sjkim { 182253690Sjkim /* Create all available/known templates */ 183253690Sjkim 184209734Sjkim Status = DtCreateAllTemplates (); 185306536Sjkim goto Exit; 186209734Sjkim } 187209734Sjkim 188209734Sjkim /* 189306536Sjkim * Normal case: Create template for each signature 190306536Sjkim */ 191306536Sjkim while (argv[AcpiGbl_Optind]) 192306536Sjkim { 193306536Sjkim Signature = argv[AcpiGbl_Optind]; 194306536Sjkim AcpiUtStrupr (Signature); 195306536Sjkim 196306536Sjkim Status = DtCreateOneTemplateFile (Signature, 0); 197306536Sjkim if (ACPI_FAILURE (Status)) 198306536Sjkim { 199306536Sjkim goto Exit; 200306536Sjkim } 201306536Sjkim 202306536Sjkim AcpiGbl_Optind++; 203306536Sjkim } 204306536Sjkim 205306536Sjkim 206306536SjkimExit: 207306536Sjkim /* Shutdown ACPICA subsystem */ 208306536Sjkim 209306536Sjkim (void) AcpiTerminate (); 210306536Sjkim CmDeleteCaches (); 211306536Sjkim return (Status); 212306536Sjkim} 213306536Sjkim 214306536Sjkim 215306536Sjkim/******************************************************************************* 216306536Sjkim * 217306536Sjkim * FUNCTION: DtCreateOneTemplateFile 218306536Sjkim * 219306536Sjkim * PARAMETERS: Signature - ACPI table signature 220306536Sjkim * 221306536Sjkim * RETURN: Status 222306536Sjkim * 223306536Sjkim * DESCRIPTION: Create one template file of the requested signature. 224306536Sjkim * 225306536Sjkim ******************************************************************************/ 226306536Sjkim 227306536Sjkimstatic ACPI_STATUS 228306536SjkimDtCreateOneTemplateFile ( 229306536Sjkim char *Signature, 230306536Sjkim UINT32 TableCount) 231306536Sjkim{ 232306536Sjkim const ACPI_DMTABLE_DATA *TableData; 233306536Sjkim ACPI_STATUS Status; 234306536Sjkim 235306536Sjkim 236306536Sjkim /* 237209734Sjkim * Validate signature and get the template data: 238209734Sjkim * 1) Signature must be 4 characters 239209734Sjkim * 2) Signature must be a recognized ACPI table 240209734Sjkim * 3) There must be a template associated with the signature 241209734Sjkim */ 242209734Sjkim if (strlen (Signature) != ACPI_NAME_SIZE) 243209734Sjkim { 244253690Sjkim fprintf (stderr, 245306536Sjkim "%s: Invalid ACPI table signature " 246306536Sjkim "(length must be 4 characters)\n", Signature); 247209734Sjkim return (AE_ERROR); 248209734Sjkim } 249209734Sjkim 250209734Sjkim /* 251209734Sjkim * Some slack for the two strange tables whose name is different than 252209734Sjkim * their signatures: MADT->APIC and FADT->FACP. 253209734Sjkim */ 254209734Sjkim if (!strcmp (Signature, "MADT")) 255209734Sjkim { 256209734Sjkim Signature = "APIC"; 257209734Sjkim } 258209734Sjkim else if (!strcmp (Signature, "FADT")) 259209734Sjkim { 260209734Sjkim Signature = "FACP"; 261209734Sjkim } 262209734Sjkim 263306536Sjkim /* TableData will point to the template */ 264306536Sjkim 265209734Sjkim TableData = AcpiDmGetTableData (Signature); 266209734Sjkim if (TableData) 267209734Sjkim { 268209734Sjkim if (!TableData->Template) 269209734Sjkim { 270253690Sjkim fprintf (stderr, "%4.4s: No template available\n", Signature); 271209734Sjkim return (AE_ERROR); 272209734Sjkim } 273209734Sjkim } 274209734Sjkim else if (!AcpiUtIsSpecialTable (Signature)) 275209734Sjkim { 276209734Sjkim fprintf (stderr, 277253690Sjkim "%4.4s: Unrecognized ACPI table signature\n", Signature); 278209734Sjkim return (AE_ERROR); 279209734Sjkim } 280209734Sjkim 281306536Sjkim Status = DtCreateOneTemplate (Signature, TableCount, TableData); 282209734Sjkim return (Status); 283209734Sjkim} 284209734Sjkim 285209734Sjkim 286209734Sjkim/******************************************************************************* 287209734Sjkim * 288209734Sjkim * FUNCTION: DtCreateAllTemplates 289209734Sjkim * 290209734Sjkim * PARAMETERS: None 291209734Sjkim * 292209734Sjkim * RETURN: Status 293209734Sjkim * 294209734Sjkim * DESCRIPTION: Create all currently defined template files 295209734Sjkim * 296209734Sjkim ******************************************************************************/ 297209734Sjkim 298209734Sjkimstatic ACPI_STATUS 299209734SjkimDtCreateAllTemplates ( 300209734Sjkim void) 301209734Sjkim{ 302284460Sjkim const ACPI_DMTABLE_DATA *TableData; 303209734Sjkim ACPI_STATUS Status; 304209734Sjkim 305209734Sjkim 306209734Sjkim fprintf (stderr, "Creating all supported Template files\n"); 307209734Sjkim 308209734Sjkim /* Walk entire ACPI table data structure */ 309209734Sjkim 310209734Sjkim for (TableData = AcpiDmTableData; TableData->Signature; TableData++) 311209734Sjkim { 312209734Sjkim /* If table has a template, create the template file */ 313209734Sjkim 314209734Sjkim if (TableData->Template) 315209734Sjkim { 316209734Sjkim Status = DtCreateOneTemplate (TableData->Signature, 317306536Sjkim 0, TableData); 318209734Sjkim if (ACPI_FAILURE (Status)) 319209734Sjkim { 320209734Sjkim return (Status); 321209734Sjkim } 322209734Sjkim } 323209734Sjkim } 324209734Sjkim 325209734Sjkim /* 326237412Sjkim * Create the special ACPI tables: 327209734Sjkim * 1) DSDT/SSDT are AML tables, not data tables 328209734Sjkim * 2) FACS and RSDP have non-standard headers 329209734Sjkim */ 330306536Sjkim Status = DtCreateOneTemplate (ACPI_SIG_DSDT, 0, NULL); 331209734Sjkim if (ACPI_FAILURE (Status)) 332209734Sjkim { 333209734Sjkim return (Status); 334209734Sjkim } 335209734Sjkim 336306536Sjkim Status = DtCreateOneTemplate (ACPI_SIG_SSDT, 0, NULL); 337209734Sjkim if (ACPI_FAILURE (Status)) 338209734Sjkim { 339209734Sjkim return (Status); 340209734Sjkim } 341209734Sjkim 342306536Sjkim Status = DtCreateOneTemplate (ACPI_SIG_OSDT, 0, NULL); 343209734Sjkim if (ACPI_FAILURE (Status)) 344209734Sjkim { 345209734Sjkim return (Status); 346209734Sjkim } 347209734Sjkim 348306536Sjkim Status = DtCreateOneTemplate (ACPI_SIG_FACS, 0, NULL); 349209734Sjkim if (ACPI_FAILURE (Status)) 350209734Sjkim { 351209734Sjkim return (Status); 352209734Sjkim } 353209734Sjkim 354306536Sjkim Status = DtCreateOneTemplate (ACPI_RSDP_NAME, 0, NULL); 355306536Sjkim if (ACPI_FAILURE (Status)) 356306536Sjkim { 357306536Sjkim return (Status); 358306536Sjkim } 359306536Sjkim 360209734Sjkim return (AE_OK); 361209734Sjkim} 362209734Sjkim 363209734Sjkim 364209734Sjkim/******************************************************************************* 365209734Sjkim * 366209734Sjkim * FUNCTION: DtCreateOneTemplate 367209734Sjkim * 368209734Sjkim * PARAMETERS: Signature - ACPI signature, NULL terminated. 369306536Sjkim * TableCount - Used for SSDTs in same file as DSDT 370209734Sjkim * TableData - Entry in ACPI table data structure. 371209734Sjkim * NULL if a special ACPI table. 372209734Sjkim * 373209734Sjkim * RETURN: Status 374209734Sjkim * 375209734Sjkim * DESCRIPTION: Create one template source file for the requested ACPI table. 376209734Sjkim * 377209734Sjkim ******************************************************************************/ 378209734Sjkim 379209734Sjkimstatic ACPI_STATUS 380209734SjkimDtCreateOneTemplate ( 381209734Sjkim char *Signature, 382306536Sjkim UINT32 TableCount, 383284460Sjkim const ACPI_DMTABLE_DATA *TableData) 384209734Sjkim{ 385209734Sjkim char *DisasmFilename; 386209734Sjkim FILE *File; 387209734Sjkim ACPI_STATUS Status = AE_OK; 388306536Sjkim int Actual; 389306536Sjkim UINT32 i; 390209734Sjkim 391209734Sjkim 392209734Sjkim /* New file will have a .asl suffix */ 393209734Sjkim 394209734Sjkim DisasmFilename = FlGenerateFilename ( 395209734Sjkim Signature, FILE_SUFFIX_ASL_CODE); 396209734Sjkim if (!DisasmFilename) 397209734Sjkim { 398209734Sjkim fprintf (stderr, "Could not generate output filename\n"); 399209734Sjkim return (AE_ERROR); 400209734Sjkim } 401209734Sjkim 402306536Sjkim AcpiUtStrlwr (DisasmFilename); 403306536Sjkim if (!UtQueryForOverwrite (DisasmFilename)) 404306536Sjkim { 405306536Sjkim return (AE_ERROR); 406306536Sjkim } 407209734Sjkim 408209734Sjkim File = fopen (DisasmFilename, "w+"); 409209734Sjkim if (!File) 410209734Sjkim { 411306536Sjkim fprintf (stderr, "Could not open output file %s\n", 412306536Sjkim DisasmFilename); 413209734Sjkim return (AE_ERROR); 414209734Sjkim } 415209734Sjkim 416209734Sjkim /* Emit the common file header */ 417209734Sjkim 418209734Sjkim AcpiOsRedirectOutput (File); 419209734Sjkim 420213806Sjkim AcpiOsPrintf ("/*\n"); 421213806Sjkim AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * ")); 422213806Sjkim 423306536Sjkim if (TableCount == 0) 424306536Sjkim { 425306536Sjkim AcpiOsPrintf (" * Template for [%4.4s] ACPI Table", 426306536Sjkim Signature); 427306536Sjkim } 428306536Sjkim else 429306536Sjkim { 430306536Sjkim AcpiOsPrintf (" * Template for [%4.4s] and %u [SSDT] ACPI Tables", 431306536Sjkim Signature, TableCount); 432306536Sjkim } 433209734Sjkim 434209734Sjkim /* Dump the actual ACPI table */ 435209734Sjkim 436209734Sjkim if (TableData) 437209734Sjkim { 438209734Sjkim /* Normal case, tables that appear in AcpiDmTableData */ 439209734Sjkim 440306536Sjkim AcpiOsPrintf (" (static data table)\n"); 441306536Sjkim 442209734Sjkim if (Gbl_VerboseTemplates) 443209734Sjkim { 444209734Sjkim AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]" 445209734Sjkim " FieldName : HexFieldValue\n */\n\n"); 446209734Sjkim } 447209734Sjkim else 448209734Sjkim { 449209734Sjkim AcpiOsPrintf (" * Format: [ByteLength]" 450306536Sjkim " FieldName : HexFieldValue\n */\n"); 451209734Sjkim } 452209734Sjkim 453209734Sjkim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 454209734Sjkim TableData->Template)); 455209734Sjkim } 456209734Sjkim else 457209734Sjkim { 458306536Sjkim /* Special ACPI tables - DSDT, SSDT, OSDT, FACS, RSDP */ 459209734Sjkim 460306536Sjkim AcpiOsPrintf (" (AML byte code table)\n"); 461306536Sjkim AcpiOsPrintf (" */\n"); 462306536Sjkim 463209734Sjkim if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT)) 464209734Sjkim { 465306536Sjkim Actual = DtEmitDefinitionBlock ( 466306536Sjkim File, DisasmFilename, ACPI_SIG_DSDT, 1); 467306536Sjkim if (Actual < 0) 468243347Sjkim { 469243347Sjkim Status = AE_ERROR; 470243347Sjkim goto Cleanup; 471243347Sjkim } 472306536Sjkim 473306536Sjkim /* Emit any requested SSDTs into the same file */ 474306536Sjkim 475306536Sjkim for (i = 1; i <= TableCount; i++) 476306536Sjkim { 477306536Sjkim Actual = DtEmitDefinitionBlock ( 478306536Sjkim File, DisasmFilename, ACPI_SIG_SSDT, i + 1); 479306536Sjkim if (Actual < 0) 480306536Sjkim { 481306536Sjkim Status = AE_ERROR; 482306536Sjkim goto Cleanup; 483306536Sjkim } 484306536Sjkim } 485209734Sjkim } 486209734Sjkim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT)) 487209734Sjkim { 488306536Sjkim Actual = DtEmitDefinitionBlock ( 489306536Sjkim File, DisasmFilename, ACPI_SIG_SSDT, 1); 490306536Sjkim if (Actual < 0) 491243347Sjkim { 492243347Sjkim Status = AE_ERROR; 493243347Sjkim goto Cleanup; 494243347Sjkim } 495209734Sjkim } 496306536Sjkim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_OSDT)) 497209734Sjkim { 498306536Sjkim Actual = DtEmitDefinitionBlock ( 499306536Sjkim File, DisasmFilename, ACPI_SIG_OSDT, 1); 500306536Sjkim if (Actual < 0) 501306536Sjkim { 502306536Sjkim Status = AE_ERROR; 503306536Sjkim goto Cleanup; 504306536Sjkim } 505306536Sjkim } 506306536Sjkim else if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS)) 507306536Sjkim { 508209734Sjkim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 509209734Sjkim TemplateFacs)); 510209734Sjkim } 511209734Sjkim else if (ACPI_COMPARE_NAME (Signature, ACPI_RSDP_NAME)) 512209734Sjkim { 513209734Sjkim AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER, 514209734Sjkim TemplateRsdp)); 515209734Sjkim } 516209734Sjkim else 517209734Sjkim { 518209734Sjkim fprintf (stderr, 519209734Sjkim "%4.4s, Unrecognized ACPI table signature\n", Signature); 520243347Sjkim Status = AE_ERROR; 521243347Sjkim goto Cleanup; 522209734Sjkim } 523209734Sjkim } 524209734Sjkim 525306536Sjkim if (TableCount == 0) 526306536Sjkim { 527306536Sjkim fprintf (stderr, 528306536Sjkim "Created ACPI table template for [%4.4s], " 529306536Sjkim "written to \"%s\"\n", 530306536Sjkim Signature, DisasmFilename); 531306536Sjkim } 532306536Sjkim else 533306536Sjkim { 534306536Sjkim fprintf (stderr, 535306536Sjkim "Created ACPI table templates for [%4.4s] " 536306536Sjkim "and %u [SSDT], written to \"%s\"\n", 537306536Sjkim Signature, TableCount, DisasmFilename); 538306536Sjkim } 539209734Sjkim 540243347SjkimCleanup: 541209734Sjkim fclose (File); 542209734Sjkim AcpiOsRedirectOutput (stdout); 543209734Sjkim return (Status); 544209734Sjkim} 545306536Sjkim 546306536Sjkim 547306536Sjkim/******************************************************************************* 548306536Sjkim * 549306536Sjkim * FUNCTION: DtEmitDefinitionBlock 550306536Sjkim * 551306536Sjkim * PARAMETERS: File - An open file for the block 552306536Sjkim * Filename - Filename for same, for error msg(s) 553306536Sjkim * Signature - ACPI signature for the block 554306536Sjkim * Instance - Used for multiple SSDTs in the same file 555306536Sjkim * 556306536Sjkim * RETURN: Status from fprintf 557306536Sjkim * 558306536Sjkim * DESCRIPTION: Emit the raw ASL for a complete Definition Block (DSDT or SSDT) 559306536Sjkim * 560306536Sjkim * Note: The AMLFileName parameter for DefinitionBlock is left as a NULL 561306536Sjkim * string. This allows the compiler to create the output AML filename from 562306536Sjkim * the input filename. 563306536Sjkim * 564306536Sjkim ******************************************************************************/ 565306536Sjkim 566306536Sjkimstatic int 567306536SjkimDtEmitDefinitionBlock ( 568306536Sjkim FILE *File, 569306536Sjkim char *Filename, 570306536Sjkim char *Signature, 571306536Sjkim UINT32 Instance) 572306536Sjkim{ 573306536Sjkim int Status; 574306536Sjkim 575306536Sjkim 576306536Sjkim Status = fprintf (File, 577306536Sjkim "DefinitionBlock (\"\", \"%4.4s\", 2, \"Intel\", \"_%4.4s_%.2X\", 0x00000001)\n" 578306536Sjkim "{\n" 579306536Sjkim " Method (%2.2s%.2X)\n" 580306536Sjkim " {\n" 581306536Sjkim " }\n" 582306536Sjkim "}\n\n", 583306536Sjkim Signature, Signature, Instance, Signature, Instance); 584306536Sjkim 585306536Sjkim if (Status < 0) 586306536Sjkim { 587306536Sjkim fprintf (stderr, 588306536Sjkim "Could not write %4.4s to output file %s\n", 589306536Sjkim Signature, Filename); 590306536Sjkim } 591306536Sjkim 592306536Sjkim return (Status); 593306536Sjkim} 594