summaryrefslogtreecommitdiffstats
path: root/src/ppe/tools/scripts/ppeParseAttributeInfo.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ppe/tools/scripts/ppeParseAttributeInfo.pl')
-rwxr-xr-xsrc/ppe/tools/scripts/ppeParseAttributeInfo.pl1090
1 files changed, 0 insertions, 1090 deletions
diff --git a/src/ppe/tools/scripts/ppeParseAttributeInfo.pl b/src/ppe/tools/scripts/ppeParseAttributeInfo.pl
deleted file mode 100755
index 339f5d0..0000000
--- a/src/ppe/tools/scripts/ppeParseAttributeInfo.pl
+++ /dev/null
@@ -1,1090 +0,0 @@
-#!/usr/bin/perl -w
-# IBM_PROLOG_BEGIN_TAG
-# This is an automatically generated prolog.
-#
-# $Source: src/ppe/tools/scripts/ppeParseAttributeInfo.pl $
-#
-# OpenPOWER OnChipController Project
-#
-# Contributors Listed Below - COPYRIGHT 2015
-# [+] International Business Machines Corp.
-#
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# permissions and limitations under the License.
-#
-# IBM_PROLOG_END_TAG
-# Purpose: This perl script will parse HWP Attribute XML files
-# and add attribute information to a file called fapi2AttributeIds.H
-
-use strict;
-
-#------------------------------------------------------------------------------
-# Print Command Line Help
-#------------------------------------------------------------------------------
-my $numArgs = $#ARGV + 1;
-if ($numArgs < 2)
-{
- print ("Usage: ppeParseAttributeInfo.pl <output dir> <attr-xml-file1> [<attr-xml-file2> ...]\n");
- print (" This perl script will parse attribute XML files and create the following files:\n");
- print (" - fapi2AttributeIds.H. Contains IDs, type, value enums and other information\n");
- print (" - fapi2ChipEcFeature.C. Contains a function to query chip EC features\n");
- print (" - fapi2AttributePlatCheck.H. Contains compile time checks that all attributes are\n");
- print (" handled by the platform\n");
- print (" - fapi2AttributesSupported.html Contains the HWPF attributes supported\n");
- print (" - fapi2AttrInfo.csv Used to process Attribute Override Text files\n");
- print (" - fapi2AttrEnumInfo.csv Used to process Attribute Override Text files\n");
- exit(1);
-}
-
-#------------------------------------------------------------------------------
-# Specify perl modules to use
-#------------------------------------------------------------------------------
-use Digest::MD5 qw(md5_hex);
-use XML::Simple;
-my $xml = new XML::Simple (KeyAttr=>[]);
-
-# Uncomment to enable debug output
-#use Data::Dumper;
-
-#------------------------------------------------------------------------------
-# Set PREFERRED_PARSER to XML::Parser. Otherwise it uses XML::SAX which contains
-# bugs that result in XML parse errors that can be fixed by adjusting white-
-# space (i.e. parse errors that do not make sense).
-#------------------------------------------------------------------------------
-$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
-
-#------------------------------------------------------------------------------
-# Open output files for writing
-#------------------------------------------------------------------------------
-my $aiFile = $ARGV[0];
-$aiFile .= "/";
-$aiFile .= "fapi2AttributeIds.H";
-open(AIFILE, ">", $aiFile);
-
-my $ecFile = $ARGV[0];
-$ecFile .= "/";
-$ecFile .= "fapi2ChipEcFeature.C";
-open(ECFILE, ">", $ecFile);
-
-my $acFile = $ARGV[0];
-$acFile .= "/";
-$acFile .= "fapi2AttributePlatCheck.H";
-open(ACFILE, ">", $acFile);
-
-my $asFile = $ARGV[0];
-$asFile .= "/";
-$asFile .= "fapi2AttributesSupported.html";
-open(ASFILE, ">", $asFile);
-
-my $itFile = $ARGV[0];
-$itFile .= "/";
-$itFile .= "fapi2AttrInfo.csv";
-open(ITFILE, ">", $itFile);
-
-my $etFile = $ARGV[0];
-$etFile .= "/";
-$etFile .= "fapi2AttrEnumInfo.csv";
-open(ETFILE, ">", $etFile);
-
-#------------------------------------------------------------------------------
-# Print Start of file information to fapiAttributeIds.H
-#------------------------------------------------------------------------------
-print AIFILE "// fapi2AttributeIds.H\n";
-print AIFILE "// This file is generated by perl script fapiParseAttributeInfo.pl\n\n";
-print AIFILE "#ifndef FAPI2ATTRIBUTEIDS_H_\n";
-print AIFILE "#define FAPI2ATTRIBUTEIDS_H_\n\n";
-print AIFILE "#ifndef __ASSEMBLER__\n\n";
-print AIFILE "#include <target.H>\n";
-print AIFILE "#include <target_types.H>\n\n";
-print AIFILE "namespace fapi2\n";
-print AIFILE "{\n\n";
-print AIFILE "\/**\n";
-print AIFILE " * \@brief Enumeration of attribute IDs\n";
-print AIFILE " *\/\n";
-print AIFILE "enum AttributeId\n{\n";
-
-#------------------------------------------------------------------------------
-# Print Start of file information to fapiChipEcFeature.C
-#------------------------------------------------------------------------------
-print ECFILE "// fapiChipEcFeature.C\n";
-print ECFILE "// This file is generated by perl script fapiParseAttributeInfo.pl\n";
-print ECFILE "// It implements the fapiQueryChipEcFeature function\n\n";
-print ECFILE "#include <fapiChipEcFeature.H>\n";
-print ECFILE "#include <fapiAttributeService.H>\n";
-print ECFILE "#include <fapiSystemConfig.H>\n";
-print ECFILE "#include <fapiPlatTrace.H>\n\n";
-print ECFILE "namespace fapi2\n";
-print ECFILE "{\n\n";
-print ECFILE "fapi::ReturnCode fapiQueryChipEcFeature(fapi::AttributeId i_id,\n";
-print ECFILE " const fapi::Target * i_pTarget,\n";
-print ECFILE " uint8_t & o_hasFeature)\n";
-print ECFILE "{\n";
-print ECFILE " o_hasFeature = false;\n";
-print ECFILE " fapi::ReturnCode l_rc;\n";
-print ECFILE " uint8_t l_chipName = 0;\n";
-print ECFILE " uint8_t l_chipEc = 0;\n";
-print ECFILE " fapi::Target l_target = *i_pTarget;\n\n";
-print ECFILE " if (i_pTarget->isChiplet())\n";
-print ECFILE " {\n";
-print ECFILE " l_rc = fapiGetParentChip(*i_pTarget, l_target);\n\n";
-print ECFILE " if (l_rc)\n";
-print ECFILE " {\n";
-print ECFILE " FAPI_ERR(\"fapiQueryChipEcFeature: error getting parent chip\");\n";
-print ECFILE " }\n";
-print ECFILE " }\n\n";
-print ECFILE " if (!l_rc)\n";
-print ECFILE " {\n";
-print ECFILE " l_rc = FAPI_ATTR_GET_PRIVILEGED(ATTR_NAME, &l_target, l_chipName);\n\n";
-print ECFILE " if (l_rc)\n";
-print ECFILE " {\n";
-print ECFILE " FAPI_ERR(\"fapiQueryChipEcFeature: error getting chip name\");\n";
-print ECFILE " }\n";
-print ECFILE " else\n";
-print ECFILE " {\n";
-print ECFILE " l_rc = FAPI_ATTR_GET_PRIVILEGED(ATTR_EC, &l_target, l_chipEc);\n\n";
-print ECFILE " if (l_rc)\n";
-print ECFILE " {\n";
-print ECFILE " FAPI_ERR(\"fapiQueryChipEcFeature: error getting chip ec\");\n";
-print ECFILE " }\n";
-print ECFILE " else\n";
-print ECFILE " {\n";
-print ECFILE " switch (i_id)\n";
-print ECFILE " {\n";
-
-#------------------------------------------------------------------------------
-# Print Start of file information to fapiAttributePlatCheck.H
-#------------------------------------------------------------------------------
-print ACFILE "// fapiAttributePlatCheck.H\n";
-print ACFILE "// This file is generated by perl script fapiParseAttributeInfo.pl\n";
-print ACFILE "// A platform can include it to ensure that it handles all HWPF\n";
-print ACFILE "// attributes\n\n";
-print ACFILE "#ifndef FAPIATTRIBUTEPLATCHECK_H_\n";
-print ACFILE "#define FAPIATTRIBUTEPLATCHECK_H_\n\n";
-
-#------------------------------------------------------------------------------
-# Print Start of file information to fapiAttributesSupported.html
-#------------------------------------------------------------------------------
-print ASFILE "<html>\n";
-print ASFILE "<body>\n\n";
-print ASFILE "<!-- fapiAttributesSupported.html -->\n";
-print ASFILE "<!-- This file is generated by perl script fapiParseAttributeInfo.pl -->\n";
-print ASFILE "<!-- It lists all HWPF attributes supported -->\n\n";
-print ASFILE "<h4>HWPF Attributes supported by this build.</h4>\n";
-print ASFILE "<table border=\"4\">\n";
-print ASFILE "<tr><th>Attribute ID</th><th>Attribute Description</th></tr>";
-
-#------------------------------------------------------------------------------
-# Print Start of file information to fapiAttrInfo.csv
-#------------------------------------------------------------------------------
-print ITFILE "# fapiAttrInfo.csv\n";
-print ITFILE "# This file is generated by perl script fapiParseAttributeInfo.pl\n";
-print ITFILE "# It lists information about FAPI attributes and is used to\n";
-print ITFILE "# process FAPI Attribute text files (overrides/syncs)\n";
-print ITFILE "# Format:\n";
-print ITFILE "# <FAPI-ATTR-ID-STR>,<LAYER-ATTR-ID-STR>,<ATTR-ID-VAL>,<ATTR-TYPE>\n";
-print ITFILE "# Note that for the AttributeTanks at the FAPI layer, the\n";
-print ITFILE "# FAPI-ATTR-ID-STR and LAYER-ATTR-ID-STR will be identical\n";
-
-#------------------------------------------------------------------------------
-# Print Start of file information to fapiAttrEnumInfo.csv
-#------------------------------------------------------------------------------
-print ETFILE "# fapiAttrEnumInfo.csv\n";
-print ETFILE "# This file is generated by perl script fapiParseAttributeInfo.pl\n";
-print ETFILE "# It lists information about FAPI attribute enumeratorss and is\n";
-print ETFILE "# used to process FAPI Attribute text files (overrides/syncs)\n";
-print ETFILE "# Format:\n";
-print ETFILE "# <ENUM-STR>,<ENUM-VAL>\n";
-
-my %attrIdHash; # Records which Attribute IDs have been used
-my %attrValHash; # Records which Attribute values have been used
-
-#------------------------------------------------------------------------------
-# For each XML file
-#------------------------------------------------------------------------------
-#my $argfile = "p9_ppe_attributes.xml";
-my $argfile = $ARGV[1];
-my $entries = $xml->XMLin($argfile, ForceArray => ['entry']);
-foreach my $entr (@{$entries->{entry}}) {
-
-# print " $entr->{file}, $entr->{name}\n";
-
- #my $infile = $entr->{file};
- my $inname = $entr->{name};
-
-foreach my $argnum (2 .. $#ARGV)
-{
- my $infile = $ARGV[$argnum];
-
-
- # read XML file. The ForceArray option ensures that there is an array of
- # elements even if there is only one such element in the file
- my $attributes = $xml->XMLin($infile, ForceArray => ['attribute']);
-
- # Uncomment to get debug output of all attributes
- #print "\nFile: ", $infile, "\n", Dumper($attributes), "\n";
-
- #--------------------------------------------------------------------------
- # For each Attribute
- #--------------------------------------------------------------------------
- foreach my $attr (@{$attributes->{attribute}})
- {
-
- #print "? $attr->{id}, $inname\n";
-
- if($attr->{id} eq $inname) {
-
- #print "yes $attr->{id}, $inname\n";
-
- #----------------------------------------------------------------------
- # Print the Attribute ID and calculated value to fapiAttributeIds.H and
- # fapiAttributeIds.txt. The value for an attribute is a hash value
- # generated from the attribute name, this ties a specific value to a
- # specific attribute name. This is done for Cronus so that if a HWP is
- # not recompiled against a new eCMD/Cronus version where the attributes
- # have changed then there will not be a mismatch in enumerator values.
- # This is a 28bit hash value because the Initfile compiler has a
- # requirement that the top nibble of the 32 bit attribute ID be zero to
- # store flags
- #----------------------------------------------------------------------
- if (! exists $attr->{id})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Attribute 'id' missing in $infile\n");
- exit(1);
- }
-
- if (exists($attrIdHash{$attr->{id}}))
- {
- # Two different attributes with the same id!
- print ("fapiParseAttributeInfo.pl ERROR. Duplicate Attribute id $attr->{id} in $infile\\n");
- exit(1);
- }
-
- # Calculate a 28 bit hash value.
- my $attrHash128Bit = md5_hex($attr->{id});
- my $attrHash28Bit = substr($attrHash128Bit, 0, 7);
-
- # Print the attribute ID/value to fapiAttributeIds.H
- print AIFILE " $attr->{id} = 0x$attrHash28Bit,\n";
-
- if (exists($attrValHash{$attrHash28Bit}))
- {
- # Two different attributes generate the same hash-value!
- print ("fapiParseAttributeInfo.pl ERROR. Duplicate attr id hash value for $attr->{id} in $infile\ \n");
- exit(1);
- }
-
- $attrIdHash{$attr->{id}} = $attrHash28Bit;
- $attrValHash{$attrHash28Bit} = 1;
- }
- };
-}
-}
-
-#------------------------------------------------------------------------------
-# Print AttributeId enumeration end to fapiAttributeIds.H
-#------------------------------------------------------------------------------
-print AIFILE "};\n\n";
-
-#------------------------------------------------------------------------------
-# Print Attribute Information comment to fapiAttributeIds.H
-#------------------------------------------------------------------------------
-print AIFILE "\/**\n";
-print AIFILE " * \@brief Attribute Information\n";
-print AIFILE " *\/\n";
-
-
-foreach my $entr (@{$entries->{entry}}) {
-
-# print " $entr->{file}, $entr->{name}\n";
-
-# my $infile = $entr->{file};
- my $inname = $entr->{name};
-
- # read XML file. The ForceArray option ensures that there is an array of
- # elements even if there is only one such element in the file
-
-foreach my $argnum (2 .. $#ARGV)
-{
- my $infile = $ARGV[$argnum];
-
- my $attributes = $xml->XMLin($infile, ForceArray => ['attribute']);
-
- # Uncomment to get debug output of all attributes
- #print "\nFile: ", $infile, "\n", Dumper($attributes), "\n";
-
- #--------------------------------------------------------------------------
- # For each Attribute
- #--------------------------------------------------------------------------
- foreach my $attr (@{$attributes->{attribute}})
- {
-
-
-
- if($attr->{id} eq $inname) {
-
- #----------------------------------------------------------------------
- # Print a comment with the attribute ID fapiAttributeIds.H
- #----------------------------------------------------------------------
- print AIFILE "/* $attr->{id} */\n";
-
- #----------------------------------------------------------------------
- # Print the AttributeId and description to fapiAttributesSupported.html
- #----------------------------------------------------------------------
- if (! exists $attr->{description})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Attribute 'description' missing for $attr->{id} in $infile\n");
- exit(1);
- }
-
-
- #----------------------------------------------------------------------
- # Figure out the attribute array dimensions (if array)
- #----------------------------------------------------------------------
- my $arrayDimensions = "";
- my $numArrayDimensions = 0;
- if ($attr->{array})
- {
- # Remove leading whitespace
- my $dimText = $attr->{array};
- $dimText =~ s/^\s+//;
-
- # Split on commas or whitespace
- my @vals = split(/\s*,\s*|\s+/, $dimText);
-
- foreach my $val (@vals)
- {
- $arrayDimensions .= "[${val}]";
- $numArrayDimensions++;
- }
- }
-
- #----------------------------------------------------------------------
- # Print the typedef for each attribute's val type to fapiAttributeIds.H
- # Print the attribute information to fapiAttrInfo.csv
- #----------------------------------------------------------------------
- if (exists $attr->{chipEcFeature})
- {
- # The value type of chip EC feature attributes is uint8_t
- print AIFILE "typedef uint8_t $attr->{id}_Type;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u8\n"
- }
- else
- {
- if (! exists $attr->{valueType})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'valueType' missing for $attr->{id} in $infile\n");
- exit(1);
- }
-
- if ($attr->{valueType} eq 'uint8')
- {
- print AIFILE "typedef uint8_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u8" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'uint16')
- {
- print AIFILE "typedef uint16_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u8" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'uint32')
- {
- print AIFILE "typedef uint32_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u32" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'uint64')
- {
- print AIFILE "typedef uint64_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u64" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'int8')
- {
- print AIFILE "typedef int8_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},8" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'int16')
- {
- print AIFILE "typedef int16_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},32" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'int32')
- {
- print AIFILE "typedef int32_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},32" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'int64')
- {
- print AIFILE "typedef int64_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},64" .
- "$arrayDimensions\n";
- }
- else
- {
- print ("fapi2ParseAttributeInfo.pl ERROR. valueType not recognized: ");
- print $attr->{valueType}, " for $attr->{id} in $infile\n";
- exit(1);
- }
- }
-
- #----------------------------------------------------------------------
- # Print if the attribute is privileged
- #----------------------------------------------------------------------
- if (exists $attr->{privileged})
- {
- print AIFILE "const bool $attr->{id}_Privileged = true;\n";
- }
- else
- {
- print AIFILE "const bool $attr->{id}_Privileged = false;\n";
- }
-
- #----------------------------------------------------------------------
- # Print the target type(s) that the attribute is associated with
- #----------------------------------------------------------------------
- if (! exists $attr->{targetType})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'targetType' missing for $attr->{id} in $infile\n");
- exit(1);
- }
-
- print AIFILE "const TargetTypes_t $attr->{id}_TargetTypes = ";
-
- # Split on commas
- my @targTypes = split(',', $attr->{targetType});
-
- my $targTypeCount = 0;
- foreach my $targType (@targTypes)
- {
- # Remove newlines and leading/trailing whitespace
- $targType =~ s/\n//;
- $targType =~ s/^\s+//;
- $targType =~ s/\s+$//;
-
- if ($targTypeCount != 0)
- {
- print AIFILE " | ";
- }
- print AIFILE "$targType";
- $targTypeCount++;
- }
- print AIFILE ";\n";
-
- #----------------------------------------------------------------------
- # Print if the attribute is a platInit attribute
- #----------------------------------------------------------------------
- if (exists $attr->{platInit})
- {
- print AIFILE "const bool $attr->{id}_PlatInit = true;\n";
- }
- else
- {
- print AIFILE "const bool $attr->{id}_PlatInit = false;\n";
- }
-
- #----------------------------------------------------------------------
- # Print if the attribute is a initToZero attribute
- #----------------------------------------------------------------------
- if (exists $attr->{initToZero})
- {
- print AIFILE "const bool $attr->{id}_InitToZero = true;\n";
- }
- else
- {
- print AIFILE "const bool $attr->{id}_InitToZero = false;\n";
- }
-
- #----------------------------------------------------------------------
- # Print the value enumeration (if specified) to fapiAttributeIds.H and
- # fapiAttributeEnums.txt
- #----------------------------------------------------------------------
- if (exists $attr->{enum})
- {
- print AIFILE "enum $attr->{id}_Enum\n{\n";
-
- # Values must be separated by commas to allow for values to be
- # specified: <enum>VAL_A = 3, VAL_B = 5, VAL_C = 0x23</enum>
- my @vals = split(',', $attr->{enum});
-
- foreach my $val (@vals)
- {
- # Remove newlines and leading/trailing whitespace
- $val =~ s/\n//;
- $val =~ s/^\s+//;
- $val =~ s/\s+$//;
-
- # Print the attribute enum to fapiAttributeIds.H
- print AIFILE " ENUM_$attr->{id}_${val}";
-
- # Print the attribute enum to fapiAttrEnumInfo.csv
- my $attrEnumTxt = "$attr->{id}_${val}\n";
- $attrEnumTxt =~ s/ = /,/;
- print ETFILE $attrEnumTxt;
-
- if ($attr->{valueType} eq 'uint64')
- {
- print AIFILE "ULL";
- }
-
- print AIFILE ",\n";
- }
-
- print AIFILE "};\n";
- }
-
- #----------------------------------------------------------------------
- # Print _GETMACRO and _SETMACRO where appropriate to fapiAttributeIds.H
- #----------------------------------------------------------------------
- if (exists $attr->{chipEcFeature})
- {
- #------------------------------------------------------------------
- # The attribute is a Chip EC Feature, define _GETMACRO to call a
- # fapi function and define _SETMACRO to something that will cause a
- # compile failure if a set is attempted
- #------------------------------------------------------------------
- print AIFILE "#define $attr->{id}_GETMACRO(ID, PTARGET, VAL) \\\n";
- print AIFILE " PLAT_GET_CHIP_EC_FEATURE_OVERRIDE(ID, PTARGET, VAL) ? fapi::FAPI_RC_SUCCESS : \\\n";
- print AIFILE " fapi::fapiQueryChipEcFeature(fapi::ID, PTARGET, VAL)\n";
- print AIFILE "#define $attr->{id}_SETMACRO(ID, PTARGET, VAL) ";
- print AIFILE "CHIP_EC_FEATURE_ATTRIBUTE_NOT_WRITABLE\n";
- }
- elsif (! exists $attr->{writeable})
- {
- #------------------------------------------------------------------
- # The attribute is read-only, define the _SETMACRO to something
- # that will cause a compile failure if a set is attempted
- #------------------------------------------------------------------
- if (! exists $attr->{writeable})
- {
- print AIFILE "#define $attr->{id}_SETMACRO ATTRIBUTE_NOT_WRITABLE\n";
- }
- }
-
- #----------------------------------------------------------------------
- # If the attribute is a Chip EC Feature, print the chip EC feature
- # query to fapiChipEcFeature.C
- #----------------------------------------------------------------------
- if (exists $attr->{chipEcFeature})
- {
- my $chipCount = 0;
- print ECFILE " case $attr->{id}:\n";
- print ECFILE " if (\n";
-
- foreach my $chip (@{$attr->{chipEcFeature}->{chip}})
- {
- $chipCount++;
-
- if (! exists $chip->{name})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'name' missing\n");
- exit(1);
- }
-
- if (! exists $chip->{ec})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'ec' missing\n");
- exit(1);
- }
-
- if (! exists $chip->{ec}->{value})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'value' missing\n");
- exit(1);
- }
-
- if (! exists $chip->{ec}->{test})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'test' missing\n");
- exit(1);
- }
-
- my $test;
- if ($chip->{ec}->{test} eq 'EQUAL')
- {
- $test = '==';
- }
- elsif ($chip->{ec}->{test} eq 'GREATER_THAN')
- {
- $test = '>';
- }
- elsif ($chip->{ec}->{test} eq 'GREATER_THAN_OR_EQUAL')
- {
- $test = '>=';
- }
- elsif ($chip->{ec}->{test} eq 'LESS_THAN')
- {
- $test = '<';
- }
- elsif ($chip->{ec}->{test} eq 'LESS_THAN_OR_EQUAL')
- {
- $test = '<=';
- }
- else
- {
- print ("fapiParseAttributeInfo.pl ERROR. test '$chip->{ec}->{test}' unrecognized\n");
- exit(1);
- }
-
- if ($chipCount > 1)
- {
- print ECFILE " ||\n";
- }
- print ECFILE " ((l_chipName == $chip->{name}) &&\n";
- print ECFILE " (l_chipEc $test $chip->{ec}->{value}))\n";
- }
-
- print ECFILE " )\n";
- print ECFILE " {\n";
- print ECFILE " o_hasFeature = true;\n";
- print ECFILE " }\n";
- print ECFILE " break;\n";
- }
-
- #----------------------------------------------------------------------
- # Print the platform attribute checks to fapiAttributePlatCheck.H
- #----------------------------------------------------------------------
- if (exists $attr->{writeable})
- {
- print ACFILE "#ifndef $attr->{id}_SETMACRO\n";
- print ACFILE "#error Platform does not support set of HWPF attr $attr->{id}\n";
- print ACFILE "#endif\n";
- }
-
- print ACFILE "#ifndef $attr->{id}_GETMACRO\n";
- print ACFILE "#error Platform does not support get of HWPF attr $attr->{id}\n";
- print ACFILE "#endif\n\n";
-
- #----------------------------------------------------------------------
- # Print newline between each attribute's info to fapiAttributeIds.H
- #----------------------------------------------------------------------
- print AIFILE "\n";
-
-
-
-
-
- }
- };
-}
-}
-
-
-
-=for comment
-
-#------------------------------------------------------------------------------
-# For each XML file
-#------------------------------------------------------------------------------
-foreach my $argnum (1 .. $#ARGV)
-{
- my $infile = $ARGV[$argnum];
-
- # read XML file. The ForceArray option ensures that there is an array of
- # elements even if there is only one such element in the file
- my $attributes = $xml->XMLin($infile, ForceArray => ['attribute', 'chip']);
-
- #--------------------------------------------------------------------------
- # For each Attribute
- #--------------------------------------------------------------------------
- foreach my $attr (@{$attributes->{attribute}})
- {
- #----------------------------------------------------------------------
- # Print a comment with the attribute ID fapiAttributeIds.H
- #----------------------------------------------------------------------
- print AIFILE "/* $attr->{id} */\n";
-
- #----------------------------------------------------------------------
- # Print the AttributeId and description to fapiAttributesSupported.html
- #----------------------------------------------------------------------
- if (! exists $attr->{description})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'description' missing\n");
- exit(1);
- }
-
- print ASFILE "<tr>\n";
- print ASFILE " <td>$attr->{id}</td>\n";
- print ASFILE " <td>$attr->{description}</td>\n";
- print ASFILE "</tr>\n";
-
- #----------------------------------------------------------------------
- # Figure out the attribute array dimensions (if array)
- #----------------------------------------------------------------------
- my $arrayDimensions = "";
- my $numArrayDimensions = 0;
- if ($attr->{array})
- {
- # Remove leading whitespace
- my $dimText = $attr->{array};
- $dimText =~ s/^\s+//;
-
- # Split on commas or whitespace
- my @vals = split(/\s*,\s*|\s+/, $dimText);
-
- foreach my $val (@vals)
- {
- $arrayDimensions .= "[${val}]";
- $numArrayDimensions++;
- }
- }
-
- #----------------------------------------------------------------------
- # Print the typedef for each attribute's val type to fapiAttributeIds.H
- # Print the attribute information to fapiAttrInfo.csv
- #----------------------------------------------------------------------
- if (exists $attr->{chipEcFeature})
- {
- # The value type of chip EC feature attributes is uint8_t
- print AIFILE "typedef uint8_t $attr->{id}_Type;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u8\n"
- }
- else
- {
- if (! exists $attr->{valueType})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'valueType' missing\n");
- exit(1);
- }
-
- if ($attr->{valueType} eq 'uint8')
- {
- print AIFILE "typedef uint8_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u8" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'uint32')
- {
- print AIFILE "typedef uint32_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u32" .
- "$arrayDimensions\n";
- }
- elsif ($attr->{valueType} eq 'uint64')
- {
- print AIFILE "typedef uint64_t $attr->{id}_Type$arrayDimensions;\n";
- print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u64" .
- "$arrayDimensions\n";
- }
- else
- {
- print ("fapiParseAttributeInfo.pl ERROR. valueType not recognized: ");
- print $attr->{valueType}, "\n";
- exit(1);
- }
- }
-
- #----------------------------------------------------------------------
- # Print if the attribute is privileged
- #----------------------------------------------------------------------
- if (exists $attr->{privileged})
- {
- print AIFILE "const bool $attr->{id}_Privileged = true;\n";
- }
- else
- {
- print AIFILE "const bool $attr->{id}_Privileged = false;\n";
- }
-
- #----------------------------------------------------------------------
- # Print the target type(s) that the attribute is associated with
- #----------------------------------------------------------------------
- if (! exists $attr->{targetType})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'targetType' missing\n");
- exit(1);
- }
-
- print AIFILE "const TargetTypes_t $attr->{id}_TargetTypes = ";
-
- # Split on commas
- my @targTypes = split(',', $attr->{targetType});
-
- my $targTypeCount = 0;
- foreach my $targType (@targTypes)
- {
- # Remove newlines and leading/trailing whitespace
- $targType =~ s/\n//;
- $targType =~ s/^\s+//;
- $targType =~ s/\s+$//;
-
- if ($targTypeCount != 0)
- {
- print AIFILE " | ";
- }
- print AIFILE "$targType";
- $targTypeCount++;
- }
- print AIFILE ";\n";
-
- #----------------------------------------------------------------------
- # Print if the attribute is a platInit attribute
- #----------------------------------------------------------------------
- if (exists $attr->{platInit})
- {
- print AIFILE "const bool $attr->{id}_PlatInit = true;\n";
- }
- else
- {
- print AIFILE "const bool $attr->{id}_PlatInit = false;\n";
- }
-
- #----------------------------------------------------------------------
- # Print if the attribute is a initToZero attribute
- #----------------------------------------------------------------------
- if (exists $attr->{initToZero})
- {
- print AIFILE "const bool $attr->{id}_InitToZero = true;\n";
- }
- else
- {
- print AIFILE "const bool $attr->{id}_InitToZero = false;\n";
- }
-
- #----------------------------------------------------------------------
- # Print the value enumeration (if specified) to fapiAttributeIds.H and
- # fapiAttributeEnums.txt
- #----------------------------------------------------------------------
- if (exists $attr->{enum})
- {
- print AIFILE "enum $attr->{id}_Enum\n{\n";
-
- # Values must be separated by commas to allow for values to be
- # specified: <enum>VAL_A = 3, VAL_B = 5, VAL_C = 0x23</enum>
- my @vals = split(',', $attr->{enum});
-
- foreach my $val (@vals)
- {
- # Remove newlines and leading/trailing whitespace
- $val =~ s/\n//;
- $val =~ s/^\s+//;
- $val =~ s/\s+$//;
-
- # Print the attribute enum to fapiAttributeIds.H
- print AIFILE " ENUM_$attr->{id}_${val}";
-
- # Print the attribute enum to fapiAttrEnumInfo.csv
- my $attrEnumTxt = "$attr->{id}_${val}\n";
- $attrEnumTxt =~ s/ = /,/;
- print ETFILE $attrEnumTxt;
-
- if ($attr->{valueType} eq 'uint64')
- {
- print AIFILE "ULL";
- }
-
- print AIFILE ",\n";
- }
-
- print AIFILE "};\n";
- }
-
- #----------------------------------------------------------------------
- # Print _GETMACRO and _SETMACRO where appropriate to fapiAttributeIds.H
- #----------------------------------------------------------------------
- if (exists $attr->{chipEcFeature})
- {
- #------------------------------------------------------------------
- # The attribute is a Chip EC Feature, define _GETMACRO to call a
- # fapi function and define _SETMACRO to something that will cause a
- # compile failure if a set is attempted
- #------------------------------------------------------------------
- print AIFILE "#define $attr->{id}_GETMACRO(ID, PTARGET, VAL) \\\n";
- print AIFILE " PLAT_GET_CHIP_EC_FEATURE_OVERRIDE(ID, PTARGET, VAL) ? fapi::FAPI_RC_SUCCESS : \\\n";
- print AIFILE " fapi::fapiQueryChipEcFeature(fapi::ID, PTARGET, VAL)\n";
- print AIFILE "#define $attr->{id}_SETMACRO(ID, PTARGET, VAL) ";
- print AIFILE "CHIP_EC_FEATURE_ATTRIBUTE_NOT_WRITABLE\n";
- }
- elsif (! exists $attr->{writeable})
- {
- #------------------------------------------------------------------
- # The attribute is read-only, define the _SETMACRO to something
- # that will cause a compile failure if a set is attempted
- #------------------------------------------------------------------
- if (! exists $attr->{writeable})
- {
- print AIFILE "#define $attr->{id}_SETMACRO ATTRIBUTE_NOT_WRITABLE\n";
- }
- }
-
- #----------------------------------------------------------------------
- # If the attribute is a Chip EC Feature, print the chip EC feature
- # query to fapiChipEcFeature.C
- #----------------------------------------------------------------------
- if (exists $attr->{chipEcFeature})
- {
- my $chipCount = 0;
- print ECFILE " case $attr->{id}:\n";
- print ECFILE " if (\n";
-
- foreach my $chip (@{$attr->{chipEcFeature}->{chip}})
- {
- $chipCount++;
-
- if (! exists $chip->{name})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'name' missing\n");
- exit(1);
- }
-
- if (! exists $chip->{ec})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'ec' missing\n");
- exit(1);
- }
-
- if (! exists $chip->{ec}->{value})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'value' missing\n");
- exit(1);
- }
-
- if (! exists $chip->{ec}->{test})
- {
- print ("fapiParseAttributeInfo.pl ERROR. Att 'test' missing\n");
- exit(1);
- }
-
- my $test;
- if ($chip->{ec}->{test} eq 'EQUAL')
- {
- $test = '==';
- }
- elsif ($chip->{ec}->{test} eq 'GREATER_THAN')
- {
- $test = '>';
- }
- elsif ($chip->{ec}->{test} eq 'GREATER_THAN_OR_EQUAL')
- {
- $test = '>=';
- }
- elsif ($chip->{ec}->{test} eq 'LESS_THAN')
- {
- $test = '<';
- }
- elsif ($chip->{ec}->{test} eq 'LESS_THAN_OR_EQUAL')
- {
- $test = '<=';
- }
- else
- {
- print ("fapiParseAttributeInfo.pl ERROR. test '$chip->{ec}->{test}' unrecognized\n");
- exit(1);
- }
-
- if ($chipCount > 1)
- {
- print ECFILE " ||\n";
- }
- print ECFILE " ((l_chipName == $chip->{name}) &&\n";
- print ECFILE " (l_chipEc $test $chip->{ec}->{value}))\n";
- }
-
- print ECFILE " )\n";
- print ECFILE " {\n";
- print ECFILE " o_hasFeature = true;\n";
- print ECFILE " }\n";
- print ECFILE " break;\n";
- }
-
- #----------------------------------------------------------------------
- # Print the platform attribute checks to fapiAttributePlatCheck.H
- #----------------------------------------------------------------------
- if (exists $attr->{writeable})
- {
- print ACFILE "#ifndef $attr->{id}_SETMACRO\n";
- print ACFILE "#error Platform does not support set of HWPF attr $attr->{id}\n";
- print ACFILE "#endif\n";
- }
-
- print ACFILE "#ifndef $attr->{id}_GETMACRO\n";
- print ACFILE "#error Platform does not support get of HWPF attr $attr->{id}\n";
- print ACFILE "#endif\n\n";
-
- #----------------------------------------------------------------------
- # Print newline between each attribute's info to fapiAttributeIds.H
- #----------------------------------------------------------------------
- print AIFILE "\n";
- };
-}
-
-=cut
-
-#------------------------------------------------------------------------------
-# Print End of file information to fapiAttributeIds.H
-#------------------------------------------------------------------------------
-print AIFILE "} //fapi2 \n\n";
-print AIFILE "#endif // __ASSEMBLER__\n\n";
-print AIFILE "#endif\n";
-
-#------------------------------------------------------------------------------
-# Print End of file information to fapiChipEcFeature.C
-#------------------------------------------------------------------------------
-print ECFILE " default:\n";
-print ECFILE " FAPI_ERR(\"fapiQueryChipEcFeature: Unknown feature 0x%x\",\n";
-print ECFILE " i_id);\n";
-print ECFILE " l_rc.setFapiError(FAPI_RC_INVALID_CHIP_EC_FEATURE_GET);\n";
-print ECFILE " l_rc.addEIFfdc(0, &i_id, sizeof(i_id));\n";
-print ECFILE " break;\n";
-print ECFILE " }\n\n";
-print ECFILE " if (o_hasFeature)\n";
-print ECFILE " {\n";
-print ECFILE " FAPI_INF(\"fapiQueryChipEcFeature: Chip (0x%x:0x%x) has ";
-print ECFILE "feature (0x%x)\", l_chipName, l_chipEc, i_id);\n";
-print ECFILE " }\n";
-print ECFILE " else\n";
-print ECFILE " {\n";
-print ECFILE " FAPI_INF(\"fapiQueryChipEcFeature: Chip (0x%x:0x%x) does not ";
-print ECFILE "have feature (0x%x)\", l_chipName, l_chipEc, i_id);\n";
-print ECFILE " }\n";
-print ECFILE " }\n";
-print ECFILE " }\n";
-print ECFILE " }\n";
-print ECFILE " return l_rc;\n";
-print ECFILE "}\n\n";
-print ECFILE "}\n";
-
-
-#------------------------------------------------------------------------------
-# Print End of file information to fapiAttributePlatCheck.H
-#------------------------------------------------------------------------------
-print ACFILE "#endif\n";
-
-#------------------------------------------------------------------------------
-# Print End of file information to fapiAttributesSupported.html
-#------------------------------------------------------------------------------
-print ASFILE "</table>\n\n";
-print ASFILE "</body>\n";
-print ASFILE "</html>\n";
-
-
-
-
-
-
-
-
-
-#------------------------------------------------------------------------------
-# Close output files
-#------------------------------------------------------------------------------
-close(AIFILE);
-close(ECFILE);
-close(ACFILE);
-close(ASFILE);
-close(ITFILE);
-close(ETFILE);
-
OpenPOWER on IntegriCloud