summaryrefslogtreecommitdiffstats
path: root/src/import/generic/memory/lib/utils/find.H
diff options
context:
space:
mode:
authorAndre Marin <aamarin@us.ibm.com>2017-06-01 11:49:05 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-06-15 17:06:46 -0400
commit9431f17c592f3664a2bb6e4a9b0a10b14d72bb42 (patch)
treed405e7329ded46b63da3bf9a4293d0ec68d07a80 /src/import/generic/memory/lib/utils/find.H
parent80ae8c88329859009d5a89f9a92cb8cb2c736a4a (diff)
downloadtalos-hostboot-9431f17c592f3664a2bb6e4a9b0a10b14d72bb42.tar.gz
talos-hostboot-9431f17c592f3664a2bb6e4a9b0a10b14d72bb42.zip
Add memory size API and unit tests for Cumulus
Change-Id: Iddd500f7643a9f3d0b2a9e537ce87ad2c0258ec3 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40327 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: JACOB L. HARVEY <jlharvey@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Louis Stermole <stermole@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40333 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> 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/generic/memory/lib/utils/find.H')
-rw-r--r--src/import/generic/memory/lib/utils/find.H108
1 files changed, 106 insertions, 2 deletions
diff --git a/src/import/generic/memory/lib/utils/find.H b/src/import/generic/memory/lib/utils/find.H
index 41d77114b..239afa10a 100644
--- a/src/import/generic/memory/lib/utils/find.H
+++ b/src/import/generic/memory/lib/utils/find.H
@@ -140,6 +140,109 @@ inline fapi2::Target<fapi2::TARGET_TYPE_MCBIST> find_target( const fapi2::Target
}
///
+/// @brief find the PROC_CHIP given a MBA
+/// @param[in] i_target the fapi2 target MBA
+/// @return a DMI target.
+///
+template<>
+inline fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> find_target( const fapi2::Target<fapi2::TARGET_TYPE_MBA>& i_target)
+{
+ return i_target.getParent<fapi2::TARGET_TYPE_MEMBUF_CHIP>()
+ .getParent<fapi2::TARGET_TYPE_DMI>()
+ .getParent<fapi2::TARGET_TYPE_PROC_CHIP>();
+}
+
+///
+/// @brief find the DMI given an MBA
+/// @param[in] i_target the fapi2 target MBA
+/// @return a DMI target.
+///
+template<>
+inline fapi2::Target<fapi2::TARGET_TYPE_DMI> find_target( const fapi2::Target<fapi2::TARGET_TYPE_MBA>& i_target)
+{
+ return i_target.getParent<fapi2::TARGET_TYPE_MEMBUF_CHIP>().getParent<fapi2::TARGET_TYPE_DMI>();
+}
+
+///
+/// @brief find the DMI given a MEMBUF
+/// @param[in] i_target the fapi2 target MEMBUF
+/// @return a DMI target.
+///
+template<>
+inline fapi2::Target<fapi2::TARGET_TYPE_DMI> find_target( const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target)
+{
+ return i_target.getParent<fapi2::TARGET_TYPE_DMI>();
+}
+
+///
+/// @brief find the PROC given a MEMBUF
+/// @param[in] i_target the fapi2 target MEMBUF
+/// @return a PROC target.
+///
+template<>
+inline fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> find_target( const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>&
+ i_target)
+{
+ return i_target.getParent<fapi2::TARGET_TYPE_DMI>().getParent<fapi2::TARGET_TYPE_PROC_CHIP>();
+}
+
+///
+/// @brief find all the DMIs connected to an PROC_CHIP
+/// @param[in] i_target a fapi2::Target DMI
+/// @return a vector of fapi2::TARGET_TYPE_MBA
+///
+template<>
+inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_DMI> >
+find_targets( const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target )
+{
+ return i_target.getChildren<fapi2::TARGET_TYPE_DMI>();
+}
+
+///
+/// @brief find all the MEMBUFs connected to an DMI
+/// @param[in] i_target a fapi2::Target DMI
+/// @return a vector of fapi2::TARGET_TYPE_MEMBUF_CHIP
+///
+template<>
+inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP> >
+find_targets( const fapi2::Target<fapi2::TARGET_TYPE_DMI>& i_target )
+{
+ return i_target.getChildren<fapi2::TARGET_TYPE_MEMBUF_CHIP>();
+}
+
+///
+/// @brief find all the MBAs connected to an MEMBUF
+/// @param[in] i_target a fapi2::Target MEMBUF_CHIP
+/// @return a vector of fapi2::TARGET_TYPE_MBA
+///
+template<>
+inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_MBA> >
+find_targets( const fapi2::Target<fapi2::TARGET_TYPE_MEMBUF_CHIP>& i_target )
+{
+ return i_target.getChildren<fapi2::TARGET_TYPE_MBA>();
+}
+
+///
+/// @brief find all the MBA connected to an DMI
+/// @param[in] i_target a fapi2::Target DMI
+/// @return a vector of fapi2::TARGET_TYPE_MBA
+///
+template<>
+inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_MBA> >
+find_targets( const fapi2::Target<fapi2::TARGET_TYPE_DMI>& i_target )
+{
+ std::vector< fapi2::Target<fapi2::TARGET_TYPE_MBA> > l_mbas;
+
+ for (const auto& membuf_chip : i_target.getChildren<fapi2::TARGET_TYPE_MEMBUF_CHIP>())
+ {
+ auto l_these_mbas( membuf_chip.getChildren<fapi2::TARGET_TYPE_MBA>() );
+ l_mbas.insert(l_mbas.end(), l_these_mbas.begin(), l_these_mbas.end());
+ }
+
+ return l_mbas;
+}
+
+///
/// @brief find all the dimm connected to an MCS
/// @param[in] i_target a fapi2::Target MCS
/// @return a vector of fapi2::TARGET_TYPE_DIMM
@@ -234,14 +337,15 @@ inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_MCA> > find_targets
}
///
-/// @brief find all the MCA connected to an MCBIST
-/// @param[in] i_target a fapi2::Target MCBIST
+/// @brief find all the MCA connected to an MCA
+/// @param[in] i_target a fapi2::Target MCA
/// @return a vector of fapi2::TARGET_TYPE_MCA
///
template<>
inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_MCA> > find_targets
( const fapi2::Target<fapi2::TARGET_TYPE_MCA>& i_target )
{
+ // TODO - RTC:174905. Find out if we really need a find API that returns a vector of MCA from an MCA
std::vector< fapi2::Target<fapi2::TARGET_TYPE_MCA> > l_temp = {i_target};
return l_temp;
}
OpenPOWER on IntegriCloud