From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web12.6594.1580736735359737388 for ; Mon, 03 Feb 2020 05:32:15 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: liming.gao@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Feb 2020 05:32:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,398,1574150400"; d="scan'208";a="254061407" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga004.fm.intel.com with ESMTP; 03 Feb 2020 05:32:14 -0800 Received: from shsmsx602.ccr.corp.intel.com (10.109.6.142) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 3 Feb 2020 05:32:14 -0800 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX602.ccr.corp.intel.com (10.109.6.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 3 Feb 2020 21:32:13 +0800 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.1713.004; Mon, 3 Feb 2020 21:32:13 +0800 From: "Liming Gao" To: Pierre Gondois , "devel@edk2.groups.io" CC: "ard.biesheuvel@linaro.org" , "Feng, Bob C" , Sami Mujawar , nd Subject: Re: [edk2-devel] [PATCH v2 1/1] BaseTools: Script for converting .aml to .hex Thread-Topic: [edk2-devel] [PATCH v2 1/1] BaseTools: Script for converting .aml to .hex Thread-Index: AQHV0UnuYbRsRVPYlE+rtbyjdfEhYagJbb6Q//+SxYCAAIjLcA== Date: Mon, 3 Feb 2020 13:32:13 +0000 Message-ID: <919a6261d1cd482cb3a308f9f8431014@intel.com> References: <20200117171734.10924-1-pierre.gondois@arm.com> <2d68ea8e33e64f34a5b64b970262cce4@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.2.0.6 dlp-product: dlpe-windows dlp-reaction: no-action x-originating-ip: [10.239.127.36] MIME-Version: 1.0 Return-Path: liming.gao@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Pierre: If so, this is not the error for other ACPI table. I suggest to print IN= FO message and directly return with success return value. Thanks Liming > -----Original Message----- > From: Pierre Gondois > Sent: Monday, February 3, 2020 9:20 PM > To: devel@edk2.groups.io; Gao, Liming > Cc: ard.biesheuvel@linaro.org; Feng, Bob C ; Sami = Mujawar ; nd > Subject: RE: [edk2-devel] [PATCH v2 1/1] BaseTools: Script for convertin= g .aml to .hex >=20 > Hello Liming, > Currently, the only ACPI tables which contain AML bytecode are the DSDT = and SSDT tables. We don't need to generate a ".hex" file for > other ACPI tables or any other file since we would like to parse AML byt= ecode. > However this is only a safety check and this can be removed if desired. >=20 > Regards, > Pierre >=20 > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Liming Ga= o via Groups.Io > Sent: 03 February 2020 11:58 > To: Pierre Gondois ; devel@edk2.groups.io > Cc: ard.biesheuvel@linaro.org; Feng, Bob C ; Sami = Mujawar ; nd > Subject: Re: [edk2-devel] [PATCH v2 1/1] BaseTools: Script for convertin= g .aml to .hex >=20 > Pierre: > Sorry for late response. I have one comment. Why only allows "DSDT" or= "SSDT" in Signature? >=20 > Thanks > Liming > > -----Original Message----- > > From: Pierre Gondois > > Sent: Thursday, January 23, 2020 1:32 AM > > To: Pierre Gondois ; devel@edk2.groups.io > > Cc: ard.biesheuvel@linaro.org; Feng, Bob C ; > > Gao, Liming ; Sami Mujawar > > ; nd > > Subject: RE: [PATCH v2 1/1] BaseTools: Script for converting .aml to > > .hex > > > > Hello everyone, > > Do you have any input on the patch? > > > > Regards, > > Pierre > > > > -----Original Message----- > > From: PierreGondois > > Sent: 17 January 2020 17:18 > > To: devel@edk2.groups.io > > Cc: Pierre Gondois ; > > ard.biesheuvel@linaro.org; bob.c.feng@intel.com; liming.gao@intel.com; > > Sami Mujawar ; nd > > Subject: [PATCH v2 1/1] BaseTools: Script for converting .aml to .hex > > > > From: Pierre Gondois > > > > The "-tc" option of the iasl compiler allows to generate a .hex file c= ontaining a C array storing AML bytecode. > > > > An online discussion suggested that this "-tc" option was specific to > > the iasl compiler and it shouldn't be relied on. This conversation is = available at: > > https://edk2.groups.io/g/devel/topic/39786201#49659 > > > > A way to address this issue is to implement a compiler independent scr= ipt that takes an AML file as input, and generates a .hex file. > > > > This patch implements a Python script that converts an AML file to a .= hex file, containing a C array storing AML bytecode. > > This scipt has been tested with the AML output from the following comp= ilers supported by the EDKII implementation: > > * Intel ASL compiler > > * Microsoft ASL compiler > > > > Signed-off-by: Pierre Gondois > > --- > > > > The changes can be seen at > > https://github.com/PierreARM/edk2/commits/718_asl_to_hex_script_conver > > ter_2 > > > > Notes: > > v2: > > - Script converting AML to .hex file [Pierre] > > > > BaseTools/BinWrappers/PosixLike/AmlToHex | 14 ++ > > BaseTools/BinWrappers/WindowsLike/AmlToHex.bat | 3 + > > BaseTools/Conf/build_rule.template | 3 + > > BaseTools/Source/Python/AmlToHex/AmlToHex.py | 155 ++++++++++++++++= ++++ > > 4 files changed, 175 insertions(+) > > > > diff --git a/BaseTools/BinWrappers/PosixLike/AmlToHex > > b/BaseTools/BinWrappers/PosixLike/AmlToHex > > new file mode 100755 > > index > > 0000000000000000000000000000000000000000..1dd28e966288f6ea4fc52d42e2dc > > 7b1f74226c23 > > --- /dev/null > > +++ b/BaseTools/BinWrappers/PosixLike/AmlToHex > > @@ -0,0 +1,14 @@ > > +#!/usr/bin/env bash > > +#python `dirname $0`/RunToolFromSource.py `basename $0` $* > > + > > +# If a ${PYTHON_COMMAND} command is available, use it in preference > > +to python if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then > > + python_exe=3D${PYTHON_COMMAND} > > +fi > > + > > +full_cmd=3D${BASH_SOURCE:-$0} # see > > +http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is > > +not a good choice here dir=3D$(dirname "$full_cmd") exe=3D$(basename > > +"$full_cmd") > > + > > +export PYTHONPATH=3D"$dir/../../Source/Python${PYTHONPATH:+:"$PYTHONP= ATH"}" > > +exec "${python_exe:-python}" "$dir/../../Source/Python/$exe/$exe.py" = "$@" > > diff --git a/BaseTools/BinWrappers/WindowsLike/AmlToHex.bat > > b/BaseTools/BinWrappers/WindowsLike/AmlToHex.bat > > new file mode 100644 > > index > > 0000000000000000000000000000000000000000..9616cd893bec9902451e6d8591f5 > > 37cc408bd5e5 > > --- /dev/null > > +++ b/BaseTools/BinWrappers/WindowsLike/AmlToHex.bat > > @@ -0,0 +1,3 @@ > > +@setlocal > > +@set ToolName=3D%~n0% > > +@%PYTHON_COMMAND% > > +%BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %* > > diff --git a/BaseTools/Conf/build_rule.template > > b/BaseTools/Conf/build_rule.template > > index > > 51748bc0655a5c656258a3007b4db6b2dc941ea0..0822b681fcd9f61c6508e6f93ffc > > 31fa70fd7059 100755 > > --- a/BaseTools/Conf/build_rule.template > > +++ b/BaseTools/Conf/build_rule.template > > @@ -1,6 +1,7 @@ > > # > > # Copyright (c) 2007 - 2018, Intel Corporation. All rights > > reserved.
# Portions copyright (c) 2008 - 2010, Apple Inc. All > > rights reserved.
> > +# Copyright (c) 2020, ARM Ltd. All rights reserved.
> > # SPDX-License-Identifier: BSD-2-Clause-Patent # > > > > @@ -427,12 +428,14 @@ > > "$(ASLPP)" $(DEPS_FLAGS) $(ASLPP_FLAGS) $(INC) /I${s_path} > > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${= s_base}.iii > > Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}= .iiii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii > > "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} > > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii > > + -AmlToHex $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml > > > > > > Trim --asl-file --asl-deps -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_= base}.i -i $(INC_LIST) ${src} > > "$(ASLPP)" $(DEPS_FLAGS) $(ASLPP_FLAGS) $(INC) -I${s_path} > > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${= s_base}.iii > > Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}= .iiii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii > > "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} > > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii > > + -AmlToHex $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.aml > > > > [C-Code-File.AcpiTable] > > > > diff --git a/BaseTools/Source/Python/AmlToHex/AmlToHex.py > > b/BaseTools/Source/Python/AmlToHex/AmlToHex.py > > new file mode 100644 > > index > > 0000000000000000000000000000000000000000..e8e7ace3a68532bc625afb1e7440 > > 4c4e4b0205dd > > --- /dev/null > > +++ b/BaseTools/Source/Python/AmlToHex/AmlToHex.py > > @@ -0,0 +1,155 @@ > > +## @file > > +# > > +# Convert an AML file to a .hex file containing the AML bytecode > > +stored in a # C array. > > +# By default, "Tables\Dsdt.aml" will generate "Tables\Dsdt.hex". > > +# "Tables\Dsdt.hex" will contain a C array named "dsdt_aml_code" that > > +contains # the AML bytecode. > > +# > > +# Copyright (c) 2020, ARM Limited. All rights reserved.
# # > > +SPDX-License-Identifier: BSD-2-Clause-Patent # > > + > > +import argparse > > +import Common.EdkLogger as EdkLogger > > +from Common.BuildToolError import * > > +import sys > > +import os > > + > > +## Parse the command line arguments. > > +# > > +# @retval A argparse.NameSpace instance, containing parsed values. > > +# > > +def ParseArgs(): > > + # Initialize the parser. > > + Parser =3D argparse.ArgumentParser( > > + description=3D"Convert an AML file to a .hex file containing th= e AML " + \ > > + "bytecode stored in a C array. By default, " + \ > > + "\"Tables\\Dsdt.aml\" will generate" + \ > > + "\"Tables\\Dsdt.hex\". \"Tables\\Dsdt.hex\" will " = + \ > > + "contain a C array named \"dsdt_aml_code\" that " += \ > > + "contains the AML bytecode." > > + ) > > + > > + # Define the possible arguments. > > + Parser.add_argument( > > + dest=3D"InputFile", > > + help=3D"Path to an input AML file to generate a .hex file from.= " > > + ) > > + Parser.add_argument( > > + "-o", "--out-dir", dest=3D"OutDir", > > + help=3D"Output directory where the .hex file will be generated.= " + \ > > + "Default is the input file's directory." > > + ) > > + > > + # Parse the input arguments. > > + Args =3D Parser.parse_args() > > + SplitInputName =3D "" > > + > > + if not os.path.exists(Args.InputFile): > > + EdkLogger.error(__file__, FILE_OPEN_FAILURE, > > + ExtraData=3DArgs.InputFile) > > + return > > + else: > > + with open(Args.InputFile, "rb") as fIn: > > + Signature =3D str(fIn.read(4)) > > + if ("DSDT" not in Signature) and ("SSDT" not in Signature= ): > > + EdkLogger.error(__file__, PARAMETER_INVALID, > > + ExtraData=3DArgs.InputFile, > > + Message=3D"Error: Invalid file type. = " + \ > > + "File does not have a valid "= + \ > > + "DSDT or SSDT signature.") > > + > > + # Get the basename of the input file. > > + SplitInputName =3D os.path.splitext(Args.InputFile) > > + BaseName =3D os.path.basename(SplitInputName[0]) > > + > > + # If no output directory is specified, output to the input direct= ory. > > + if not Args.OutDir: > > + Args.OutputFile =3D os.path.join( > > + os.path.dirname(Args.InputFile), > > + BaseName + ".hex" > > + ) > > + else: > > + if not os.path.exists(Args.OutDir): > > + os.mkdir(Args.OutDir) > > + Args.OutputFile =3D os.path.join(Args.OutDir, BaseName + > > + ".hex") > > + > > + Args.BaseName =3D BaseName > > + > > + return Args > > + > > +## Convert an AML file to a .hex file containing the AML bytecode > > +stored # in a C array. > > +# > > +# @param InputFile Path to the input AML file. > > +# @param OutputFile Path to the output .hex file to generate. > > +# @param BaseName Base name of the input file. > > +# This is also the name of the generated .hex f= ile. > > +# > > +def AmlToHex(InputFile, OutputFile, BaseName): > > + > > + MacroName =3D "__{}_HEX__".format(BaseName.upper()) > > + ArrayName =3D BaseName.lower() + "_aml_code" > > + > > + with open(InputFile, "rb") as fIn, open(OutputFile, "w") as fOut: > > + # Write header. > > + fOut.write("// This file has been generated from:\n" + \ > > + "// \tPython script: " + \ > > + os.path.abspath(__file__) + "\n" + \ > > + "// \tInput AML file: " + \ > > + os.path.abspath(InputFile) + "\n\n" + \ > > + "#ifndef {}\n".format(MacroName) + \ > > + "#define {}\n\n".format(MacroName) > > + ) > > + > > + # Write the array and its content. > > + fOut.write("unsigned char {}[] =3D {{\n ".format(ArrayName)) > > + cnt =3D 0 > > + byte =3D fIn.read(1) > > + while len(byte) !=3D 0: > > + fOut.write("0x{0:02X}, ".format(ord(byte))) > > + cnt +=3D 1 > > + if (cnt % 8) =3D=3D 0: > > + fOut.write("\n") > > + byte =3D fIn.read(1) > > + fOut.write("\n};\n") > > + > > + # Write footer. > > + fOut.write("#endif // {}\n".format(MacroName)) > > + > > +## Main method > > +# > > +# This method: > > +# 1- Initialize an EdkLogger instance. > > +# 2- Parses the input arguments. > > +# 3- Converts an AML file to a .hex file containing the AML byteco= de stored > > +# in a C array. > > +# > > +# @retval 0 Success. > > +# @retval 1 Error. > > +# > > +def Main(): > > + # Initialize an EdkLogger instance. > > + EdkLogger.Initialize() > > + > > + try: > > + # Parse the input arguments. > > + CommandArguments =3D ParseArgs() > > + > > + # Convert an AML file to a .hex file containing the AML bytec= ode stored > > + # in a C array. > > + AmlToHex(CommandArguments.InputFile, CommandArguments.OutputF= ile, > > + CommandArguments.BaseName) > > + except Exception as e: > > + print(e) > > + return 1 > > + > > + return 0 > > + > > +if __name__ =3D=3D '__main__': > > + r =3D Main() > > + # 0-127 is a safe return range, and 1 is a standard default error > > + if r < 0 or r > 127: r =3D 1 > > + sys.exit(r) > > -- > > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' > > >=20 >=20 >=20