diff options
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/memory/lib/utils/nimbus_find.H')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/memory/lib/utils/nimbus_find.H | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/utils/nimbus_find.H b/src/import/chips/p9/procedures/hwp/memory/lib/utils/nimbus_find.H index ec7909b66..b922938d4 100644 --- a/src/import/chips/p9/procedures/hwp/memory/lib/utils/nimbus_find.H +++ b/src/import/chips/p9/procedures/hwp/memory/lib/utils/nimbus_find.H @@ -22,3 +22,91 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ + +/// +/// @file nimbus_find.H +/// @brief Nimbus templates specialization for finding things +/// +// *HWP HWP Owner: Andre Marin <aamarin@us.ibm.com> +// *HWP HWP Backup: Stephen Glancy <sglancy@us.ibm.com> +// *HWP Team: Memory +// *HWP Level: 3 +// *HWP Consumed by: HB:FSP + +#ifndef _MSS_NIMBUS_FIND_H +#define _MSS_NIMBUS_FIND_H + +#include <fapi2.H> +#include <vector> +#include <generic/memory/lib/utils/find.H> + +namespace mss +{ + +/// +/// @brief find the McBIST given a DIMM +/// @param[in] i_target the fapi2 target DIMM +/// @return a McBIST target. +/// +template<> +inline fapi2::Target<fapi2::TARGET_TYPE_MCBIST> find_target(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target) +{ + return i_target.getParent<fapi2::TARGET_TYPE_MCA>().getParent<fapi2::TARGET_TYPE_MCBIST>(); +} + +/// +/// @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 +/// +template<> +inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_DIMM> > +find_targets( const fapi2::Target<fapi2::TARGET_TYPE_MCS>& i_target, + fapi2::TargetState i_state ) +{ + std::vector< fapi2::Target<fapi2::TARGET_TYPE_DIMM> > l_dimms; + + for (const auto& p : i_target.getChildren<fapi2::TARGET_TYPE_MCA>(i_state)) + { + auto l_these_dimms( p.getChildren<fapi2::TARGET_TYPE_DIMM>(i_state) ); + l_dimms.insert(l_dimms.end(), l_these_dimms.begin(), l_these_dimms.end()); + } + + return l_dimms; +} + +/// +/// @brief find all the dimms connected to an MCBIST +/// @param[in] i_target a fapi2::Target MCBIST +/// @return a vector of fapi2::TARGET_TYPE_DIMM +/// +template<> +inline std::vector< fapi2::Target<fapi2::TARGET_TYPE_DIMM> > +find_targets( const fapi2::Target<fapi2::TARGET_TYPE_MCBIST>& i_target, + fapi2::TargetState i_state ) +{ + std::vector< fapi2::Target<fapi2::TARGET_TYPE_DIMM> > l_dimms; + + for (const auto& p : i_target.getChildren<fapi2::TARGET_TYPE_MCA>(i_state)) + { + auto l_these_dimms( p.getChildren<fapi2::TARGET_TYPE_DIMM>(i_state) ); + l_dimms.insert(l_dimms.end(), l_these_dimms.begin(), l_these_dimms.end()); + } + + return l_dimms; +} + +/// +/// @brief find the MCS given a DIMM +/// @param[in] i_target the fapi2 target DIMM +/// @return a MCS target. +/// +template<> +inline fapi2::Target<fapi2::TARGET_TYPE_MCS> find_target( const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target) +{ + return i_target.getParent<fapi2::TARGET_TYPE_MCA>().getParent<fapi2::TARGET_TYPE_MCS>(); +} + +}// mss + +#endif |