|
Packit Service |
1fb00e |
/******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* Module Name: cvcompiler - ASL-/ASL+ converter functions
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
*****************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*
|
|
Packit Service |
1fb00e |
* Copyright (C) 2000 - 2018, Intel Corp.
|
|
Packit Service |
1fb00e |
* All rights reserved.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
1fb00e |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
1fb00e |
* are met:
|
|
Packit Service |
1fb00e |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit Service |
1fb00e |
* notice, this list of conditions, and the following disclaimer,
|
|
Packit Service |
1fb00e |
* without modification.
|
|
Packit Service |
1fb00e |
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
Packit Service |
1fb00e |
* substantially similar to the "NO WARRANTY" disclaimer below
|
|
Packit Service |
1fb00e |
* ("Disclaimer") and any redistribution must be conditioned upon
|
|
Packit Service |
1fb00e |
* including a substantially similar Disclaimer requirement for further
|
|
Packit Service |
1fb00e |
* binary redistribution.
|
|
Packit Service |
1fb00e |
* 3. Neither the names of the above-listed copyright holders nor the names
|
|
Packit Service |
1fb00e |
* of any contributors may be used to endorse or promote products derived
|
|
Packit Service |
1fb00e |
* from this software without specific prior written permission.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* Alternatively, this software may be distributed under the terms of the
|
|
Packit Service |
1fb00e |
* GNU General Public License ("GPL") version 2 as published by the Free
|
|
Packit Service |
1fb00e |
* Software Foundation.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* NO WARRANTY
|
|
Packit Service |
1fb00e |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
Packit Service |
1fb00e |
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
Packit Service |
1fb00e |
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
|
|
Packit Service |
1fb00e |
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
Packit Service |
1fb00e |
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit Service |
1fb00e |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
Packit Service |
1fb00e |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
Packit Service |
1fb00e |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
Packit Service |
1fb00e |
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
Packit Service |
1fb00e |
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit Service |
1fb00e |
* POSSIBILITY OF SUCH DAMAGES.
|
|
Packit Service |
1fb00e |
*/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
#include "aslcompiler.h"
|
|
Packit Service |
1fb00e |
#include "acparser.h"
|
|
Packit Service |
1fb00e |
#include "amlcode.h"
|
|
Packit Service |
1fb00e |
#include "acdebug.h"
|
|
Packit Service |
1fb00e |
#include "acconvert.h"
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Local prototypes */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
static void
|
|
Packit Service |
1fb00e |
CvPrintInclude(
|
|
Packit Service |
1fb00e |
ACPI_FILE_NODE *FNode,
|
|
Packit Service |
1fb00e |
UINT32 Level);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
static BOOLEAN
|
|
Packit Service |
1fb00e |
CvListIsSingleton (
|
|
Packit Service |
1fb00e |
ACPI_COMMENT_NODE *CommentList);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvPrintOneCommentList
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: CommentList
|
|
Packit Service |
1fb00e |
* Level
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Prints all comments within the given list.
|
|
Packit Service |
1fb00e |
* This is referred as ASL_CV_PRINT_ONE_COMMENT_LIST.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
CvPrintOneCommentList (
|
|
Packit Service |
1fb00e |
ACPI_COMMENT_NODE *CommentList,
|
|
Packit Service |
1fb00e |
UINT32 Level)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
ACPI_COMMENT_NODE *Current = CommentList;
|
|
Packit Service |
1fb00e |
ACPI_COMMENT_NODE *Previous;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
while (Current)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
Previous = Current;
|
|
Packit Service |
1fb00e |
if (Current->Comment)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiDmIndent(Level);
|
|
Packit Service |
1fb00e |
AcpiOsPrintf("%s\n", Current->Comment);
|
|
Packit Service |
1fb00e |
Current->Comment = NULL;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Current = Current->Next;
|
|
Packit Service |
1fb00e |
AcpiOsReleaseObject(AcpiGbl_RegCommentCache, Previous);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvListIsSingleton
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: CommentList - check to see if this is a single item list.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: BOOLEAN
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Returns TRUE if CommentList only contains 1 node.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
static BOOLEAN
|
|
Packit Service |
1fb00e |
CvListIsSingleton (
|
|
Packit Service |
1fb00e |
ACPI_COMMENT_NODE *CommentList)
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (!CommentList)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return (FALSE);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
else if (CommentList->Next)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return (FALSE);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
return (TRUE);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvPrintOneCommentType
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Op
|
|
Packit Service |
1fb00e |
* CommentType
|
|
Packit Service |
1fb00e |
* EndStr - String to print after printing the comment
|
|
Packit Service |
1fb00e |
* Level - indentation level for comment lists.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Prints all comments of CommentType within the given Op and
|
|
Packit Service |
1fb00e |
* clears the printed comment from the Op.
|
|
Packit Service |
1fb00e |
* This is referred as ASL_CV_PRINT_ONE_COMMENT.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
CvPrintOneCommentType (
|
|
Packit Service |
1fb00e |
ACPI_PARSE_OBJECT *Op,
|
|
Packit Service |
1fb00e |
UINT8 CommentType,
|
|
Packit Service |
1fb00e |
char* EndStr,
|
|
Packit Service |
1fb00e |
UINT32 Level)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
BOOLEAN CommentExists = FALSE;
|
|
Packit Service |
1fb00e |
char **CommentToPrint = NULL;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
switch (CommentType)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
case AML_COMMENT_STANDARD:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (CvListIsSingleton (Op->Common.CommentList))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintOneCommentList (Op->Common.CommentList, Level);
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("\n");
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
else
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintOneCommentList (Op->Common.CommentList, Level);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Op->Common.CommentList = NULL;
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case AML_COMMENT_ENDBLK:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Op->Common.EndBlkComment)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintOneCommentList (Op->Common.EndBlkComment, Level);
|
|
Packit Service |
1fb00e |
Op->Common.EndBlkComment = NULL;
|
|
Packit Service |
1fb00e |
AcpiDmIndent(Level);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case AMLCOMMENT_INLINE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CommentToPrint = &Op->Common.InlineComment;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case AML_COMMENT_END_NODE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CommentToPrint = &Op->Common.EndNodeComment;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case AML_NAMECOMMENT:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CommentToPrint = &Op->Common.NameComment;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
case AML_COMMENT_CLOSE_BRACE:
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CommentToPrint = &Op->Common.CloseBraceComment;
|
|
Packit Service |
1fb00e |
break;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
default:
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (*CommentToPrint)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CommentExists = TRUE;
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("%s", *CommentToPrint);
|
|
Packit Service |
1fb00e |
*CommentToPrint = NULL;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (CommentExists && EndStr)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("%s", EndStr);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvCloseBraceWriteComment
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Op
|
|
Packit Service |
1fb00e |
* Level
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Print a close brace } and any open brace comments associated
|
|
Packit Service |
1fb00e |
* with this parse object.
|
|
Packit Service |
1fb00e |
* This is referred as ASL_CV_CLOSE_BRACE.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
CvCloseBraceWriteComment(
|
|
Packit Service |
1fb00e |
ACPI_PARSE_OBJECT *Op,
|
|
Packit Service |
1fb00e |
UINT32 Level)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (!AcpiGbl_CaptureComments)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("}");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CvPrintOneCommentType (Op, AML_COMMENT_ENDBLK, NULL, Level);
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("}");
|
|
Packit Service |
1fb00e |
CvPrintOneCommentType (Op, AML_COMMENT_CLOSE_BRACE, NULL, Level);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvCloseParenWriteComment
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Op
|
|
Packit Service |
1fb00e |
* Level
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Print a closing paren ) and any end node comments associated
|
|
Packit Service |
1fb00e |
* with this parse object.
|
|
Packit Service |
1fb00e |
* This is referred as ASL_CV_CLOSE_PAREN.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
CvCloseParenWriteComment(
|
|
Packit Service |
1fb00e |
ACPI_PARSE_OBJECT *Op,
|
|
Packit Service |
1fb00e |
UINT32 Level)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (!AcpiGbl_CaptureComments)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (")");
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*
|
|
Packit Service |
1fb00e |
* If this op has a BLOCK_BRACE, then output the comment when the
|
|
Packit Service |
1fb00e |
* disassembler calls CvCloseBraceWriteComment
|
|
Packit Service |
1fb00e |
*/
|
|
Packit Service |
1fb00e |
if (AcpiDmBlockType (Op) == BLOCK_PAREN)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintOneCommentType (Op, AML_COMMENT_ENDBLK, NULL, Level);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsPrintf (")");
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Op->Common.EndNodeComment)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintOneCommentType (Op, AML_COMMENT_END_NODE, NULL, Level);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
else if ((Op->Common.Parent->Common.AmlOpcode == AML_IF_OP) &&
|
|
Packit Service |
1fb00e |
Op->Common.Parent->Common.EndNodeComment)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintOneCommentType (Op->Common.Parent,
|
|
Packit Service |
1fb00e |
AML_COMMENT_END_NODE, NULL, Level);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvFileHasSwitched
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Op
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: BOOLEAN
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Determine whether if a file has switched.
|
|
Packit Service |
1fb00e |
* TRUE - file has switched.
|
|
Packit Service |
1fb00e |
* FALSE - file has not switched.
|
|
Packit Service |
1fb00e |
* This is referred as ASL_CV_FILE_HAS_SWITCHED.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
BOOLEAN
|
|
Packit Service |
1fb00e |
CvFileHasSwitched(
|
|
Packit Service |
1fb00e |
ACPI_PARSE_OBJECT *Op)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (Op->Common.CvFilename &&
|
|
Packit Service |
1fb00e |
AcpiGbl_CurrentFilename &&
|
|
Packit Service |
1fb00e |
AcpiUtStricmp(Op->Common.CvFilename, AcpiGbl_CurrentFilename))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return (TRUE);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
return (FALSE);
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvPrintInclude
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: FNode - Write an Include statement for the file that is pointed
|
|
Packit Service |
1fb00e |
* by FNode->File.
|
|
Packit Service |
1fb00e |
* Level - indentation level
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Write the ASL Include statement for FNode->File in the file
|
|
Packit Service |
1fb00e |
* indicated by FNode->Parent->File. Note this function emits
|
|
Packit Service |
1fb00e |
* actual ASL code rather than comments. This switches the output
|
|
Packit Service |
1fb00e |
* file to FNode->Parent->File.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
static void
|
|
Packit Service |
1fb00e |
CvPrintInclude(
|
|
Packit Service |
1fb00e |
ACPI_FILE_NODE *FNode,
|
|
Packit Service |
1fb00e |
UINT32 Level)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
if (!FNode || FNode->IncludeWritten)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
return;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CvDbgPrint ("Writing include for %s within %s\n",
|
|
Packit Service |
1fb00e |
FNode->Filename, FNode->Parent->Filename);
|
|
Packit Service |
1fb00e |
AcpiOsRedirectOutput (FNode->Parent->File);
|
|
Packit Service |
1fb00e |
CvPrintOneCommentList (FNode->IncludeComment, Level);
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiDmIndent (Level);
|
|
Packit Service |
1fb00e |
AcpiOsPrintf ("Include (\"%s\")\n", FNode->Filename);
|
|
Packit Service |
1fb00e |
CvDbgPrint ("emitted the following: Include (\"%s\")\n",
|
|
Packit Service |
1fb00e |
FNode->Filename);
|
|
Packit Service |
1fb00e |
FNode->IncludeWritten = TRUE;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*******************************************************************************
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* FUNCTION: CvSwitchFiles
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* PARAMETERS: Level - indentation level
|
|
Packit Service |
1fb00e |
* Op
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* RETURN: None
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
* DESCRIPTION: Switch the outputfile and write ASL Include statement. Note,
|
|
Packit Service |
1fb00e |
* this function emits actual ASL code rather than comments.
|
|
Packit Service |
1fb00e |
* This is referred as ASL_CV_SWITCH_FILES.
|
|
Packit Service |
1fb00e |
*
|
|
Packit Service |
1fb00e |
******************************************************************************/
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
void
|
|
Packit Service |
1fb00e |
CvSwitchFiles(
|
|
Packit Service |
1fb00e |
UINT32 Level,
|
|
Packit Service |
1fb00e |
ACPI_PARSE_OBJECT *Op)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
char *Filename = Op->Common.CvFilename;
|
|
Packit Service |
1fb00e |
ACPI_FILE_NODE *FNode;
|
|
Packit Service |
1fb00e |
ACPI_FILE_NODE *Current;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
CvDbgPrint ("Switching from %s to %s\n", AcpiGbl_CurrentFilename,
|
|
Packit Service |
1fb00e |
Filename);
|
|
Packit Service |
1fb00e |
FNode = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot);
|
|
Packit Service |
1fb00e |
if (!FNode)
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
/*
|
|
Packit Service |
1fb00e |
* At this point, each Filename should exist in AcpiGbl_FileTreeRoot
|
|
Packit Service |
1fb00e |
* if it does not exist, then abort.
|
|
Packit Service |
1fb00e |
*/
|
|
Packit Service |
1fb00e |
FlDeleteFile (ASL_FILE_AML_OUTPUT);
|
|
Packit Service |
1fb00e |
sprintf (MsgBuffer, "\"Cannot find %s\" - %s",
|
|
Packit Service |
1fb00e |
Filename, strerror (errno));
|
|
Packit Service |
1fb00e |
AslCommonError (ASL_ERROR, ASL_MSG_OPEN, 0, 0, 0, 0,
|
|
Packit Service |
1fb00e |
NULL, MsgBuffer);
|
|
Packit Service |
1fb00e |
AslAbort ();
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
Current = FNode;
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/*
|
|
Packit Service |
1fb00e |
* If the previous file is a descendent of the current file,
|
|
Packit Service |
1fb00e |
* make sure that Include statements from the current file
|
|
Packit Service |
1fb00e |
* to the previous have been emitted.
|
|
Packit Service |
1fb00e |
*/
|
|
Packit Service |
1fb00e |
while (Current &&
|
|
Packit Service |
1fb00e |
Current->Parent &&
|
|
Packit Service |
1fb00e |
AcpiUtStricmp (Current->Filename, AcpiGbl_CurrentFilename))
|
|
Packit Service |
1fb00e |
{
|
|
Packit Service |
1fb00e |
CvPrintInclude (Current, Level);
|
|
Packit Service |
1fb00e |
Current = Current->Parent;
|
|
Packit Service |
1fb00e |
}
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
/* Redirect output to Op->Common.CvFilename */
|
|
Packit Service |
1fb00e |
|
|
Packit Service |
1fb00e |
AcpiOsRedirectOutput (FNode->File);
|
|
Packit Service |
1fb00e |
AcpiGbl_CurrentFilename = FNode->Filename;
|
|
Packit Service |
1fb00e |
}
|