diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2016-07-07 13:28:43 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-08-12 09:49:14 -0400 |
commit | c8f727501e2c392c04dd1c4cd8cdbf441ea7b37f (patch) | |
tree | 77b36ce3a8e8c6b1033530426e8474d6b28333d3 /src/import/hwpf/fapi2/tools | |
parent | 333bd2d69881f31cf6db145c33daf94c23397f9f (diff) | |
download | talos-hostboot-c8f727501e2c392c04dd1c4cd8cdbf441ea7b37f.tar.gz talos-hostboot-c8f727501e2c392c04dd1c4cd8cdbf441ea7b37f.zip |
Support HB to Cronus attribute dump/sync
Change-Id: I13a4c3b355df9114813df6e21d6f8f53e7ef30f1
RTC: 127348
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/26734
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: Matt K. Light <mklight@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27399
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/hwpf/fapi2/tools')
-rwxr-xr-x | src/import/hwpf/fapi2/tools/createIfAttrService.pl | 48 | ||||
-rwxr-xr-x | src/import/hwpf/fapi2/tools/parseAttributeInfo.pl | 101 |
2 files changed, 106 insertions, 43 deletions
diff --git a/src/import/hwpf/fapi2/tools/createIfAttrService.pl b/src/import/hwpf/fapi2/tools/createIfAttrService.pl index b672da271..0468b335f 100755 --- a/src/import/hwpf/fapi2/tools/createIfAttrService.pl +++ b/src/import/hwpf/fapi2/tools/createIfAttrService.pl @@ -81,19 +81,18 @@ open(ASFILE, ">", $asFile); #------------------------------------------------------------------------------ print ASFILE "// fapi2_attribute_service.C\n"; print ASFILE "// This file is generated by perl script createIfAttrService.pl\n\n"; +print ASFILE "#include <string.h>\n"; print ASFILE "#include <fapi2_attribute_service.H>\n"; print ASFILE "#include <fapi2_chip_ec_feature.H>\n"; print ASFILE "#include <plat_trace.H>\n\n"; +print ASFILE "\n\n"; +print ASFILE "#define FAPI_ATTR_GET_RAW(ID, TARGET, VAL) \\\n"; +print ASFILE " ID##_GETMACRO(ID, TARGET, VAL)\n\n"; print ASFILE "namespace fapi2\n"; print ASFILE "{\n\n"; -print ASFILE "template< TargetType K >\n"; -print ASFILE "ReturnCode getInitFileAttr(const AttributeId i_id,\n"; -print ASFILE " const Target<K>& i_pTarget,\n"; -print ASFILE " uint64_t & o_val,\n"; -print ASFILE " const uint32_t i_arrayIndex1,\n"; -print ASFILE " const uint32_t i_arrayIndex2,\n"; -print ASFILE " const uint32_t i_arrayIndex3,\n"; -print ASFILE " const uint32_t i_arrayIndex4)\n"; +print ASFILE "ReturnCode rawAccessAttr(const AttributeId i_id,\n"; +print ASFILE " const Target<TARGET_TYPE_ALL>& i_target,\n"; +print ASFILE " uint8_t * o_val)\n"; print ASFILE "{\n"; print ASFILE " ReturnCode l_rc;\n\n"; @@ -241,30 +240,13 @@ foreach my $argnum (0 .. $#ARGV) if (exists $attr->{privileged}) { - print ASFILE " l_rc = FAPI2_ATTR_GET_PRIVILEGED(fapi2::$attr->{id}, i_pTarget, l_attr);\n"; + print ASFILE " l_rc = FAPI_ATTR_GET_RAW(fapi2::$attr->{id}, i_target, l_attr);\n"; } else { - print ASFILE " l_rc = FAPI_ATTR_GET(fapi2::$attr->{id}, i_pTarget, l_attr);\n"; + print ASFILE " l_rc = FAPI_ATTR_GET_RAW(fapi2::$attr->{id}, i_target, l_attr);\n"; } - print ASFILE " o_val = l_attr"; - - if ($numArrayDimensions >= 5) - { - print ("createIfAttrService.pl ERROR. More than 4 array dimensions!!\n"); - exit(1); - } - else - { - for (my $i = 0; $i < $numArrayDimensions; $i++) - { - print ASFILE "[i_arrayIndex"; - print ASFILE $i+1; - print ASFILE "]"; - } - } - - print ASFILE ";\n"; + print ASFILE " memcpy(o_val, &l_attr, sizeof($attr->{id}_Type));\n"; print ASFILE " }\n"; } } @@ -282,16 +264,8 @@ print ASFILE " FAPI_ERR(\"getInitFileAttr: Unrecognized attr ID: 0x%x\", print ASFILE " }\n\n"; print ASFILE " if (l_rc)\n"; print ASFILE " {\n"; -print ASFILE " if (i_pTarget)\n"; -print ASFILE " {\n"; print ASFILE " FAPI_ERR(\"getInitFileAttr: Error getting attr ID 0x%x from targType 0x%x\",\n"; -print ASFILE " i_id, i_pTarget->getType());\n"; -print ASFILE " }\n"; -print ASFILE " else\n"; -print ASFILE " {\n"; -print ASFILE " FAPI_ERR(\"getInitFileAttr: Error getting attr ID 0x%x from system target\",\n"; -print ASFILE " i_id);\n"; -print ASFILE " }\n"; +print ASFILE " i_id, i_target.getType());\n"; print ASFILE " }\n\n"; print ASFILE " return l_rc;\n"; print ASFILE "}\n\n"; diff --git a/src/import/hwpf/fapi2/tools/parseAttributeInfo.pl b/src/import/hwpf/fapi2/tools/parseAttributeInfo.pl index 97e504b15..65c3cde5c 100755 --- a/src/import/hwpf/fapi2/tools/parseAttributeInfo.pl +++ b/src/import/hwpf/fapi2/tools/parseAttributeInfo.pl @@ -108,6 +108,12 @@ $fmFile .= "/"; $fmFile .= "fapi2AttrOverrideData.H"; open(FMFILE, ">", $fmFile); +# TODO: This for platform use only, will support later via RTC 128106 for HB +my $fsFile = $arg_output_dir; +$fsFile .= "/"; +$fsFile .= "fapi2AttrSyncData.H"; +open(FSFILE, ">", $fsFile); + my $feFile = $arg_output_dir; $feFile .= "/"; $feFile .= "fapi2AttrOverrideEnums.H"; @@ -119,9 +125,9 @@ open(FEFILE, ">", $feFile); #------------------------------------------------------------------------------ print AIFILE "// attribute_ids.H\n"; print AIFILE "// This file is generated by perl script parseAttributeInfo.pl\n\n"; +print AIFILE "#include <target_types.H>\n\n"; print AIFILE "#ifndef ATTRIBUTEIDS_H_\n"; print AIFILE "#define ATTRIBUTEIDS_H_\n\n"; -print AIFILE "#include <target_types.H>\n\n"; print AIFILE "namespace fapi2\n"; print AIFILE "{\n\n"; print AIFILE "\/**\n"; @@ -146,13 +152,11 @@ print ECHFILE "struct int2Type {\n"; print ECHFILE "enum { value = I };\n"; print ECHFILE "};\n"; print ECHFILE "ReturnCode queryChipEcAndName(\n"; -print ECHFILE " const Target<fapi2::TARGET_TYPE_PROC_CHIP |\n"; -print ECHFILE " fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,\n"; +print ECHFILE " const Target<fapi2::TARGET_TYPE_ALL>& i_target,\n"; print ECHFILE " fapi2::ATTR_NAME_Type& , fapi2::ATTR_EC_Type & );\n\n"; print ECHFILE "template<int T>\n"; print ECHFILE "ReturnCode queryChipEcFeature(int2Type<T> id,\n"; -print ECHFILE " const Target<fapi2::TARGET_TYPE_PROC_CHIP |\n"; -print ECHFILE " fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target,\n"; +print ECHFILE " const Target<fapi2::TARGET_TYPE_ALL>& i_target,\n"; print ECHFILE " uint8_t & o_hasFeature)\n"; print ECHFILE "{\n"; print ECHFILE " fapi2::ATTR_NAME_Type l_chipName;\n"; @@ -221,6 +225,24 @@ print FMFILE "const AttributeData g_FapiAttrs[] = {\n"; my %attrOverrideData = (); #------------------------------------------------------------------------------- +# Print header of fapi2AttrSyncData.H +# ------------------------------------------------------------------------------ +print FSFILE "// fapi2AttrSyncData.H\n"; +print FSFILE "// This file is generated by perl script parseAttributeInfo.pl\n\n"; +print FSFILE "#ifndef FAPI2ATTRSYNCDATA_H_\n"; +print FSFILE "#define FAPI2ATTRSYNCDATA_H_\n\n"; +print FSFILE "#include <target_types.H>\n\n"; +print FSFILE "namespace fapi2\n"; +print FSFILE "{\n\n"; +print FSFILE "struct AttributeSyncInfo\n"; +print FSFILE "{\n"; +print FSFILE " uint32_t iv_attrId;\n"; +print FSFILE " size_t iv_attrElemSizeBytes;\n"; +print FSFILE " size_t iv_dims[4];\n"; +print FSFILE "};\n\n"; +my %attrSyncData = (); + +#------------------------------------------------------------------------------- # Print header of getFapiAttrEnumData.C # ------------------------------------------------------------------------------ print FEFILE "const AttributeEnum g_FapiEnums[] = {\n"; @@ -325,6 +347,7 @@ foreach my $argnum (0 .. $#ARGV) (@{$attributes->{attribute}}) { my $attrOverride = ""; + my $attrSync = ""; #---------------------------------------------------------------------- # Print a comment with the attribute ID attribute_ids.H #---------------------------------------------------------------------- @@ -349,6 +372,7 @@ foreach my $argnum (0 .. $#ARGV) #---------------------------------------------------------------------- $attrOverride .= "\t{\n"; $attrOverride .= "\t\t\"$attr->{id}\",\n"; + $attrSync .= "\t{\n"; #---------------------------------------------------------------------- # Figure out the attribute array dimensions (if array) @@ -390,6 +414,10 @@ foreach my $argnum (0 .. $#ARGV) $attrOverride .= "\t\tsizeof(uint8_t),\n"; $attrOverride .= "\t\t{ $arrayDimString }\n"; $attrOverride .= "\t},\n"; + $attrSync .= "\t\t0x$attrIdHash{$attr->{id}},\n"; + $attrSync .= "\t\tsizeof(uint8_t),\n"; + $attrSync .= "\t\t{ $arrayDimString }\n"; + $attrSync .= "\t},\n"; } else { @@ -399,24 +427,32 @@ foreach my $argnum (0 .. $#ARGV) exit(1); } + #These array/fapi sizes need to stay in sync my @sizes = ( 'uint8', 'uint16', 'uint32', 'uint64', 'int8', 'int16', 'int32', 'int64' ); + my @fapiSizes = ( 'u8', 'u16', 'u32', 'u64', 's8', 's16', 's32', 's64' ); my $actualSize = ''; + my $actualFapi = ''; + my $index = 0; foreach my $size (@sizes) { if ($attr->{valueType} eq $size) { $actualSize = $size; + $actualFapi = @fapiSizes[$index]; last; } + $index++; } if ($actualSize ne '') { print AIFILE "typedef ${actualSize}_t $attr->{id}_Type$arrayDimensions;\n"; - print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},u8" . + print ITFILE "$attr->{id},$attr->{id},0x$attrIdHash{$attr->{id}},$actualFapi" . "$arrayDimensions\n"; $attrOverride .= "\t\t0x$attrIdHash{$attr->{id}},\n"; $attrOverride .= "\t\tsizeof(${actualSize}_t),\n"; + $attrSync .= "\t\t0x$attrIdHash{$attr->{id}},\n"; + $attrSync .= "\t\tsizeof(${actualSize}_t),\n"; } else { @@ -426,6 +462,8 @@ foreach my $argnum (0 .. $#ARGV) } $attrOverride .= "\t\t{ $arrayDimString }\n"; $attrOverride .= "\t},\n"; + $attrSync .= "\t\t{ $arrayDimString }\n"; + $attrSync .= "\t},\n"; } #---------------------------------------------------------------------- @@ -480,6 +518,8 @@ foreach my $argnum (0 .. $#ARGV) } print AIFILE "fapi2::$targType"; $targTypeCount++; + + $attrSyncData{$targType}{$attr->{id}} = $attrSync; } print AIFILE ";\n"; @@ -725,6 +765,54 @@ foreach my $override (sort keys %attrOverrideData) print FMFILE "};\n"; #------------------------------------------------------------------------------ +# Print content for fapi2AttrSyncData.H +#------------------------------------------------------------------------------ +while ((my $syncTarget, my $syncList) = each(%attrSyncData)) +{ + $syncTarget =~ s/TARGET_TYPE_//g; + #print "TYPE: $syncTarget\n"; + + print FSFILE "const AttributeSyncInfo g_${syncTarget}_syncInfo[] = {\n"; + while ((my $attrName, my $attrData) = each(%{$syncList})) + { + print FSFILE "\n\t//$attrName\n"; + print FSFILE "$attrData"; + } + print FSFILE "};\n\n"; +} + +#print helper functions +print FSFILE "const AttributeSyncInfo * get_fapi_target_attr_array(fapi2::TargetType i_type"; +print FSFILE ", size_t & o_size)\n"; +print FSFILE "{\n"; +print FSFILE "\tconst AttributeSyncInfo * l_arr = NULL;\n"; +print FSFILE "\to_size = 0;\n"; +print FSFILE "\tswitch(i_type)\n"; +print FSFILE "\t{\n"; + +while ((my $syncTarget, my $syncList) = each(%attrSyncData)) +{ + my $name = $syncTarget; + $syncTarget =~ s/TARGET_TYPE_//g; + + print FSFILE "\t\tcase fapi2::$name :\n"; + print FSFILE "\t\t\tl_arr = g_${syncTarget}_syncInfo;\n"; + print FSFILE "\t\t\to_size = sizeof(g_${syncTarget}_syncInfo)/"; + print FSFILE "sizeof(g_${syncTarget}_syncInfo[0]);\n"; + print FSFILE "\t\t\tbreak;\n\n"; +} + +print FSFILE "\t\tdefault:\n"; +print FSFILE "\t\t\tl_arr = NULL;\n"; +print FSFILE "\t};\n"; +print FSFILE "\treturn l_arr;\n"; +print FSFILE "}\n"; +print FSFILE "}\n\n"; +print FSFILE "#endif\n"; + + + +#------------------------------------------------------------------------------ # Print footer for getFapiAttrEnumData.C #------------------------------------------------------------------------------ foreach my $override (sort @attrOverrideEnums) @@ -743,5 +831,6 @@ close(ASFILE); close(ITFILE); close(ETFILE); close(FMFILE); +close(FSFILE); close(FEFILE); |