/* pxTraceStreamLibP.h - private header for POSIX trace */
/* Copyright 2005-2007, 2010 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/*
modification history
--------------------
01d,29apr10,pad Moved extern C statement after include statements.
01c,27feb07,tcr Fix warnings under gcc
01b,21jul06,tcr remove pxTraceStreamCreate() prototype, fix format, fix stream
full handling in POSIX_TRACE_UNTIL_FULL mode
01a,04nov05,tcr created
*/
/*
DESCRIPTION
This header contains definitions of kernel structures and functions to support
the POSIX trace facility in RTPs.
*/
#ifndef __INCpxTraceStreamLibPh
#define __INCpxTraceStreamLibPh
#include
#include
#include
#include
#include
#include
#include
#include
#ifdef __cplusplus
extern "C" {
#endif
/* typedefs */
typedef enum /* trace type (active or pre-recorded) */
{
TRACE_TYPE_STREAM_WITHOUT_LOG = 1,
TRACE_TYPE_STREAM_WITH_LOG = 2,
TRACE_TYPE_PRE_RECORDED = 4
} TRACE_TYPE_ENUM;
typedef struct trace_stream
{
/* POSIX traces are Wind objects */
OBJ_CORE objCore;
/* an RTP has a list of attached traces. This is the node for that list */
DL_NODE rtpAttachedTraceNode;
/* indicate what operations are valid on this trace */
TRACE_TYPE_ENUM traceType;
trace_attr_t traceAttributes;
/* pointer to in-memory stream data */
TRACE_STREAM_BUFFER * pStreamBuffer;
/* policies and status indicators for stream (as POSIX) */
POSIX_TRACE_STATUS_INFO status;
int streamFullPolicy;
int logFullPolicy;
/*
* autoRestart indicates that logging for a stream was suspended
* automatically, and will restart when the stream becomes empty
*/
int autoRestart;
/* trace owner */
RTP_ID owningRtp;
/* traced RTP */
RTP_ID tracedRtp;
/* pointer to control structure for file-based log */
TRACE_STREAM_LOG * pStreamLog;
/* filter for stored events (set bits are filtered out) */
trace_event_set_t eventSet;
/* For pre-recorded logs there will be no RTP to attach hash tbl to */
TRACE_HASH_TBL * pHashTbl;
/* hash table iter key */
TRACE_HASH_ITER_KEY * pIterKey;
} TRACE_STREAM;
/*
* This structure is attached to the RTP being traced. It provides a place to
* put a list of traces for a given RTP, and the hashtable for the names
*/
typedef struct trace_data
{
DL_LIST traceList;
TRACE_HASH_TBL * pHashTbl;
} TRACE_RTP_DATA;
/* function declarations */
extern STATUS pxTraceStreamLibInit (void);
extern int pxTraceStreamTraceCreate (RTP_ID rtpId, RTP_ID pidToTrace,
trace_attr_t * pAttr,
TRACE_TYPE_ENUM traceType, int fd,
trace_id_t * trid);
extern STATUS pxTraceStreamDelete (TRACE_STREAM * pStream);
extern int pxTraceStreamLoggingStart (TRACE_STREAM * pStream,
pthread_t posix_thread_id, void * pc);
extern int pxTraceStreamLoggingStop (TRACE_STREAM * pStream,
pthread_t posix_thread_id, void * pc,
int automatic);
extern int pxTraceStreamTraceEvent (RTP_ID rtpId, trace_event_id_t eventId,
void * dataPtr, size_t dataLen,
pthread_t posix_thread_id, void * pc);
extern int pxTraceStreamEventIdOpen (RTP_ID rtpId, const char * event_name,
trace_event_id_t * event_id);
extern int pxTraceStreamTridEventIdOpen (RTP_ID rtpId, TRACE_STREAM * pStream,
const char * event_name,
trace_event_id_t * event_id);
extern int pxTraceStreamEventIdGetName (RTP_ID rtpId, TRACE_STREAM * pStream,
trace_event_id_t event_id,
char * event_name);
extern int pxTraceStreamEventIdEqual (RTP_ID rtpId, TRACE_STREAM * pStream,
trace_event_id_t id1,
trace_event_id_t id2);
extern int pxTraceStreamEventTypeListGetNextId (RTP_ID rtpId,
TRACE_STREAM * pStream,
trace_event_id_t * event,
int * unavailable);
extern int pxTraceStreamEventTypeListRewind (RTP_ID rtpId,
TRACE_STREAM * pStream);
extern int pxTraceStreamGetNextEvent (TRACE_STREAM * pStream,
struct posix_trace_event_info * event,
void * data, size_t num_bytes,
size_t * data_len,
int * unavailable);
extern int pxTraceStreamTimedGetNextEvent (TRACE_STREAM * pStream,
struct posix_trace_event_info * event,
void * data, size_t num_bytes,
size_t * data_len, int * unavailable,
const struct timespec * absTimeout);
extern int pxTraceStreamClear (TRACE_STREAM * pStream);
extern int pxTraceStreamOpen (RTP_ID rtpId, int fd,trace_id_t * trid);
extern int pxTraceStreamClose (RTP_ID rtpId, trace_id_t trid);
extern int pxTraceStreamRewind (RTP_ID rtpId, trace_id_t trid);
extern int pxTraceStreamEventFilterGet (TRACE_STREAM * pStream,
trace_event_set_t * pSet);
extern int pxTraceStreamStatusGet (TRACE_STREAM * pStream,
struct posix_trace_status_info * status_info);
extern int pxTraceStreamEventFilterSet (TRACE_STREAM * pStream,
const trace_event_set_t * set, int how,
pthread_t posix_thread_id, void * pc);
extern int pxTraceStreamAttrGet (TRACE_STREAM * pStream, trace_attr_t * pAttr);
extern int pxTraceStreamFlush (TRACE_STREAM * pStream,
pthread_t posix_thread_id,
void * pc);
extern int pxTraceStreamShutdown (TRACE_STREAM * pStream,
pthread_t posix_thread_id, void * pc);
#ifdef __cplusplus
}
#endif
#endif /* __INCpxTraceStreamLibPh */