diff options
Diffstat (limited to 'src/usr/targeting/common/utilFilter.C')
-rw-r--r-- | src/usr/targeting/common/utilFilter.C | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/usr/targeting/common/utilFilter.C b/src/usr/targeting/common/utilFilter.C index 2be7cdabb..3675dfb04 100644 --- a/src/usr/targeting/common/utilFilter.C +++ b/src/usr/targeting/common/utilFilter.C @@ -455,6 +455,38 @@ const Target * getParentChip( const Target * i_pChiplet ) return l_pChip; } +Target * getImmediateParentByAffinity(const Target * i_child ) +{ + Target * l_parent = NULL; + + // Create a vector of TARGETING::Target pointers + TARGETING::TargetHandleList l_chipList; + + // Get parent + TARGETING::targetService().getAssociated(l_chipList, i_child, + TARGETING::TargetService::PARENT_BY_AFFINITY, + TARGETING::TargetService::IMMEDIATE, NULL); + + if (l_chipList.size() == 1) + { + l_parent = l_chipList[0]; + } + else if (l_chipList.size() == 0) + { + TARG_ERR("Failed to find a parent target for huid=%.8X", + TARGETING::get_huid(i_child)); + } + else + { + TARG_ERR("Found %d parent targets for huid=%.8X, only expected to find 1", + l_chipList.size(), + TARGETING::get_huid(i_child)); + } + + return l_parent; +} + + Target * getParent( const Target * i_unit , TARGETING::TYPE &i_pType) { Target * l_parent = NULL; |