summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/common/target.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/targeting/common/target.C')
-rw-r--r--src/usr/targeting/common/target.C41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/usr/targeting/common/target.C b/src/usr/targeting/common/target.C
index 86e8440e6..5209c3891 100644
--- a/src/usr/targeting/common/target.C
+++ b/src/usr/targeting/common/target.C
@@ -51,6 +51,9 @@ namespace TARGETING
#define TARG_NAMESPACE "TARGETING::"
#define TARG_CLASS "Target::"
+// Static function pointer variable allocation
+pCallbackFuncPtr Target::cv_pCallbackFuncPtr = NULL;
+
//******************************************************************************
// Target::~Target
//******************************************************************************
@@ -180,6 +183,10 @@ bool Target::_trySetAttr(
if (l_pAttrData)
{
memcpy(l_pAttrData, i_pAttrData, i_size);
+ if( unlikely(cv_pCallbackFuncPtr != NULL) )
+ {
+ cv_pCallbackFuncPtr(this, i_attr, i_size, i_pAttrData);
+ }
}
return (l_pAttrData != NULL);
@@ -398,7 +405,7 @@ uint8_t * Target::targetFFDC( uint32_t & o_size ) const
//******************************************************************************
Target* Target::getTargetFromHuid(
- const ATTR_HUID_type i_huid) const
+ const ATTR_HUID_type i_huid)
{
#define TARG_FN "getTargetFromHuid"
Target* l_pTarget = NULL;
@@ -506,6 +513,38 @@ uint8_t Target::getAttrTankTargetUnitPos() const
}
//******************************************************************************
+// Target::installWriteAttributeCallback
+//******************************************************************************
+bool Target::installWriteAttributeCallback(
+ TARGETING::pCallbackFuncPtr & i_callBackFunc)
+{
+ #define TARG_FN "installWriteAttributeCallback"
+ TARG_ENTER();
+
+ return __sync_bool_compare_and_swap(&cv_pCallbackFuncPtr,
+ NULL, i_callBackFunc);
+ TARG_EXIT();
+ #undef TARG_FN
+}
+
+//******************************************************************************
+// Target::uninstallWriteAttributeCallback
+//******************************************************************************
+bool Target::uninstallWriteAttributeCallback()
+{
+ #define TARG_FN "uninstallWriteAttributeCallback"
+ TARG_ENTER();
+
+ __sync_synchronize();
+ cv_pCallbackFuncPtr = NULL;
+ __sync_synchronize();
+ return true;
+
+ TARG_EXIT();
+ #undef TARG_FN
+}
+
+//******************************************************************************
// Attribute Tanks
//******************************************************************************
AttributeTank Target::cv_overrideTank;
OpenPOWER on IntegriCloud