1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details.
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_C__
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "perf_config.h"
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "perf.h"
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* used internal function declarations */
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_LOG_Private *
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__PERF_LOG_create(PERF_Private *perf, PERF_Config *config,
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_MODULETYPE eModule);
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__PERF_LOG_done(PERF_Private *perf);
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* get custom implementation */
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_CUSTOMIZABLE__
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include "perf_custom.c"
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=============================================================================
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    INSTRUMENTATION INTERFACE
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin=============================================================================*/
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__common_Done(PERF_OBJHANDLE *phObject)
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE hObject = *phObject;
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Private *me  = get_Private(hObject);
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* we may not have allocated the private structure */
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (me)
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_CUSTOMIZABLE__
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        __PERF_CUSTOM_done(me);
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (me->uMode & PERF_Mode_Log)
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {   /* close log */
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            __PERF_LOG_done(me);
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* delete private structure */
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        free (me);
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (*phObject)->pComponentPrivate = NULL;
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* delete PERF opject */
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    free (*phObject);
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* invalidate handle */
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *phObject = NULL;
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_OBJHANDLE
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__PERF_common_Create(PERF_Config *config,
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     unsigned long ulID,
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     PERF_MODULETYPE eModule)
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE hPERF = NULL;
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Private *me = NULL;
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((config->mask & eModule & ~PERF_ModuleMask) &&
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (config->mask & (1 << (eModule & PERF_ModuleMask))))
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* allocate object */
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hPERF = (PERF_OBJHANDLE) malloc(sizeof(PERF_OBJTYPE));
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* set up methods */
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (hPERF != NULL)
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            hPERF->pApplicationPrivate = NULL;
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            hPERF->Done = __common_Done;
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            hPERF->pComponentPrivate =
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                me = (PERF_Private *) malloc(sizeof(PERF_Private));
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (me)
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* no flags are selected, and capture creation time */
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                me->uMode = PERF_Mode_None;
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                me->ulID  = ulID;
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                me->pLog  = NULL;
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PID_GET(me->ulPID);
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* save original time stamp */
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                TIME_GET(me->time);
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                TIME_COPY(me->tempTime, me->time);
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* create LOG private structures a log file is specified */
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (config->trace_file)
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_LOG_create(me, config, eModule);
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_CUSTOMIZABLE__
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                __PERF_CUSTOM_create(hPERF, config, eModule);
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* if we could not create any logging object (no flag is enabled) */
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (!me || me->uMode == PERF_Mode_None)
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {   /* free up object */
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                __common_Done(&hPERF);
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return(hPERF);
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_OBJHANDLE
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_Create(unsigned long ulID, PERF_MODULETYPE eModule)
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJTYPE *hPERF = NULL;  /* PERF object */
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char tag[5] = { PERF_FOUR_CHARS(ulID), 0 };
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* replace spaces in ID with _ */
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i<4; i++) if (tag[i] == ' ') tag[i] = '_';
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ulID = PERF_FOURS(tag);
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* read config file */
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config config;
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Init(&config);
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Read(&config, tag);
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* remove replay file if any */
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (config.replay_file)
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        free(config.replay_file);
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        config.replay_file = NULL;
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* create for capturing */
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    hPERF = __PERF_common_Create(&config, ulID, eModule);
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Release(&config);
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return(hPERF);
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
160