bool parseL2LdCrFfdc( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool o_rc = true; const char * lines = "---------------------------------------------"; i_parser.PrintString( LD_CR_FFDC::L2TITLE, lines ); do { if ( NULL == i_buffer ) { o_rc = false; break; } if ( i_buflen < sizeof(LD_CR_FFDC::L2LdCrFfdc) ) { o_rc = false; break; } LD_CR_FFDC::L2LdCrFfdc ldcrffdc; memcpy( &ldcrffdc, i_buffer, sizeof(LD_CR_FFDC::L2LdCrFfdc)); i_parser.PrintNumber( " L2 LD Counts", "%d", ldcrffdc.L2LDcnt ); i_parser.PrintBool( " L2 LD Allowed", 0 != ldcrffdc.L2LDallowed ); i_parser.PrintNumber( " L2 LD Max Allowed", "%d", ldcrffdc.L2LDMaxAllowed ); i_parser.PrintNumber( " L2 CR Max Allowed", "%d", ldcrffdc.L2CRMaxAllowed ); i_parser.PrintNumber( " L2 CR Present", "%d", ldcrffdc.L2CRPresent ); i_parser.PrintNumber( " L2 Error Member", "%d", ldcrffdc.L2errMember ); i_parser.PrintNumber( " L2 Error DW", "%d", ldcrffdc.L2errDW ); i_parser.PrintNumber( " L2 Error Macro", "%d", ldcrffdc.L2errMacro ); i_parser.PrintNumber( " L2 Error Bank", "%d", ldcrffdc.L2errBank ); i_parser.PrintNumber( " L2 Error OW Select", "%d", ldcrffdc.L2errOWSelect ); i_parser.PrintNumber( " L2 Error Bit Line", "%d", ldcrffdc.L2errBitLine ); i_parser.PrintBool( " L2 Error Is Top SA", 0 != ldcrffdc.L2errIsTopSA ); i_parser.PrintNumber( " L2 Error Address", "%d", ldcrffdc.L2errAddress ); } while (0); if ( !o_rc && i_buffer ) { i_parser.PrintHexDump(i_buffer, i_buflen); } return o_rc; }
bool parseL3LdCrFfdc( uint8_t * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool o_rc = true; const char * lines = "---------------------------------------------"; i_parser.PrintString( LD_CR_FFDC::L3TITLE, lines ); do { if ( NULL == i_buffer ) { o_rc = false; break; } if ( i_buflen < sizeof(LD_CR_FFDC::L3LdCrFfdc) ) { o_rc = false; break; } LD_CR_FFDC::L3LdCrFfdc ldcrffdc; memcpy( &ldcrffdc, i_buffer, sizeof(LD_CR_FFDC::L3LdCrFfdc)); i_parser.PrintNumber( " L3 LD Counts", "%d", ldcrffdc.L3LDcnt ); i_parser.PrintBool( " L3 LD Allowed", 0 != ldcrffdc.L3LDallowed ); i_parser.PrintNumber( " L3 LD Max Allowed", "%d", ldcrffdc.L3LDMaxAllowed ); i_parser.PrintNumber( " L3 CR Max Allowed", "%d", ldcrffdc.L3CRMaxAllowed ); i_parser.PrintNumber( " L3 CR Present", "%d", ldcrffdc.L3CRPresent ); i_parser.PrintNumber( " L3 Error Member", "%d", ldcrffdc.L3errMember ); i_parser.PrintNumber( " L3 Error DW", "%d", ldcrffdc.L3errDW ); i_parser.PrintNumber( " L3 Error Bank", "%d", ldcrffdc.L3errBank ); i_parser.PrintNumber( " L3 Error Data Out", "%d", ldcrffdc.L3errDataOut ); i_parser.PrintNumber( " L3 Error Address", "%d", ldcrffdc.L3errAddress ); i_parser.PrintNumber( " L3 Error IO", "%d", ldcrffdc.L3errIO ); i_parser.PrintNumber( " L3 Error Row", "%d", ldcrffdc.L3errRow ); } while (0); if ( !o_rc && i_buffer ) { i_parser.PrintHexDump(i_buffer, i_buflen); } return o_rc; }
bool parsePfaData( void * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool rc = true; i_parser.PrintBlank(); if ( NULL != i_buffer ) { // Get the PFA data struct. PfaData pfa; UtilMem l_membuf( i_buffer, i_buflen ); l_membuf >> pfa; char tmp[50]; const char * tmpStr = ""; i_parser.PrintNumber("Service Action Counter", "0x%02X", pfa.serviceActionCounter); // PRD Service Data Collector Flags i_parser.PrintString( "SDC Flags", "" ); i_parser.PrintBool(" DUMP", pfa.DUMP ); i_parser.PrintBool(" UERE", pfa.UERE ); i_parser.PrintBool(" SUE", pfa.SUE ); i_parser.PrintBool(" AT_THRESHOLD", pfa.AT_THRESHOLD ); i_parser.PrintBool(" DEGRADED", pfa.DEGRADED ); i_parser.PrintBool(" SERVICE_CALL", pfa.SERVICE_CALL ); i_parser.PrintBool(" TRACKIT", pfa.TRACKIT ); i_parser.PrintBool(" TERMINATE", pfa.TERMINATE ); i_parser.PrintBool(" LOGIT", pfa.LOGIT ); i_parser.PrintBool(" FLOODING", pfa.FLOODING ); i_parser.PrintBool(" Unit CS", pfa.UNIT_CHECKSTOP ); i_parser.PrintBool(" Using Sync'd Saved Sdc", pfa.USING_SAVED_SDC ); i_parser.PrintBool(" Last Core Termination", pfa.LAST_CORE_TERMINATE); i_parser.PrintBool(" Deferred Deconfig", pfa.DEFER_DECONFIG ); // Attention types i_parser.PrintNumber("Primary ATTN type", "0x%02X", pfa.priAttnType); i_parser.PrintNumber("Secondary ATTN type", "0x%02X", pfa.secAttnType); // Thresholding snprintf( tmp, 50, "%d of %d", pfa.errorCount, pfa.threshold ); i_parser.PrintString( "Error Count", tmp ); // Dump info i_parser.PrintNumber("DUMP Content", "0x%08x", pfa.msDumpInfo.content); i_parser.PrintNumber("DUMP HUID", "0x%08x", pfa.msDumpInfo.id); // Error log actions and severity i_parser.PrintNumber( "ERRL Actions", "0x%04x", pfa.errlActions ); tmpStr = "Undefined"; switch ( pfa.errlSeverity ) { case ERRL_SEV_INFORMATIONAL: tmpStr = "INFORMATIONAL"; break; case ERRL_SEV_RECOVERED: tmpStr = "RECOVERED"; break; case ERRL_SEV_PREDICTIVE: tmpStr = "PREDICTIVE"; break; case ERRL_SEV_UNRECOVERABLE: tmpStr = "UNRECOVERABLE"; break; } snprintf( tmp, 50, "ERRL_SEV_%s (0x%x) ", tmpStr, pfa.errlSeverity ); i_parser.PrintString( "ERRL Severity", tmp ); // GARD info tmpStr = GardAction::ToString( pfa.prdGardErrType ); snprintf( tmp, 50, "%s (0x%X) ", tmpStr, pfa.prdGardErrType ); i_parser.PrintString( "PRD GARD Error Type", tmp ); // MRU callouts if ( 0 < pfa.mruListCount ) { i_parser.PrintNumber("PRD MRU List", "%d", pfa.mruListCount); for ( uint32_t i = 0; i < pfa.mruListCount; ++i ) { char header[25]; char data[50]; tmpStr = "Unknown Priority"; switch ( pfa.mruList[i].priority ) { case SRCI_PRIORITY_LOW: tmpStr = "LOW"; break; case SRCI_PRIORITY_MEDC: tmpStr = "MED_C"; break; case SRCI_PRIORITY_MEDB: tmpStr = "MED_B"; break; case SRCI_PRIORITY_MEDA: tmpStr = "MED_A"; break; case SRCI_PRIORITY_MED: tmpStr = "MED"; break; case SRCI_PRIORITY_HIGH: tmpStr = "HIGH"; break; } snprintf( header, 25, " #%d %s", i+1, tmpStr ); snprintf( data, 50, "0x%08x ", pfa.mruList[i].callout ); switch ( pfa.mruList[i].type ) { case PRDcalloutData::TYPE_MEMMRU: strcat( data, "(MemoryMru)" ); i_parser.PrintString( header, data ); parseMemMruData( i_parser, pfa.mruList[i].callout ); break; case PRDcalloutData::TYPE_SYMFRU: strcat( data, "(SymbolicFru)" ); i_parser.PrintString( header, data ); break; case PRDcalloutData::TYPE_TARGET: case PRDcalloutData::TYPE_PROCCLK: case PRDcalloutData::TYPE_PCICLK: strcat( data, "(HUID)" ); i_parser.PrintString( header, data ); break; default: i_parser.PrintString( header, "(Unknown/Invalid)" ); } } } // Multi-signatures if ( 0 < pfa.sigListCount ) { i_parser.PrintNumber( "Multi-Signature List", "%d", pfa.sigListCount ); for ( uint32_t i = 0; i < pfa.sigListCount; ++i ) { char sigDesc[256]; getSigDesc( pfa.sigList[i].chipId, pfa.sigList[i].signature, 256, sigDesc ); i_parser.PrintString( "", sigDesc ); } } }