/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* $Source: src/usr/diag/prdf/common/plat/prdfLineDelete.H $ */ /* */ /* IBM CONFIDENTIAL */ /* */ /* COPYRIGHT International Business Machines Corp. 2005,2013 */ /* */ /* 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 prdfLineDelete.H * Contains the definitions needed for the line delete algorithms and the CE * table. */ #ifndef __PRDFLINEDELETE_H #define __PRDFLINEDELETE_H #include #include #include #include namespace PRDF { /** @namespace LineDelete * Namespace to encapsulate all of the LineDelete specific classes and enums. */ namespace LineDelete { /** @enum CacheType * Used to express where a cache error occured. */ enum CacheType { L3 = 0, L3_DIR = 1, L2 = 2, L2_DIR = 4, CACHE_MASK = L3 | L3_DIR | L2 | L2_DIR, SLICE_A = 8, SLICE_B = 16, SLICE_MASK = SLICE_A | SLICE_B }; /** @enum CacheErrorType * Used to express the types of cache errors that can occur. */ enum CacheErrorType { UE, CE }; /** @typedef PrdfCacheAddress * Used to index cache error hits in the CE table. */ typedef uint32_t PrdfCacheAddress; /** @typedef PrdfCacheAddressTable * Maps Cache Addresses to hit counts. */ typedef UtilSMap PrdfCacheAddressTable; /** @class PrdfCacheCETable * Used to store and threshold cache CE errors. * * Takes a threshold policy (such as "2 per day") and allows that many hits * per address before signalling "at threshold". (the 2nd occurance would * be the at threshold). * * @note This is now being used for eRepair as well as cache CEs. */ class PrdfCacheCETable { public: /** * @brief Constructor from ThresholdPolicy struct. * @param i_thPolicy A pointer to a ThresholdPolicy struct. */ explicit PrdfCacheCETable( const ThresholdResolution::ThresholdPolicy & i_thPolicy ) : iv_thPolicy(i_thPolicy), cv_flushTimerInited(false), cv_total(0) {} // NOTE: iv_thPolicy should never be deleted in this class so the // default destructor will be sufficient. /** @fn addAddress * Insert an address into the CE table. * * @param The CE address. * @param The Service Data Collector to get the current time. * * @return true - if the threshold policy has been reached. * @return false - if the threshold policy has not been reached. */ bool addAddress(PrdfCacheAddress, STEP_CODE_DATA_STRUCT &); /** @fn PrdfCacheCETable::isIntervalElapsed() * @param STEP_CODE_DATA_STRUCT & i_sdc * @return TRUE if the interval time has elapsed. */ bool isIntervalElapsed( STEP_CODE_DATA_STRUCT & i_sdc ); /** @fn flushTable * Clear all CE hits from the table and reset timer to 0. */ void flushTable(); /** @fn getTotalCount * Returns the total amount of CE hits in a table * * @return uint32_t - the total CE hits in a table */ uint32_t getTotalCount(); //zs01 /** @fn addToCaptureData * Adds CE table to the capture data. * * @param The chip Handle. * @param The scom id. * @param The Service Data Collector. */ void addToCaptureData(TARGETING::TargetHandle_t i_pchipHandle, int32_t, CaptureData &); // zs02 /** @fn getLargestEntry * @brief Will search the PrdfCacheCETable for the address with the * largest count. * @param The count of the highest entry (default = NULL). * @return Address with the largest count. */ PrdfCacheAddress getLargestEntry( uint32_t * o_count = NULL ); /** @fn PrdfCacheCETable::getTableSize * @return uint32_t - The total number of entries in the table */ uint32_t getTableSize(); //zs04 //mp26 a /** @fn getCRCAnalysisEntries * @brief Will search the PrdfCacheCETable for the different count * values.. * @param Output the highest count.. * @param Output the second highest count.. * @param Output the lowest count.. * @return Address with the largest count. */ PrdfCacheAddress getCRCAnalysisEntries( uint32_t & o_countHigh, uint32_t & o_count2ndHigh, uint32_t & o_countLow); private: const ThresholdResolution::ThresholdPolicy iv_thPolicy; PrdfCacheAddressTable cv_ceTable; Timer cv_flushTimer; bool cv_flushTimerInited; uint32_t cv_total; //zs01 }; }; } // end namespace PRDF #endif