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