diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/usr/diag/prdf/common/framework/register/iipCaptureData.h | 14 | ||||
| -rwxr-xr-x | src/usr/diag/prdf/common/framework/register/prdfCaptureData.C | 158 | 
2 files changed, 64 insertions, 108 deletions
diff --git a/src/usr/diag/prdf/common/framework/register/iipCaptureData.h b/src/usr/diag/prdf/common/framework/register/iipCaptureData.h index 4395ce38b..b8aeac652 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 @@  /*                                                                        */  /* OpenPOWER HostBoot Project                                             */  /*                                                                        */ -/* Contributors Listed Below - COPYRIGHT 2012,2015                        */ +/* Contributors Listed Below - COPYRIGHT 2012,2017                        */  /* [+] International Business Machines Corp.                              */  /*                                                                        */  /*                                                                        */ @@ -230,7 +230,7 @@ public:     </ul><br>     */    void Add( TARGETING::TargetHandle_t i_pchipHandle, int scomId, -            BIT_STRING_CLASS & bs, Place place = BACK); +            const BIT_STRING_CLASS & bs, Place place = BACK);    // dg02 end @@ -338,11 +338,11 @@ private:    DataContainerType             data; -  /** -   Private function to facilitate the adding of caputre data to the internal vector -   */ -  void AddDataElement(Data &dataElement, SCAN_COMM_REGISTER_CLASS & scr, Place place, RegType type); -  //$TEMP @jl04 Changed AddDataElement to include a Register type. +    /** Private function to facilitate the adding of caputre data to the +     *  internal vector */ +    void AddDataElement( TARGETING::TargetHandle_t i_trgt, int i_scomId, +                         const BIT_STRING_CLASS * i_bs, Place i_place, +                         RegType i_type = PRIMARY );    // Predicate for deciding to delete an element of data from a Capture Data list.    class prdfCompareCaptureDataType : public std::unary_function<Data &, bool> diff --git a/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C b/src/usr/diag/prdf/common/framework/register/prdfCaptureData.C index cf5442f7c..803e9e622 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 @@  /*                                                                        */  /* OpenPOWER HostBoot Project                                             */  /*                                                                        */ -/* Contributors Listed Below - COPYRIGHT 2012,2014                        */ +/* Contributors Listed Below - COPYRIGHT 2012,2017                        */  /* [+] International Business Machines Corp.                              */  /*                                                                        */  /*                                                                        */ @@ -39,6 +39,8 @@  #include <string.h>  #include <algorithm>    // @jl04 a Add this for the Drop function. +using namespace TARGETING; +  namespace PRDF  { @@ -74,63 +76,69 @@ void CaptureData::Clear(void)    }                             /* if not empty */  } +//------------------------------------------------------------------------------ -// @jl04 c Changed this to add the type parm. -void CaptureData::Add(  TARGETING::TargetHandle_t i_pchipHandle, int scomId, -                        SCAN_COMM_REGISTER_CLASS & scr, Place place, RegType type) +void CaptureData::AddDataElement( TargetHandle_t i_trgt, int i_scomId, +                                  const BIT_STRING_CLASS * i_bs, +                                  Place i_place, RegType i_type )  { -  uint16_t bufferLength = scr.GetBitLength() / 8; - -  if((scr.GetBitLength() % 8) != 0) -    bufferLength += 1; - -  Data dataElement(i_pchipHandle, scomId, bufferLength, NULL); +    // Initial values of the bit string buffer if i_bs has a zero value. +    uint8_t * buf = nullptr; +    size_t sz_buf = 0; -  AddDataElement(dataElement, scr, place, type); +    // Add buffer only if the value is non-zero. +    if ( !i_bs->IsZero() ) +    { +        // Get the size of i_bs and ensure byte alignment. +        sz_buf = (i_bs->GetLength() + 8-1) / 8; + +        // Since we are using a BitString below, which does everything on a +        // CPU_WORD boundary, we must make sure the buffer is CPU_WORD aligned. +        const size_t sz_word = sizeof(CPU_WORD); +        sz_buf = ((sz_buf + sz_word-1) / sz_word) * sz_word; + +        // Allocate memory for the buffer. +        buf = new uint8_t[sz_buf]; +        memset( buf, 0x00, sz_buf ); + +        // Use a BitString to copy i_bs to the buffer. +        BIT_STRING_ADDRESS_CLASS bs ( 0, i_bs->GetLength(), (CPU_WORD *)buf ); +        bs.SetBits( *i_bs ); + +        // Create the new data element. +        Data element( i_trgt, i_scomId, sz_buf, buf ); +        element.registerType = i_type; + +        // Add the new element to the data. +        if ( FRONT == i_place ) +            data.insert( data.begin(), element ); +        else +            data.push_back( element ); +    }  } -// start dg02 -void CaptureData::Add( TARGETING::TargetHandle_t i_pchipHandle, int scomId, -                       BIT_STRING_CLASS & bs, Place place) -{ -  uint16_t bufferLength = bs.GetLength() / 8; - -  if((bs.GetLength() % 8) != 0) -    bufferLength += 1; - -  Data dataElement(i_pchipHandle, scomId, bufferLength, NULL); +//------------------------------------------------------------------------------ -  DataIterator dataIterator; - -  if(place == FRONT) -  { -    data.insert(data.begin(), dataElement); -    dataIterator = data.begin(); -  } -  else -  { -    data.push_back(dataElement); -    dataIterator = data.end(); -    dataIterator--; -  } -  if(!bs.IsZero()) -  { -    uint8_t *bufferPtr = new uint8_t[(*dataIterator).dataByteLength]; -    BIT_STRING_ADDRESS_CLASS bitString(0, bs.GetLength(), (CPU_WORD *) bufferPtr); - -    bitString.SetBits(bs); -    (*dataIterator).dataPtr = bufferPtr; -  } -  else -  { -    (*dataIterator).dataByteLength = 0; -  } +void CaptureData::Add( TargetHandle_t i_trgt, int32_t i_scomId, +                       SCAN_COMM_REGISTER_CLASS & io_scr, +                       Place i_place, RegType i_type ) +{ +    if ( SUCCESS == io_scr.Read() ) +    { +        AddDataElement( i_trgt, i_scomId, io_scr.GetBitString(), +                        i_place, i_type ); +    } +} +//------------------------------------------------------------------------------ +void CaptureData::Add( TargetHandle_t i_trgt, int i_scomId, +                       const BIT_STRING_CLASS & i_bs, Place i_place ) +{ +    AddDataElement( i_trgt, i_scomId, &i_bs, i_place );  } -// end dg02 - +//------------------------------------------------------------------------------  // start jl04a  void CaptureData::Drop(RegType i_type) @@ -145,55 +153,7 @@ void CaptureData::Drop(RegType i_type)  }  // end jl04a -// @jl04 c Changed the AddDataElement to include a type. -void CaptureData::AddDataElement( Data & dataElement, -                                  SCAN_COMM_REGISTER_CLASS & scr, -                                  Place place, RegType type ) -{ -  DataIterator dataIterator; - -  if(place == FRONT) -  { -    data.insert(data.begin(), dataElement); -    dataIterator = data.begin(); -  } -  else -  { -    data.push_back(dataElement); -    dataIterator = data.end(); -    dataIterator--; -  } - -//$TEMP @jl04 or @jl05. -      (*dataIterator).registerType = type; -//$TEMP @jl04 or @jl05. - -  if(scr.Read() == SUCCESS) -  { -    const BIT_STRING_CLASS *bitStringPtr = scr.GetBitString(); - -    if(!bitStringPtr->IsZero()) -    { -      uint8_t *bufferPtr = new uint8_t[(*dataIterator).dataByteLength]; -      BIT_STRING_ADDRESS_CLASS bitString(0, bitStringPtr->GetLength(), -                                         (CPU_WORD *) bufferPtr); - -      bitString.SetBits(*bitStringPtr); -      (*dataIterator).dataPtr = bufferPtr; -    } -    else -    { -      (*dataIterator).dataByteLength = 0; -    } -  } -  else -  { -    // Zero out data length if SCRs failed -    (*dataIterator).dataByteLength = 0; -  } - -} -// ------------------------------------------------------------------------------------------------ +//------------------------------------------------------------------------------  /* CaptureData Format:   *        capture data -> ( <chip header> <registers> )* @@ -202,8 +162,6 @@ void CaptureData::AddDataElement( Data & dataElement,   */  unsigned int CaptureData::Copy(uint8_t *i_buffer, unsigned int i_bufferSize) const  { -    using namespace TARGETING; -      TargetHandle_t  l_pcurrentChipHandle =NULL ;      uint8_t * l_entryCountPos = NULL;      uint32_t l_regEntries = 0; @@ -300,8 +258,6 @@ unsigned int CaptureData::Copy(uint8_t *i_buffer, unsigned int i_bufferSize) con  // dg08a -->  CaptureData & CaptureData::operator=(const uint8_t *i_flatdata)  { -    using namespace TARGETING; -      uint32_t l_tmp32 = 0;      uint16_t l_tmp16 = 0;  | 

