Beispiel #1
0
bool findTarget( TARGETING::TargetHandle_t i_chipTgt,
                 AttnList::iterator & it )
{
    bool matchFound = false;
    it = std::lower_bound(  g_AttnDataList.begin(), g_AttnDataList.end(),
                            i_chipTgt );

    if( it != g_AttnDataList.end() && i_chipTgt == (*it).targetHndl )
    {
        matchFound = true;
    }

    return matchFound;
}
Beispiel #2
0
void SYSTEM_DEBUG_CLASS::addChipToAttnList(
                            TARGETING::TargetHandle_t i_chipTgt,
                            ATTENTION_VALUE_TYPE i_attnType )
{
    AttnData l_attnData( i_chipTgt, i_attnType );
    g_AttnDataList.insert( std::lower_bound( g_AttnDataList.begin(),
                           g_AttnDataList.end(), l_attnData ), l_attnData );
}
Beispiel #3
0
void SYSTEM_DEBUG_CLASS::initAttnPendingtatus( )
{
    for( AttnList::iterator i = g_AttnDataList.begin();
         i != g_AttnDataList.end(); ++i )
    {
        (*i).isAnalysisNotDone  = true;
    }
}
Beispiel #4
0
bool findAttention( TARGETING::TargetHandle_t i_chipTgt,
                    ATTENTION_VALUE_TYPE i_eAttnType,
                    AttnList::iterator & it )
{
    bool matchFound = false;

    AttnData l_attnData( i_chipTgt, i_eAttnType );
    it = std::lower_bound( g_AttnDataList.begin(),
                           g_AttnDataList.end(),
                           l_attnData );

    if( it != g_AttnDataList.end() && *it == l_attnData )
    {
        matchFound = true;
    }

    return matchFound;
}
Beispiel #5
0
bool SYSTEM_DEBUG_CLASS::IsAttentionActive( TARGETING::TargetHandle_t i_pChipHandle ) const
{
    bool rc = false;

    for(AttnList::const_iterator i = g_AttnDataList.begin(); i != g_AttnDataList.end(); ++i)
    {
        if((*i).targetHndl == i_pChipHandle)
        {
            rc = true;
            break;
        }
    }
    return rc;
}
Beispiel #6
0
void SYSTEM_DEBUG_CLASS::SetAttentionType(TARGETING::TargetHandle_t i_pTargetHandle,
                                          ATTENTION_VALUE_TYPE i_eAttnType)
{
    if(i_eAttnType  > INVALID_ATTENTION_TYPE)
    {
        if( !isActiveAttentionPending( i_pTargetHandle, i_eAttnType ) )
        {
            AttnData attnData( i_pTargetHandle, i_eAttnType );
            g_AttnDataList.insert( std::lower_bound( g_AttnDataList.begin(),
                                                     g_AttnDataList.end(),
                                                     attnData ), attnData );
        }
    }
}
Beispiel #7
0
uint8_t SYSTEM_DEBUG_CLASS::GetAttentionType(TARGETING::TargetHandle_t i_pChipHandle) const
{
    uint8_t type = INVALID_ATTENTION_TYPE;

    for(AttnList::const_iterator i = g_AttnDataList.begin(); i != g_AttnDataList.end(); ++i)
    {
        if((*i).targetHndl == i_pChipHandle)
        {
            type = (uint8_t) (*i).attnType;
            break;
        }
    }

    return (uint8_t) type;
}
Beispiel #8
0
TargetHandle_t SYSTEM_DEBUG_CLASS::getTargetWithAttn
                        ( TYPE i_tgtType, ATTENTION_VALUE_TYPE i_attnType) const
{
    TargetHandle_t o_tgt = NULL;

    for(AttnList::const_iterator i = g_AttnDataList.begin();
                                  i != g_AttnDataList.end(); ++i)
    {
        if(( getTargetType( (*i).targetHndl ) == i_tgtType)
            && ( (*i).attnType == i_attnType ) )
        {
            o_tgt = (*i).targetHndl;
            break;
        }
    }
    return o_tgt;
}
Beispiel #9
0
void SYSTEM_DEBUG_CLASS::CalloutThoseAtAttention(STEP_CODE_DATA_STRUCT & serviceData) const
{
    ServiceDataCollector * sdc = serviceData.service_data;

    CaptureData & capture = sdc->GetCaptureData();

    for(AttnList::const_iterator i = g_AttnDataList.begin(); i != g_AttnDataList.end(); ++i)
    {
        sdc->SetCallout((*i).targetHndl);
        AttnData ad(*i);
        BitString cbs(sizeof(AttnData)*8,(CPU_WORD *)&ad);

        capture.Add(PlatServices::getSystemTarget(),0,cbs);
    }

    sdc->SetCallout(NextLevelSupport_ENUM);

}
Beispiel #10
0
errlHndl_t MemInjectSink::putAttentions(
        const AttnList & i_list)
{
    errlHndl_t err = 0;

    AttnList::const_iterator it = i_list.begin();

    while(it != i_list.end())
    {
        err = putAttention(*it);

        if(err)
        {
            break;
        }

        ++it;
    }

    return err;
}
Beispiel #11
0
uint32_t SYSTEM_DEBUG_CLASS::Reinitialize(const AttnList & i_attnList)
{
    using PluginDef::bindParm;
    uint32_t l_rc = 0;

    do
    {
        if ( i_attnList.empty() )
        {
            PRDF_ERR( "SYSTEM_DEBUG_CLASS::Reinitialize() input AttnList is "
                      "empty" );
            /*@
             * @errortype
             * @subsys     EPUB_FIRMWARE_SP
             * @reasoncode PRDF_CODE_FAIL
             * @moduleid   PRDF_SDBUG_INIT
             * @userdata1  0
             * @userdata2  0
             * @userdata3  0
             * @userdata4  0
             * @devdesc    input AttnList is empty.
             * @custDesc   Chip diagnosis did not find any chip with an
             *             attention.
             * @procedure  EPUB_PRC_SP_CODE
             */
            PRDF_CREATE_ERRL( g_prd_errlHndl,
                              ERRL_SEV_UNRECOVERABLE, // error on diagnostic
                              ERRL_ETYPE_NOT_APPLICABLE,
                              SRCI_MACH_CHECK,
                              SRCI_NO_ATTR,
                              PRDF_SDBUG_INIT,                 // module id
                              FSP_DEFAULT_REFCODE,
                              PRDF_CODE_FAIL,             // Reason code
                              0,                          // user data word 1
                              0,                          // user data word 2
                              0,                          // user data word 3
                              0 );                        // user data word 4

            PRDF_ADD_PROCEDURE_CALLOUT( g_prd_errlHndl, SRCI_PRIORITY_MED,
                                        EPUB_PRC_SP_CODE );
            l_rc = PRD_ATTN_DATA_ACCESS_FAILED;

            break;
        }

        Clear();
        for( AttnList::const_iterator i = i_attnList.begin();
             i != i_attnList.end(); ++i )
        {
            addChipToAttnList( (*i).targetHndl,(*i).attnType );

            // There can be a case where chip has both recoverable and Check
            // Stop. In that case chip shall report only Check Stop. In such a
            // case, we analyse the recoverable first and see if we can blame
            // check stop on recoverable. To ease its handling, let us add a
            // chip reporting recoverable attention to attention list.

            if( ((*i).attnType == CHECK_STOP ) || ((*i).attnType == UNIT_CS ) )
            {
                bool l_recovFound = false;
                ExtensibleChip * l_chip =
                    ( ExtensibleChip *) systemPtr->GetChip( (*i).targetHndl );
                ExtensibleChipFunction * ef
                           = l_chip->getExtensibleFunction("CheckForRecovered");

                (*ef)( l_chip, bindParm<bool &>( l_recovFound ) );

                if ( l_recovFound )
                {
                    addChipToAttnList( (*i).targetHndl,RECOVERABLE );
                }
            }
        }

        g_init_done = true;

    } while(0);

    return l_rc;
}