summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Phan <cphan@us.ibm.com>2014-02-24 14:32:05 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-03-13 22:33:08 -0500
commit2bf84ac57e2129aea67a37e6415d4b489ae6fb7f (patch)
treec6c34a699719df5e5948d057f2eebb24f7b787d0
parent570d4a93f4fb34adce50898415a0f4da6e63fa8c (diff)
downloadtalos-hostboot-2bf84ac57e2129aea67a37e6415d4b489ae6fb7f.tar.gz
talos-hostboot-2bf84ac57e2129aea67a37e6415d4b489ae6fb7f.zip
PRD: Add scom register capture from secondary analysis to elog
Change-Id: I2203a0bfe1611030cfca5e2d4ebe2c77d710cb08 RTC: 95887 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9115 Tested-by: Jenkins Server Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com> Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9618
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/config/iipSystem.C5
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/register/iipCaptureData.h41
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/register/prdfCaptureData.C21
3 files changed, 65 insertions, 2 deletions
diff --git a/src/usr/diag/prdf/common/framework/config/iipSystem.C b/src/usr/diag/prdf/common/framework/config/iipSystem.C
index 9a9379008..68484a81d 100755
--- a/src/usr/diag/prdf/common/framework/config/iipSystem.C
+++ b/src/usr/diag/prdf/common/framework/config/iipSystem.C
@@ -376,6 +376,11 @@ int32_t System::Analyze(STEP_CODE_DATA_STRUCT & serviceData,
l_temp_sdc->AddSignatureList(
*( serviceData.service_data->GetErrorSignature() ));
+
+ // merge debug scom data from the two analysis
+ l_temp_sdc->GetCaptureData().mergeData(
+ serviceData.service_data->GetCaptureData());
+
*serviceData.service_data = *l_temp_sdc;
delete l_temp_sdc;
diff --git a/src/usr/diag/prdf/common/framework/register/iipCaptureData.h b/src/usr/diag/prdf/common/framework/register/iipCaptureData.h
index 5f9316fac..3d5bae23c 100755
--- a/src/usr/diag/prdf/common/framework/register/iipCaptureData.h
+++ b/src/usr/diag/prdf/common/framework/register/iipCaptureData.h
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 1996,2013 */
+/* COPYRIGHT International Business Machines Corp. 1996,2014 */
/* */
/* p1 */
/* */
@@ -358,6 +358,45 @@ private:
RegType __private_storage;
//Constructor allows a value to be passed in to compare against.
};
+
+ // Predicate for deciding whether to delete an
+ // element of data from a Capture Data list.
+ class prdfCompareCaptureDataEntry :
+ public std::unary_function<Data &, bool>
+ {
+ public:
+ prdfCompareCaptureDataEntry(
+ TARGETING::TargetHandle_t chipHandle,
+ uint16_t address) :
+ __chipHandle(chipHandle),
+ __address(address) {};
+ bool operator() (Data &i)
+ {
+ return ((i.chipHandle == __chipHandle) &&
+ (i.address == __address));
+ };
+
+ private:
+ TARGETING::TargetHandle_t __chipHandle;
+ uint16_t __address;
+ };
+
+public:
+
+ /**
+ * @brief Merge scom register data from two captures
+ * @param i_cd secondary capture data to merge
+ */
+ void mergeData(CaptureData & i_cd);
+
+ /**
+ * @brief Get the Scom data pointer
+ * @return the Scom data pointer
+ */
+ DataContainerType * getData() { return &data; }
+
+
+
};
} // end namespace PRDF
diff --git a/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C b/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C
index 0431cf87e..67eab58cc 100755
--- a/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C
+++ b/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2003,2013 */
+/* COPYRIGHT International Business Machines Corp. 2003,2014 */
/* */
/* p1 */
/* */
@@ -365,6 +365,25 @@ CaptureData & CaptureData::operator=(const uint8_t *i_flatdata)
// <-- dg08a
+void CaptureData::mergeData(CaptureData & i_cd)
+{
+ DataContainerType l_data = *(i_cd.getData());
+
+ // Remove duplicate entries from secondary capture data
+ for (ConstDataIterator i = data.begin(); i != data.end(); i++)
+ {
+ l_data.remove_if(
+ prdfCompareCaptureDataEntry(i->chipHandle,
+ i->address) );
+ }
+
+ // Add secondary capture data to primary one
+ data.insert( data.end(),
+ l_data.begin(),
+ l_data.end() );
+}
+
+
// copy ctor for Data class
CaptureData::Data::Data(const Data & d):
chipHandle(d.chipHandle), address(d.address),
OpenPOWER on IntegriCloud