summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/common/target.C
diff options
context:
space:
mode:
authorNick Bofferding <bofferdn@us.ibm.com>2013-09-22 16:33:03 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-09-30 21:10:45 -0500
commita61fc8350beb8439fedd080b04c5d83789a36dcd (patch)
tree26224f3a8dfc0f6f64827b3e50f348335375fd59 /src/usr/targeting/common/target.C
parentf27bc3697954b533d4ce6eaec260d250cda527de (diff)
downloadblackbird-hostboot-a61fc8350beb8439fedd080b04c5d83789a36dcd.tar.gz
blackbird-hostboot-a61fc8350beb8439fedd080b04c5d83789a36dcd.zip
Support attribute write callback and generate attribute metadata
- Added targeting support to register/deregister/invoke attribute write callback - Modified attribute compiler to generate attribute metadata source files - Added generated attribute metadata source files to common targeting makefile Change-Id: I4496dd5351bbf107ae6c2bc790d8e4289815b4a3 RTC: 82231 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6286 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
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