diff options
| author | Nick Bofferding <bofferdn@us.ibm.com> | 2013-09-22 16:33:03 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-09-30 21:10:45 -0500 |
| commit | a61fc8350beb8439fedd080b04c5d83789a36dcd (patch) | |
| tree | 26224f3a8dfc0f6f64827b3e50f348335375fd59 /src/usr/targeting/common/target.C | |
| parent | f27bc3697954b533d4ce6eaec260d250cda527de (diff) | |
| download | blackbird-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.C | 41 |
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; |

