1 2 /* 3 * Copyright (C) Texas Instruments - http://www.ti.com/ 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 /* NOTE: This header should be only included from perf.h */ 22 23 /* This header defined the macros that translate the external interface 24 into the implementation calls */ 25 26 #ifndef __PERF_OBJ_H 27 #define __PERF_OBJ_H 28 29 #include "perf_common.h" 30 #include "perf.h" 31 32 #ifdef __PERF_CUSTOMIZABLE__ 33 /* define any customizable interface */ 34 /* this header includes any customized implementation headers */ 35 #include "perf_custom.h" 36 #endif 37 38 /****************************************************************************** 39 PRIVATE (INTERNAL) STRUCTURES - NEEDED FOR INLINE LOG IMPLEMENTATIONS 40 ******************************************************************************/ 41 42 /* private PERF structure - common to all implementations */ 43 typedef struct PERF_Private 44 { 45 struct PERF_LOG_Private *pLog; 46 TIME_STRUCT time, tempTime; /* last and current timestamp */ 47 48 unsigned long uMode; /* PERF instrumentation mode */ 49 unsigned long ulPID; /* PID for thread */ 50 unsigned long ulID; /* Performance object name (FOURCC) */ 51 52 #ifdef __PERF_CUSTOMIZABLE__ 53 /* additional information for each kind of implementation */ 54 PERF_Custom_Private cip; 55 #endif 56 } PERF_Private; 57 58 #define get_Private(handle) \ 59 ((PERF_Private *) ( (handle)->pComponentPrivate )) 60 61 /* PERF Instrumentation mode */ 62 enum PERF_MODE 63 { 64 PERF_Mode_None = 0x0, 65 PERF_Mode_Log = 0x1, 66 }; 67 68 /*============================================================================= 69 INSTRUMENTATION OBJECT 70 =============================================================================*/ 71 typedef struct PERF_OBJTYPE 72 { 73 /** pComponentPrivate is a pointer to the component private 74 * data area. This member is allocated and initialized by the 75 * component when the component is created. The application 76 * should not access this data area. 77 * */ 78 void *pComponentPrivate; 79 80 /** pApplicationPrivate is a 32 bit pointer that is unused by 81 * PERF. The value is set to NULL when the component is 82 * created and not read or written thereafter. 83 * */ 84 void *pApplicationPrivate; 85 86 /** The Done method is called at the end of the UC test or UI 87 * application. 88 * @param phObject 89 * Pointer to a handle to the PERF object, which will be 90 * deleted and set to NULL upon completion. 91 * */ 92 void (*Done)( 93 PERF_OBJHANDLE *phObject); 94 95 #ifdef __PERF_CUSTOMIZABLE__ 96 PERF_Custom_Interface ci; 97 #endif 98 } PERF_OBJTYPE; 99 100 /* check if handle is defined */ 101 #define PERF_check(handle, exp) ((handle) ? (exp),1 : 0) 102 103 #define __PERF_Done( \ 104 hObject) \ 105 PERF_check((hObject), ((PERF_OBJHANDLE)(hObject))->Done( \ 106 (PERF_OBJHANDLE *)&(hObject)) ) /* Macro End */ 107 108 /* define the PERF log interface - standard implementation */ 109 #include "perf_log.h" 110 111 #endif 112