diff options
Diffstat (limited to 'src/usr/diag/prdf/common/util/prdfFilters.C')
-rwxr-xr-x | src/usr/diag/prdf/common/util/prdfFilters.C | 180 |
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 ********************************************************************************* |