IOFireWireIPDiagnostics.cpp [plain text]
#include "IOFireWireIP.h"
#include "IOFireWireIPDiagnostics.h"
OSDefineMetaClassAndStructors(IOFireWireIPDiagnostics, OSObject)
OSObject * IOFireWireIPDiagnostics::createDiagnostics( IOFireWireIP* obj )
{
IOFireWireIPDiagnostics * diagnostics;
diagnostics = new IOFireWireIPDiagnostics;
if( diagnostics && !diagnostics->init() )
{
diagnostics->release();
diagnostics = NULL;
}
diagnostics->fIPObj = obj;
return diagnostics;
}
bool IOFireWireIPDiagnostics::serialize( OSSerialize * s ) const
{
OSDictionary * dictionary;
bool ok;
dictionary = OSDictionary::withCapacity( 4 );
if( !dictionary )
return false;
fIPObj->updateStatistics();
updateNumberEntry( dictionary, fIPObj->fTxBcast, "TxBCAST");
updateNumberEntry( dictionary, fIPObj->fRxBcast, "RxBCAST");
updateNumberEntry( dictionary, fIPObj->fTxUni, "TxUNI");
updateNumberEntry( dictionary, fIPObj->fRxUni, "RxUNI");
updateNumberEntry( dictionary, fIPObj->fMaxPktSize, "MaxPktSize");
updateNumberEntry( dictionary, fIPObj->fMaxInputCount, "MaxInputCount");
updateNumberEntry( dictionary, fIPObj->fIsoRxOverrun, "IsoRxOverrun");
updateNumberEntry( dictionary, fIPObj->fUsedCmds, "UsedCmds" );
updateNumberEntry( dictionary, fIPObj->fSubmitErrs, "SubmitErrs" );
updateNumberEntry( dictionary, fIPObj->fCallErrs, "CompletionErrs" );
updateNumberEntry( dictionary, fIPObj->fStalls, "Stalls");
updateNumberEntry( dictionary, fIPObj->fRxFragmentPkts, "RxFragmentPkts");
updateNumberEntry( dictionary, fIPObj->fTxFragmentPkts, "TxFragmentPkts");
#ifdef IPFIREWIRE_DIAGNOSTICS
fIPObj->fDumpLog = true;
updateNumberEntry( dictionary, fIPObj->fLcb->maxBroadcastPayload, "maxBroadcastPayload");
updateNumberEntry( dictionary, fIPObj->fLcb->maxBroadcastSpeed, "currBroadcastSpeed");
updateNumberEntry( dictionary, fIPObj->fPrevBroadcastSpeed, "prevBroadcastSpeed");
#endif
ok = dictionary->serialize(s);
dictionary->release();
return ok;
}
void IOFireWireIPDiagnostics::updateNumberEntry( OSDictionary * dictionary, UInt32 value, const char * name )
{
OSNumber * number;
number = OSNumber::withNumber( value, 32 );
if( !number )
return;
dictionary->setObject( name, number );
number->release();
}
void IOFireWireIPDiagnostics::incrementExecutedORBCount( void )
{
fExecutedORBCount++;
}