summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/fapi/fapiAttributeTank.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/fapi/fapiAttributeTank.C')
-rw-r--r--src/usr/hwpf/fapi/fapiAttributeTank.C458
1 files changed, 0 insertions, 458 deletions
diff --git a/src/usr/hwpf/fapi/fapiAttributeTank.C b/src/usr/hwpf/fapi/fapiAttributeTank.C
deleted file mode 100644
index a2f84f68d..000000000
--- a/src/usr/hwpf/fapi/fapiAttributeTank.C
+++ /dev/null
@@ -1,458 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/fapi/fapiAttributeTank.C $ */
-/* */
-/* 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 otherwise */
-/* divested of its trade secrets, irrespective of what has been */
-/* deposited with the U.S. Copyright Office. */
-/* */
-/* Origin: 30 */
-/* */
-/* IBM_PROLOG_END_TAG */
-/**
- * @file fapiAttributeTank.C
- *
- * @brief Implements the AttributeTank and Attribute classes.
- */
-
-/*
- * Change Log ******************************************************************
- * Flag Defect/Feature User Date Description
- * ------ -------------- ---------- ----------- ----------------------------
- * mjjones 06/07/2012 Created
- */
-#include <stdlib.h>
-#include <fapiAttributeTank.H>
-#include <fapiAttributeService.H>
-#include <fapiPlatTrace.H>
-#include <fapiReturnCode.H>
-#include <fapiSystemConfig.H>
-
-namespace fapi
-{
-
-//******************************************************************************
-Attribute::Attribute() :
- iv_val(0), iv_attrId(0), iv_targetType(0), iv_pos(0), iv_unitPos(0),
- iv_flags(0), iv_arrayD1(0), iv_arrayD2(0), iv_arrayD3(0), iv_arrayD4(0)
-{
-
-}
-
-//******************************************************************************
-AttributeChunk::AttributeChunk() :
- iv_numAttributes(0), iv_pAttributes(NULL)
-{
-
-}
-
-//******************************************************************************
-AttributeTank::AttributeTank() :
- iv_pName("AttributeTank"), iv_attributesExist(false)
-{
- FAPI_IMP("AttributeTank: Constructor");
-}
-
-//******************************************************************************
-AttributeTank::~AttributeTank()
-{
- FAPI_IMP("AttributeTank: Destructor");
-}
-
-//******************************************************************************
-void AttributeTank::clearAllAttributes()
-{
- platLock();
- FAPI_DBG("%s: Clearing all attributes", iv_pName);
- iv_attributesExist = false;
- iv_attributes.clear();
- platUnlock();
-}
-
-//******************************************************************************
-void AttributeTank::clearNonConstAttribute(const fapi::AttributeId i_attrId,
- const fapi::Target * const i_pTarget)
-{
- // Do a quick check to see if any attributes exist. This is deliberately
- // done without a lock for performance. The use-case for this function is
- // FAPI_ATTR_SET calling to clear any constant override, overrides should
- // not be changed while HWPs are setting attributes, but even if they are
- // there is no risk of corruption.
- if (!iv_attributesExist)
- {
- return;
- }
-
- uint32_t l_targetType = getTargetType(i_pTarget);
- uint16_t l_pos = getTargetPos(i_pTarget);
- uint8_t l_unitPos = getTargetUnitPos(i_pTarget);
-
- platLock();
-
- // Note that for an array attribute, there will be multiple Attribute
- // objects, one for each element
- AttributesItr_t l_itr = iv_attributes.begin();
-
- while (l_itr != iv_attributes.end())
- {
- if ( (!((*l_itr).iv_flags & ATTR_FLAG_CONST)) &&
- ((*l_itr).iv_attrId == static_cast<uint32_t>(i_attrId)) &&
- ((*l_itr).iv_targetType == l_targetType) &&
- ((*l_itr).iv_pos == l_pos) &&
- ((*l_itr).iv_unitPos == l_unitPos) )
- {
- FAPI_INF("%s: Clearing non-const attr 0x%x", iv_pName, i_attrId);
- l_itr = iv_attributes.erase(l_itr);
- }
- else
- {
- ++l_itr;
- }
- }
-
- if (iv_attributes.empty())
- {
- iv_attributesExist = false;
- }
-
- platUnlock();
-}
-
-//******************************************************************************
-void AttributeTank::setAttribute(const fapi::AttributeId i_attrId,
- const fapi::Target * const i_pTarget,
- const uint64_t i_val,
- const uint8_t i_arrayD1,
- const uint8_t i_arrayD2,
- const uint8_t i_arrayD3,
- const uint8_t i_arrayD4)
-{
- // Create an Attribute structure
- Attribute l_attr;
-
- l_attr.iv_val = i_val;
- l_attr.iv_attrId = i_attrId;
- l_attr.iv_targetType = getTargetType(i_pTarget);
- l_attr.iv_pos = getTargetPos(i_pTarget);
- l_attr.iv_unitPos = getTargetUnitPos(i_pTarget);
- l_attr.iv_flags = 0;
- l_attr.iv_arrayD1 = i_arrayD1;
- l_attr.iv_arrayD2 = i_arrayD2;
- l_attr.iv_arrayD3 = i_arrayD3;
- l_attr.iv_arrayD4 = i_arrayD4;
-
- // Set the attribute in the tank
- setAttribute(l_attr);
-}
-
-//******************************************************************************
-void AttributeTank::setAttribute(const Attribute & i_attribute)
-{
- platLock();
-
- // Search for an existing matching attribute
- bool l_found = false;
- AttributesItr_t l_itr = iv_attributes.begin();
-
- for (AttributesItr_t l_itr = iv_attributes.begin(); l_itr
- != iv_attributes.end(); ++l_itr)
- {
- if ( ((*l_itr).iv_attrId == i_attribute.iv_attrId) &&
- ((*l_itr).iv_targetType == i_attribute.iv_targetType) &&
- ((*l_itr).iv_pos == i_attribute.iv_pos) &&
- ((*l_itr).iv_unitPos == i_attribute.iv_unitPos) &&
- ((*l_itr).iv_arrayD1 == i_attribute.iv_arrayD1) &&
- ((*l_itr).iv_arrayD2 == i_attribute.iv_arrayD2) &&
- ((*l_itr).iv_arrayD3 == i_attribute.iv_arrayD3) &&
- ((*l_itr).iv_arrayD4 == i_attribute.iv_arrayD4) )
- {
- // Found existing attribute, update it unless the existing attribute
- // is const and the new attribute is non-const
- if (!( ((*l_itr).iv_flags & ATTR_FLAG_CONST) &&
- (!(i_attribute.iv_flags & ATTR_FLAG_CONST)) ) )
- {
- FAPI_DBG("%s: Updating attr 0x%x", iv_pName,
- i_attribute.iv_attrId);
- (*l_itr).iv_flags = i_attribute.iv_flags;
- (*l_itr).iv_val = i_attribute.iv_val;
- }
- l_found = true;
- break;
- }
- }
-
- if (!l_found)
- {
- // Add the attribute to the tank
- FAPI_DBG("%s: Setting attr 0x%x", iv_pName, i_attribute.iv_attrId);
- iv_attributesExist = true;
- iv_attributes.push_back(i_attribute);
- }
-
- platUnlock();
-}
-
-//******************************************************************************
-bool AttributeTank::getAttribute(const fapi::AttributeId i_attrId,
- const fapi::Target * const i_pTarget,
- uint64_t & o_val,
- const uint8_t i_arrayD1,
- const uint8_t i_arrayD2,
- const uint8_t i_arrayD3,
- const uint8_t i_arrayD4) const
-{
- // Do a quick check to see if any attributes exist. This is deliberately
- // done without a lock for performance. The use-case for this function is
- // FAPI_ATTR_GET calling to get an override, overrides should not be changed
- // while HWPs are getting attributes, but even if they are there is no risk
- // of corruption.
- if (!iv_attributesExist)
- {
- return false;
- }
-
- // Do not return any override for ATTR_POS or ATTR_CHIP_UNIT_POS because
- // this function calls getTargetPos and getTargetUnitPos which will query
- // ATTR_POS and ATTR_CHIP_UNIT_POS again resulting in an infinite loop
- if ((i_attrId == ATTR_POS) || (i_attrId == ATTR_CHIP_UNIT_POS))
- {
- return false;
- }
-
- bool l_found = false;
- uint32_t l_targetType = getTargetType(i_pTarget);
- uint16_t l_pos = getTargetPos(i_pTarget);
- uint8_t l_unitPos = getTargetUnitPos(i_pTarget);
-
- platLock();
-
- for (AttributesCItr_t l_itr = iv_attributes.begin(); l_itr
- != iv_attributes.end(); ++l_itr)
- {
- if ( ((*l_itr).iv_attrId == static_cast<uint32_t>(i_attrId)) &&
- ((*l_itr).iv_targetType == l_targetType) &&
- (((*l_itr).iv_pos == ATTR_POS_NA) || ((*l_itr).iv_pos == l_pos)) &&
- (((*l_itr).iv_unitPos == ATTR_UNIT_POS_NA) ||
- ((*l_itr).iv_unitPos == l_unitPos)) &&
- ((*l_itr).iv_arrayD1 == i_arrayD1) &&
- ((*l_itr).iv_arrayD2 == i_arrayD2) &&
- ((*l_itr).iv_arrayD3 == i_arrayD3) &&
- ((*l_itr).iv_arrayD4 == i_arrayD4) )
- {
- FAPI_INF("%s: Getting attr 0x%x:0x%llx", iv_pName, i_attrId,
- (*l_itr).iv_val);
- l_found = true;
- o_val = (*l_itr).iv_val;
- break;
- }
- }
-
- platUnlock();
- return l_found;
-}
-
-//******************************************************************************
-void AttributeTank::getAllAttributes(
- const AllocType i_allocType,
- std::vector<AttributeChunk> & o_attributes) const
-{
- platLock();
-
- FAPI_DBG("%s: Getting all attributes", iv_pName);
-
- if (iv_attributes.size())
- {
- AttributesCItr_t l_itr = iv_attributes.begin();
- size_t l_numAttrsRemaining = iv_attributes.size();
-
- while (l_numAttrsRemaining)
- {
- AttributeChunk l_chunk;
- l_chunk.iv_numAttributes = l_numAttrsRemaining;
-
- if (l_chunk.iv_numAttributes > AttributeChunk::MAX_ATTRS_PER_CHUNK)
- {
- l_chunk.iv_numAttributes = AttributeChunk::MAX_ATTRS_PER_CHUNK;
- }
-
- if (i_allocType == ALLOC_TYPE_MALLOC)
- {
- l_chunk.iv_pAttributes = static_cast<uint8_t *>
- (malloc(sizeof(Attribute) * l_chunk.iv_numAttributes));
- }
- else
- {
- l_chunk.iv_pAttributes =
- new uint8_t[sizeof(Attribute) * l_chunk.iv_numAttributes];
- }
-
- Attribute * l_pAttr = reinterpret_cast<Attribute *>
- (l_chunk.iv_pAttributes);
-
- for(size_t i = 0; i < l_chunk.iv_numAttributes; i++)
- {
- *l_pAttr++ = (*l_itr);
- l_itr++;
- }
-
- o_attributes.push_back(l_chunk);
- l_numAttrsRemaining -= l_chunk.iv_numAttributes;
- }
- }
-
- platUnlock();
-}
-
-//******************************************************************************
-bool AttributeTank::attributesExist()
-{
- platLock();
- bool l_attributesExist = iv_attributesExist;
- platUnlock();
- return l_attributesExist;
-}
-
-//******************************************************************************
-uint32_t AttributeTank::getTargetType(const fapi::Target * const i_pTarget)
-{
- if (i_pTarget == NULL)
- {
- return static_cast<uint32_t>(TARGET_TYPE_SYSTEM);
- }
- else
- {
- return static_cast<uint32_t>(i_pTarget->getType());
- }
-}
-
-//******************************************************************************
-uint16_t AttributeTank::getTargetPos(const fapi::Target * const i_pTarget)
-{
- // Note that any errors querying a parent chip or a position attribute are
- // ignored and the function returns ATTR_POS_NA
- uint16_t l_ret = ATTR_POS_NA;
-
- if (i_pTarget != NULL)
- {
- ReturnCode l_rc;
- uint32_t l_pos = 0xffffffff;
-
- if (i_pTarget->isChiplet())
- {
- // Target is a chiplet, o_pos is the parent chip position
- Target l_chip;
-
- l_rc = fapiGetParentChip(*i_pTarget, l_chip);
-
- if (l_rc)
- {
- FAPI_ERR("Error (0x%x) from fapiGetParentChip",
- static_cast<uint32_t>(l_rc));
- }
- else
- {
- l_rc = FAPI_ATTR_GET(ATTR_POS, &l_chip, l_pos);
-
- if (l_rc)
- {
- FAPI_ERR("Error (0x%x) getting parent chip position attr",
- static_cast<uint32_t>(l_rc));
- }
- else
- {
- l_ret = l_pos;
- }
- }
- }
- else
- {
- // Target is not a chiplet, iv_pos is the Target position
- l_rc = FAPI_ATTR_GET(ATTR_POS, i_pTarget, l_pos);
-
- if (l_rc)
- {
- FAPI_ERR("Error (0x%x) getting position attr",
- static_cast<uint32_t>(l_rc));
- }
- else
- {
- l_ret = l_pos;
- }
- }
- }
-
- return l_ret;
-}
-
-//******************************************************************************
-uint8_t AttributeTank::getTargetUnitPos(const fapi::Target * const i_pTarget)
-{
- // Note that any errors querying a position attribute are ignored and the
- // function returns ATTR_UNIT_POS_NA
- uint8_t l_ret = ATTR_UNIT_POS_NA;
-
- if (i_pTarget != NULL)
- {
- if (i_pTarget->isChiplet())
- {
- uint8_t l_unitPos = 0xff;
-
- ReturnCode l_rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, i_pTarget,
- l_unitPos);
-
- if (l_rc)
- {
- FAPI_ERR("Error (0x%x) getting chiplet position attr",
- static_cast<uint32_t>(l_rc));
- }
- else
- {
- l_ret = l_unitPos;
- }
- }
- }
-
- return l_ret;
-}
-//******************************************************************************
-OverrideAttributeTank::OverrideAttributeTank()
-{
- iv_pName = "OverrideAttributeTank";
- FAPI_IMP("OverrideAttributeTank: Constructor");
-}
-
-//******************************************************************************
-SyncAttributeTank::SyncAttributeTank()
-{
- iv_pName = "SyncAttributeTank";
- FAPI_IMP("SyncAttributeTank: Constructor");
-}
-
-//******************************************************************************
-void SyncAttributeTank::setAttribute(const fapi::AttributeId i_attrId,
- const fapi::Target * const i_pTarget,
- const uint64_t i_val,
- const uint8_t i_arrayD1,
- const uint8_t i_arrayD2,
- const uint8_t i_arrayD3,
- const uint8_t i_arrayD4)
-{
- if (platSyncEnabled())
- {
- AttributeTank::setAttribute(i_attrId, i_pTarget, i_val, i_arrayD1,
- i_arrayD2, i_arrayD3, i_arrayD4);
- }
-}
-
-}
OpenPOWER on IntegriCloud