summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/util/prdfFilters.C
diff options
context:
space:
mode:
authorPrem Shanker Jha <premjha2@in.ibm.com>2013-09-20 07:40:14 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-12-01 18:51:43 -0600
commit554aa3dbb530d6da0de7c83bf23346ae5f6032eb (patch)
tree572c61c8da5932bd593804ddef39e78ccc2076f2 /src/usr/diag/prdf/common/util/prdfFilters.C
parent90b6464a0364c1bb86ad490c3807dcbbaab3b26b (diff)
downloadtalos-hostboot-554aa3dbb530d6da0de7c83bf23346ae5f6032eb.tar.gz
talos-hostboot-554aa3dbb530d6da0de7c83bf23346ae5f6032eb.zip
PRDF: Added support for secondary filter in rule code.
- Secondary filter basically mask the certain bits. As a result it is possible to divide FIR analysis in two phase. This filter is intended to filter out secondary bits during first phase of analysis. Change-Id: Ib42b269d2e9fd5588b58950949c379bdc8518bfc RTC: 85130 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/6288 Tested-by: Jenkins Server Reviewed-by: Christopher T. Phan <cphan@us.ibm.com> Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.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/14572
Diffstat (limited to 'src/usr/diag/prdf/common/util/prdfFilters.C')
-rwxr-xr-xsrc/usr/diag/prdf/common/util/prdfFilters.C180
1 files changed, 81 insertions, 99 deletions
diff --git a/src/usr/diag/prdf/common/util/prdfFilters.C b/src/usr/diag/prdf/common/util/prdfFilters.C
index 8d25656eb..141688bf3 100755
--- a/src/usr/diag/prdf/common/util/prdfFilters.C
+++ b/src/usr/diag/prdf/common/util/prdfFilters.C
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 1996,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -35,9 +37,9 @@
#include <prdfBitKey.H>
#include <prdfFilters.H>
//#include <xspprdScanCommFilter.h>
-#include <iipscr.h>
//#include <xspprdFilterLink.h>
-
+#include <iipstep.h>
+#include <iipServiceDataCollector.h>
#undef iipFilters_C
namespace PRDF
@@ -69,49 +71,50 @@ namespace PRDF
FilterClass::~FilterClass(void)
{}
-//-------------------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
-bool FilterPriority::Apply(BitKey & ioBitList)
+bool FilterPriority::Apply( BitKey & ioBitList, STEP_CODE_DATA_STRUCT & io_sdc )
{
- bool modified = false;
- if(ioBitList.isSubset(ivBitKey))
- {
- ioBitList = ivBitKey;
- modified = true;
- }
- return modified;
+ bool modified = false;
+ if( ioBitList.isSubset(ivBitKey) )
+ {
+ ioBitList = ivBitKey;
+ modified = true;
+ }
+ return modified;
}
-//-------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
-bool SingleBitFilter::Apply(BitKey & bit_list)
+bool SingleBitFilter::Apply( BitKey & bit_list, STEP_CODE_DATA_STRUCT & io_sdc )
{
- bool rc = false;
- uint32_t list_length = bit_list.size();
- if(list_length > 1)
- {
- rc = true;
- while(--list_length)
+ bool rc = false;
+ uint32_t list_length = bit_list.size();
+ if( list_length > 1 )
{
- bit_list.removeBit();
+ rc = true;
+ while( --list_length )
+ {
+ bit_list.removeBit();
+ }
}
- }
- return(rc);
+ return( rc );
}
-//-------------------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
-bool PrioritySingleBitFilter::Apply(BitKey & bit_list)
+bool PrioritySingleBitFilter::Apply( BitKey & bit_list,
+ STEP_CODE_DATA_STRUCT & io_sdc )
{
bool l_modified = false;
// Do priority bit.
- for (size_t i = 0; i < iv_bitList.size(); i++)
+ for ( size_t i = 0; i < iv_bitList.size(); i++ )
{
BitKey l_key = iv_bitList[i];
- if (bit_list.isSubset(l_key))
+ if ( bit_list.isSubset(l_key) )
{
l_modified = true;
bit_list = l_key;
@@ -119,9 +122,9 @@ bool PrioritySingleBitFilter::Apply(BitKey & bit_list)
}
}
// Do single bit filter portion.
- if (!l_modified)
+ if ( !l_modified )
{
- while (1 < bit_list.size())
+ while ( 1 < bit_list.size() )
{
l_modified = true;
bit_list.removeBit();
@@ -130,93 +133,72 @@ bool PrioritySingleBitFilter::Apply(BitKey & bit_list)
return l_modified;
}
-//-------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
-bool FilterTranspose::Apply(BitKey & iBitList)
+bool FilterTranspose::Apply( BitKey & iBitList, STEP_CODE_DATA_STRUCT & io_sdc )
{
- bool result = false;
- if(iBitList == ivBitKey)
- {
- BitKey bk(ivSingleBitPos);
- iBitList = bk;
- result = true;
- }
- return result;
+ bool result = false;
+ if(iBitList == ivBitKey)
+ {
+ BitKey bk(ivSingleBitPos);
+ iBitList = bk;
+ result = true;
+ }
+ return result;
}
bool FilterTranspose::Undo(BitKey & iBitList)
{
- bool result = false;
- BitKey testbl(ivSingleBitPos);
- if(iBitList.isSubset(testbl))
- {
- iBitList = ivBitKey;
- result = true;
- }
-
- return result;
+ bool result = false;
+ BitKey testbl(ivSingleBitPos);
+ if(iBitList.isSubset(testbl))
+ {
+ iBitList = ivBitKey;
+ result = true;
+ }
+
+ return result;
}
-//-------------------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
-bool FilterLink::Apply(BitKey & bit_list)
+bool FilterLink::Apply( BitKey & bit_list, STEP_CODE_DATA_STRUCT & io_sdc )
{
- bool rc = xFilter1.Apply(bit_list);
- rc = rc || xFilter2.Apply(bit_list);
- return rc;
+ bool rc = xFilter1.Apply( bit_list, io_sdc );
+ rc = rc || xFilter2.Apply( bit_list,io_sdc );
+ return rc;
}
-bool FilterLink::Undo(BitKey & bit_list)
+bool FilterLink::Undo( BitKey & bit_list )
{
- bool rc = xFilter1.Undo(bit_list);
- rc = rc || xFilter2.Undo(bit_list);
- return rc;
+ bool rc = xFilter1.Undo(bit_list);
+ rc = rc || xFilter2.Undo(bit_list);
+ return rc;
}
-//-------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
-bool ScanCommFilter::Apply(BitKey & bitList)
+bool SecondaryBitsFilter::Apply( BitKey & io_bitList,
+ STEP_CODE_DATA_STRUCT & io_sdc )
{
- // Read HW register
- scr.Read();
-
- // local copy of bit string from scan comm register
- BIT_STRING_BUFFER_CLASS bsb(*scr.GetBitString());
- BitKey bl;
- bool rc = false;
-
- // Invert if necessary
- if (xInvert)
- {
- bsb = ~bsb;
- }
-
- // Create bit list
- bl = bsb;
- uint32_t bsize = bitList.size();
- bitList.removeBits(bl);
- if(bsize != bitList.size())
- {
- rc = true;
- }
-
- return(rc);
+ bool l_modified = false;
+ do
+ {
+ // if it is not a primary pass then we need not apply this filter.
+ // so continuing with usual flow.
+ if( !( io_sdc.service_data )->isPrimaryPass( ) ) break;
+ //if there is no secondary bit position to flip or if no bit is set in
+ //bit key then let us skip this apply.
+ if( ( 0 == iv_secBitList.size() ) || ( 0 == io_bitList.size()) ) break;
+
+ BitKey l_key ( iv_secBitList );
+ io_bitList.removeBits( l_key );
+ l_modified = true;
+
+ }while(0);
+
+ return l_modified;
}
+
} //End namespace PRDF
-// Change Log *************************************************************************************
-//
-// Flag Reason Vers Date Coder Description
-// ---- -------- ------- -------- -------- ------------------------------
-// v4r1 09/05/96 DGILBERT Initial Creation
-// v4r3 01/27/98 SERAFIN Add PrioritySingleBitFilter
-// dg00 v4r5 06/30/99 DGILBERT fix PrioritySingleBitFilter
-// mk01 P4904712 v4r5 10/21/99 mkobler really fix PrioritySingleBitFilter
-// 490420.x v5r2 07/06/00 mkobler Add ScanCommFilter
-// 490420.x v5r2 07/06/00 dgilbert added FilterLink
-// fips 03/19/04 dgilbert rename to Filters.C;rewrote PrioritySingleBitFilter
-// changed to use BitKey
-// 558003 fips310 06/21/06 dgilbert Add Undo()
-// 582595 fips310 12/12/06 iawillia Update priority sb filter to maintain bit order.
-//
-// End Change Log *********************************************************************************
OpenPOWER on IntegriCloud