diff options
author | Brian Horton <brianh@linux.ibm.com> | 2013-04-30 09:33:17 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-05-17 09:59:11 -0500 |
commit | 4f753ed80d5caf3646fcb2e9bead2938d9ca7ade (patch) | |
tree | 11e8a681533f3e6743e6890a8f8db687dc8c85bf /src/include | |
parent | 4927c80d6604832db0d9b2a030ed44682fabb947 (diff) | |
download | talos-hostboot-4f753ed80d5caf3646fcb2e9bead2938d9ca7ade.tar.gz talos-hostboot-4f753ed80d5caf3646fcb2e9bead2938d9ca7ade.zip |
add support for ChangeSinceLastChecked bits
replace hwas changedSinceLastIpl bit to a bit for different services
(ie, GARD, mem diag, psi diag, etc) and a subscription mask; this will
be used by hcdb code - when a target changes, the mask will be copied
into the bits field, and then services will clear their bits when they
process the change.
also update and create new hwas predicate to handle new attributes, as
well as targeting utilities to set and clear the bits.
Change-Id: Ie4a29500d07d7722f77ae2e89459e79a8b1e535b
RTC: 63434
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4343
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include')
4 files changed, 293 insertions, 89 deletions
diff --git a/src/include/usr/targeting/common/predicates/predicatehwas.H b/src/include/usr/targeting/common/predicates/predicatehwas.H index 07e623314..48ff3304c 100644 --- a/src/include/usr/targeting/common/predicates/predicatehwas.H +++ b/src/include/usr/targeting/common/predicates/predicatehwas.H @@ -1,26 +1,25 @@ -/* IBM_PROLOG_BEGIN_TAG - * This is an automatically generated prolog. - * - * $Source: src/include/usr/targeting/common/predicates/predicatehwas.H $ - * - * IBM CONFIDENTIAL - * - * COPYRIGHT International Business Machines Corp. 2012 - * - * p1 - * - * Object Code Only (OCO) source materials - * Licensed Internal Code Source Materials - * IBM HostBoot Licensed Internal Code - * - * The source code for this program is not published or other- - * wise divested of its trade secrets, irrespective of what has - * been deposited with the U.S. Copyright Office. - * - * Origin: 30 - * - * IBM_PROLOG_END_TAG - */ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/targeting/common/predicates/predicatehwas.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ #ifndef __TARGETING_COMMON_PREDICATEHWAS_H #define __TARGETING_COMMON_PREDICATEHWAS_H @@ -46,7 +45,7 @@ #include <targeting/common/predicates/predicatebase.H> //****************************************************************************** -// Macros +// Macros //****************************************************************************** #undef TARG_NAMESPACE @@ -54,7 +53,7 @@ #undef TARG_FN //****************************************************************************** -// Interface +// Interface //****************************************************************************** namespace TARGETING @@ -66,7 +65,7 @@ namespace TARGETING class Target; /** - * @brief Predicate class which filters a target based on its HWAS state + * @brief Predicate class which filters a target based on its HWAS state */ class PredicateHwas : public PredicateBase { @@ -80,8 +79,8 @@ class PredicateHwas : public PredicateBase /** * @brief Destroy an HWAS state predicate */ - virtual ~PredicateHwas(); - + virtual ~PredicateHwas(); + /** * @brief Reset the predicate to match everything * @@ -103,7 +102,7 @@ class PredicateHwas : public PredicateBase * * @param[in] i_present Desired present state * - * @return Reference to the predicate, for chaining + * @return Reference to the predicate, for chaining */ PredicateHwas& present(const bool i_present); @@ -112,44 +111,33 @@ class PredicateHwas : public PredicateBase * * @param[in] i_functional Desired functional state * - * @return Reference to the predicate, for chaining + * @return Reference to the predicate, for chaining */ PredicateHwas& functional(const bool i_functional); /** - * @brief Configure predicate to look for the given changed since last - * IPL state - * - * @param[in] i_changedSinceLastIpl Desired changed since last IPL - * state - * - * @return Reference to the predicate, for chaining - */ - PredicateHwas& changedSinceLastIpl(const bool i_changedSinceLastIpl); - - /** - * @brief Configure predicate to look for the given dump functional + * @brief Configure predicate to look for the given dump functional * state * * @param[in] i_dumpFunctional Desired dump functional state * - * @return Reference to the predicate, for chaining + * @return Reference to the predicate, for chaining */ PredicateHwas& dumpFunctional(const bool i_dumpFunctional); /** * @brief Returns whether target matches the desired HWAS state - * + * * @par Detailed Description: * Returns whether target matches the desired HWAS state. Current - * HWAS sub-fields compared include poweredOn, present, functional, - * changedSinceLastIpl, and dumpFunctional. On construction, the - * predicate matches any state of those five fields. To make the - * filter more restrictive, call any combination of the state - * configuration functions with the desired values. The filter + * HWAS sub-fields compared include poweredOn, present, functional + * and dumpFunctional. On construction, the + * predicate matches any state of those fields. To make the + * filter more restrictive, call any combination of the state + * configuration functions with the desired values. The filter * will make sure all the desired fields have requested values * before returning a match. To reset the filter to match all - * targets, call reset(). See PredicateBase class for + * targets, call reset(). See PredicateBase class for * parameter/return description. * * @param[in] i_pTarget @@ -161,7 +149,7 @@ class PredicateHwas : public PredicateBase const Target* i_pTarget) const; private: - + /** * @brief Union that exposes raw value of an HWAS state attribute * for purposes of bitwise comparison @@ -172,7 +160,7 @@ class PredicateHwas : public PredicateBase */ union hwasState { - ATTR_HWAS_STATE_type attribute; // Attribute + ATTR_HWAS_STATE_type attribute; // Attribute uint64_t rawValue; // Flattened representation }; @@ -203,7 +191,7 @@ inline PredicateHwas& PredicateHwas::poweredOn( iv_desired.attribute.poweredOn = i_poweredOn; iv_valid.attribute.poweredOn = true; return *this; -} +} //****************************************************************************** // PredicateHwas::present @@ -215,7 +203,7 @@ inline PredicateHwas& PredicateHwas::present( iv_desired.attribute.present = i_present; iv_valid.attribute.present = true; return *this; -} +} //****************************************************************************** // PredicateHwas::functional @@ -227,20 +215,8 @@ inline PredicateHwas& PredicateHwas::functional( iv_desired.attribute.functional = i_functional; iv_valid.attribute.functional = true; return *this; -} - -//****************************************************************************** -// PredicateHwas::changedSinceLastIpl -//****************************************************************************** +} -inline PredicateHwas& PredicateHwas::changedSinceLastIpl( - const bool i_changedSinceLastIpl) -{ - iv_desired.attribute.changedSinceLastIPL = i_changedSinceLastIpl; - iv_valid.attribute.changedSinceLastIPL = true; - return *this; -} - //****************************************************************************** // PredicateHwas::dumpFunctional //****************************************************************************** diff --git a/src/include/usr/targeting/common/predicates/predicatehwaschanged.H b/src/include/usr/targeting/common/predicates/predicatehwaschanged.H new file mode 100644 index 000000000..6d0144623 --- /dev/null +++ b/src/include/usr/targeting/common/predicates/predicatehwaschanged.H @@ -0,0 +1,212 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/targeting/common/predicates/predicatehwaschanged.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +#ifndef __TARGETING_COMMON_PREDICATEHWASCHANGED_H +#define __TARGETING_COMMON_PREDICATEHWASCHANGED_H + +/** + * @file targeting/common/predicates/predicatehwaschanged.H + * + * @brief Interface for a predicate which fiters a target based on its HWAS + * changed flag + */ + +//****************************************************************************** +// Includes +//****************************************************************************** + +// STD + +// Other Host Boot Components + +// Targeting Component +#include <targeting/common/target.H> +#include <targeting/common/attributes.H> +#include <targeting/common/predicates/predicatebase.H> + +//****************************************************************************** +// Macros +//****************************************************************************** + +#undef TARG_NAMESPACE +#undef TARG_CLASS +#undef TARG_FN + +//****************************************************************************** +// Interface +//****************************************************************************** + +namespace TARGETING +{ + +#define TARG_NAMESPACE "TARGETING::" +#define TARG_CLASS "PredicateHWASChanged::" + +class Target; + +/** + * @brief Predicate class which filters a target based on HWAS changed flag + */ +class PredicateHwasChanged : public PredicateBase +{ + public: + + /** + * @brief Create an HWAS changed flag predicate + */ + PredicateHwasChanged(); + + /** + * @brief Destroy an HWAS changed flag predicate + */ + virtual ~PredicateHwasChanged(); + + /** + * @brief Reset the predicate to match everything + * + * @return Reference to the predicate, for chaining + */ + PredicateHwasChanged& reset(); + + /** + * @brief Configure predicate to look for the setting of a particular + * bit in the HWAS_CHANGED_STATE_FLAG + * + * @param[in] i_bit HWAS_CHANGED_BIT + * @param[in] i_changed Desired changed setting of that bit + * + * @return Reference to the predicate, for chaining + */ + PredicateHwasChanged& changedBit( + const HWAS_CHANGED_BIT i_bit, const bool i_changed); + + /** + * @brief Configure predicate to look for the particular state of + * bits in the HWAS_CHANGED_STATE_FLAG + * + * @param[in] i_changed Desired changed setting of all bits + * + * @return Reference to the predicate, for chaining + */ + PredicateHwasChanged& allChangesApplied( + const bool i_changed); + + /** + * @brief Returns whether target matches the desired HWAS state + * + * @par Detailed Description: + * Returns whether target matches the desired HWAS state. Current + * HWAS sub-fields compared include poweredOn, present, functional, + * changedSinceLastIpl, and dumpFunctional. On construction, the + * predicate matches any state of those fields. To make the + * filter more restrictive, call any combination of the state + * configuration functions with the desired values. The filter + * will make sure all the desired fields have requested values + * before returning a match. To reset the filter to match all + * targets, call reset(). See PredicateBase class for + * parameter/return description. + * + * @param[in] i_pTarget + * Target handle pointing to the target to compare to + * + * @return bool indicating whether the target matches or not + */ + virtual bool operator()( + const Target* i_pTarget) const; + + private: + + /** + * @brief Union that exposes raw value of an HWAS changed flag + * for purposes of bitwise comparison + * + * @warning ATTR_HWAS_STATE size must be <= uint64_t in size, otherwise + * code cannot guarantee that the required bitfields fit. This + * requirement is enforced by a compile-time assert + */ + union hwasStateChangedFlag + { + ATTR_HWAS_STATE_CHANGED_FLAG_type attribute; // Attribute + uint64_t rawValue; // Flattened representation + }; + + hwasStateChangedFlag iv_desired; ///< Desired bits + hwasStateChangedFlag iv_valid; ///< mask of bits to check + + TARG_DISABLE_COPY_AND_ASSIGNMENT_OPERATORS(PredicateHwasChanged); +}; + +//****************************************************************************** +// PredicateHwasChanged::PredicateHwasChanged +//****************************************************************************** + +inline PredicateHwasChanged::PredicateHwasChanged() +{ + // Ignore reference + reset(); +} + +//****************************************************************************** +// PredicateHwasChanged::changedBit +//****************************************************************************** + +inline PredicateHwasChanged& PredicateHwasChanged::changedBit( + const HWAS_CHANGED_BIT i_bit, const bool i_changed) +{ + if (i_changed) + { + iv_desired.rawValue |= i_bit; // turn bit on + } + else + { + iv_desired.rawValue &= ~i_bit; // turn bit off + } + iv_valid.rawValue |= i_bit; // turn this bit on to check + return *this; +} + +//****************************************************************************** +// PredicateHwasChanged::allChangesApplied +//****************************************************************************** + +inline PredicateHwasChanged& PredicateHwasChanged::allChangesApplied( + const bool i_changed) +{ + if (i_changed) + { + iv_desired.rawValue = 0xFFFFFFFFFFFFFFFFull; // turn all bits on + } + else + { + iv_desired.rawValue = 0x0ull; // turn all bits off + } + iv_valid.rawValue = 0xFFFFFFFFFFFFFFFFull; // turn all bits on to check + return *this; +} + +#undef TARG_CLASS +#undef TARG_NAMESPACE + +} // End namespace TARGETING + +#endif // __TARGETING_COMMON_PREDICATEHWASCHANGED_H + diff --git a/src/include/usr/targeting/common/predicates/predicates.H b/src/include/usr/targeting/common/predicates/predicates.H index 85b75d1f9..8c422b036 100644 --- a/src/include/usr/targeting/common/predicates/predicates.H +++ b/src/include/usr/targeting/common/predicates/predicates.H @@ -33,6 +33,7 @@ #include <targeting/common/predicates/predicatectm.H> #include <targeting/common/predicates/predicateisfunctional.H> #include <targeting/common/predicates/predicatehwas.H> +#include <targeting/common/predicates/predicatehwaschanged.H> #include <targeting/common/predicates/predicatepostfixexpr.H> #include <targeting/common/predicates/predicateattrval.H> diff --git a/src/include/usr/targeting/common/util.H b/src/include/usr/targeting/common/util.H index 4851dd87b..69f302df8 100644 --- a/src/include/usr/targeting/common/util.H +++ b/src/include/usr/targeting/common/util.H @@ -1,25 +1,25 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/usr/targeting/util.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2012 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/targeting/common/util.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ #ifndef __TARGETING_COMMON_UTIL_H #define __TARGETING_COMMON_UTIL_H @@ -30,6 +30,8 @@ * @brief Targeting utility functions */ +#include <attributeenums.H> + namespace TARGETING { @@ -67,6 +69,19 @@ bool is_vpo( void ); */ uint32_t get_huid( const Target* i_target ); +/** + * @brief Set HWAS Changed Mask to subscription mask + * @param[in] Pointer to a Target + */ +void update_hwas_changed_mask(Target * i_target); + +/** + * @brief Set HWAS Changed Mask to subscription mask + * @param[in] Pointer to a Target + * @param[in] bit to clear + */ +void clear_hwas_changed_bit(Target * i_target, const HWAS_CHANGED_BIT i_bit); + } #endif // __TARGETING_COMMON_UTIL_H |