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/* NOTE: This header should be only included from perf.h */
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* this union is used to convert a float to a long representation without
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   breaking strict aliasing rules */
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinunion __PERF_float_long
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    float f;
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long l;
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* combine 2 values in a unsigned long */
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_mask(field, len) \
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ( ((unsigned long) (field)) & ((1 << (len)) - 1) )
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_bits(field, start, len) \
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ( (((unsigned long) (field)) >> start) & ((1 << (len)) - 1) )
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_log_combine(flag, field, len) \
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ( ((unsigned long) (flag)) | (PERF_mask(field, len) & PERF_LOG_NotMask) )
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_COMBINE2(field1, len1, field2, len2) \
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ( ( PERF_mask(field1, len1) << (len2) ) |     \
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_mask(field2, len2) )
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_LOGCOMBINE2(flag, field1, len1, field2, len2)            \
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_log_combine(flag, PERF_COMBINE2(field1, len1, field2, len2), \
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (len1) + (len2))
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_COMBINE3(field1, len1, field2, len2, field3, len3) \
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((( ( PERF_mask(field1, len1)   << (len2) ) |               \
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          PERF_mask(field2, len2) ) << (len3) ) |               \
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          PERF_mask(field3, len3) )
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_LOGCOMBINE3(flag, field1, len1, field2, len2, field3, len3)     \
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_log_combine(flag,                                                   \
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_COMBINE3(field1, len1, field2, len2, field3, len3), \
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (len1) + (len2) + (len3))
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=============================================================================
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    HARD CODED (default) INTERFACE
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    This translates each instrumentation directly into a logging call.  It is
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    always defined, so that the logs can be done by the custom interface.
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin=============================================================================*/
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_Boundary(           \
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                       \
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eBoundary)                     \
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_check((hObject),              \
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     __PERF_log1(get_Private(hObject), \
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 PERF_log_combine(PERF_LOG_Boundary, eBoundary, 26)) ) /* Macro End */
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* we squeeze PERF_LOG flag into 2 or 4 bits */
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_Buffer(                                                  \
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                            \
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        flSending,                                                          \
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        flMultiple,                                                         \
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        flFrame,                                                            \
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                         \
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                         \
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                             \
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModule1,                                                           \
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModule2)                                                           \
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_check((hObject),                                                   \
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     PERF_IsMultiple(flMultiple) ?                                          \
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      __PERF_log3(get_Private(hObject),                                     \
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_IsXfering(flSending) ?                               \
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  (PERF_LOG_Buffer | PERF_LOG_Xfering |  /* 2 bits */       \
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   PERF_COMBINE3((ulSize) >> 3, 30 - 2 * PERF_ModuleBits,   \
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 eModule2, PERF_ModuleBits,                 \
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 eModule1, PERF_ModuleBits) ) :             \
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  (PERF_LOG_Buffer | flSending |  /* 4 bits */              \
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   PERF_COMBINE2(ulSize, 28 - PERF_ModuleBits,              \
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 eModule1, PERF_ModuleBits) ),              \
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  ( ((unsigned long) (ulAddress1)) & ~3 ) |                 \
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  ( PERF_IsFrame   (flFrame)    ? PERF_LOG_Frame    : 0 ) | \
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  ( PERF_IsMultiple(flMultiple) ? PERF_LOG_Multiple : 0 ),  \
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  (unsigned long) (ulAddress2) ) :                          \
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      __PERF_log2(get_Private(hObject),                                     \
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_IsXfering(flSending) ?                               \
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  (PERF_LOG_Buffer | PERF_LOG_Xfering |  /* 2 bits */       \
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   PERF_COMBINE3((ulSize) >> 3, 30 - 2 * PERF_ModuleBits,   \
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 eModule2, PERF_ModuleBits,                 \
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 eModule1, PERF_ModuleBits) ) :             \
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  (PERF_LOG_Buffer | flSending | /* 4 bits */               \
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   PERF_COMBINE2(ulSize, 28 - PERF_ModuleBits,              \
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 eModule1, PERF_ModuleBits) ),              \
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  ( ((unsigned long) (ulAddress1)) & ~3 ) |                 \
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  ( PERF_IsFrame   (flFrame)    ? PERF_LOG_Frame    : 0 ) | \
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  ( PERF_IsMultiple(flMultiple) ? PERF_LOG_Multiple : 0 ) ))
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_Command(                                               \
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                          \
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSending,                                                        \
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulArgument,                                                       \
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulCommand,                                                        \
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModule)                                                          \
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_check((hObject),                                                 \
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     __PERF_log3(get_Private(hObject),                                    \
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 PERF_log_combine(PERF_LOG_Command | ulSending, eModule, 28), \
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 ((unsigned long) (ulCommand)),                           \
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 ((unsigned long) (ulArgument)) ) ) /* Macro End */
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_Log(                              \
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                     \
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulData1,                                     \
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulData2,                                     \
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulData3)                                     \
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_check((hObject),                            \
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_log3(get_Private(hObject),                \
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_log_combine(PERF_LOG_Log, ulData1, 28), \
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((unsigned long) (ulData2)),                 \
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((unsigned long) (ulData3)) ) ) /* Macro End */
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_SyncAV(                                                \
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                          \
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fTimeAudio,                                                       \
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fTimeVideo,                                                       \
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eSyncOperation)                                                   \
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    do                                                                    \
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {                                                                     \
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        union __PERF_float_long uA,uV;                                    \
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        uA.f = fTimeAudio;  uV.f = fTimeVideo;                            \
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_check((hObject),                                             \
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         __PERF_log3(get_Private(hObject),                                \
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     PERF_log_combine(PERF_LOG_Sync, eSyncOperation, 28), \
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     uA.l, uV.l));                                        \
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }\
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    while(0) /* Macro End */
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_ThreadCreated(                          \
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                           \
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulThreadID,                                        \
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulThreadName)                                      \
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_check((hObject),                                  \
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_log2(get_Private(hObject),                      \
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_log_combine(PERF_LOG_Thread, ulThreadID, 26), \
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((unsigned long) (ulThreadName)) ) ) /* Macro End */
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   PERF LOG Data Structures
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin============================================================================ */
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* private PERF structure for logging */
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_LOG_Private
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long   uBufferCount; /* number of buffers filled */
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long   uBufSize;     /* size of buffer */
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long  *puBuffer;     /* start of current buffer */
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long  *puEnd;        /* 'end' of current buffer */
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long  *puPtr;        /* current buffer pointer */
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    FILE *fOut;                   /* output file */
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char *fOutFile;               /* output file name */
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_LOG_Private;
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* log flags used */
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinenum PERF_LogStamps
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* 1 arguments */
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Done     = 0x00000000,
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Boundary = 0x08000000,
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* 2 arguments */
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Thread   = 0x0C000000,
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* 3 arguments */
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Log      = 0x10000000,
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Sync     = 0x20000000,
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_LOG_LOCATION__
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* many arguments */
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Location = 0x30000000,
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Command  = 0x40000000,  /* - 0x70000000 */
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* 2 or 3 arguments */
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Buffer   = 0x80000000,  /* - 0xF0000000 */
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* flags and masks */
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Mask     = 0xF0000000,
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_NotMask  = ~PERF_LOG_Mask,
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Mask2    = 0xFC000000,
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_NotMask2 = ~PERF_LOG_Mask2,
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Frame    = 0x00000002,
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Multiple = 0x00000001,
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* NOTE: we identify xfer buffer from upper 2 bits (11) */
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Xfering  = 0x40000000,
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* NOTE: we identify other buffer logs from upper 4 bits (1000 or 1011) */
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Sending  = 0x30000000,
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_LOG_LOCATION__
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* PERF log locations are encoded in 6-bits/char.  The last 20 characters of
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   the filename and functionname are saved (20*6*2 bits), along with the last
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   12 bits of the line.  4-bit log stamp makes this 240+12+4=256 bits.  */
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* __PERF_ENCODE_CHAR converts a character to a 6-bit value:
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    a-z => 0-25
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    A-Z => 26-51
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    1-9 => 52-60
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      0 => 'O' (41)
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      . => 61
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /,\ => 62
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else,_ => 63         */
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_ENCODE_CHAR(c) \
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 'a')      : \
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     ((c) >= 'A' && (c) <= 'Z') ? ((c) - 'A' + 26) : \
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     ((c) >= '1' && (c) <= '9') ? ((c) - '1' + 52) : \
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     (c) == '.' ? 61 :               \
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     (c) == '0' ? ('O' - 'A' + 26) : \
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((c) == '/' || (c) == '\\') ? 62 : 63 )
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Get the i-th character from the end of a string, or '/' if i is too big */
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_GET_INDEXED_CHAR(sz, i) (strlen(sz) <= i ? '/' : sz[strlen(sz) - i - 1])
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Encode i-th character of a string (from the end) */
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_ENCODE_INDEXED(sz, i) \
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_ENCODE_CHAR(__PERF_GET_INDEXED_CHAR(sz, i))
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Encode and pack 6 characters into 32 bits.  Only the left 2 bits of the
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   6th character will fit */
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_PACK6(a1,a2,a3,a4,a5,a6) \
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (((unsigned long) (a1))        | \
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (((unsigned long) (a2)) << 6)  | \
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (((unsigned long) (a3)) << 12) | \
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (((unsigned long) (a4)) << 18) | \
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (((unsigned long) (a5)) << 24) | \
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   ((((unsigned long) (a6)) & 0x30) << 26))
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   PERF LOG External methods
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin============================================================================ */
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void __PERF_LOG_log_common(PERF_Private *perf, unsigned long *time_loc);
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   PERF LOG Inline methods
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin============================================================================ */
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if defined(__PERF_C__) || defined(INLINE_SUPPORTED)
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Effects: logs 1 data */
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinINLINE void __PERF_log1(PERF_Private *priv,
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1)
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* get log private structures */
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Private *me   = priv->pLog;
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long *time_loc = me->puPtr++;
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData1;
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_LOG_log_common(priv, time_loc);
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Effects: logs 2 data */
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinINLINE void __PERF_log2(PERF_Private *priv,
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1,
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData2)
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* get log private structures */
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Private *me   = priv->pLog;
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long *time_loc = me->puPtr++;
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData1;
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData2;
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_LOG_log_common(priv, time_loc);
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Effects: logs 3 data */
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinINLINE void __PERF_log3(PERF_Private *priv,
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1,
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData2,
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData3)
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* get log private structures */
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Private *me   = priv->pLog;
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long *time_loc = me->puPtr++;
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData1;
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData2;
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData3;
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_LOG_log_common(priv, time_loc);
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_LOG_LOCATION__
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __PERF_LOG_flush(PERF_LOG_Private *me);
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Effects: logs 3 data */
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinINLINE void
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__PERF_log8(PERF_Private *priv,
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData1,
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData2,
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData3,
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData4,
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData5,
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData6,
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData7,
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulData8)
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* get log private structures */
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_LOG_Private *me   = priv->pLog;
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData8;
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = (ulData1 & PERF_LOG_NotMask) | PERF_LOG_Location;
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData2;
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData3;
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData4;
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData5;
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData6;
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *me->puPtr++ = ulData7;
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* flush if we reached end of the buffer */
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (me->puPtr > me->puEnd) __PERF_LOG_flush(me);
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinINLINE void
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__PERF_LOG_Location(PERF_OBJHANDLE hObject,
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    const char *szFile,
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    unsigned long ulLine,
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    const char *szFunc)
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (hObject)
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long a6  = __PERF_ENCODE_INDEXED(szFile, 5);
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long a12 = __PERF_ENCODE_INDEXED(szFile, 11);
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long a18 = __PERF_ENCODE_INDEXED(szFile, 17);
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long b6  = __PERF_ENCODE_INDEXED(szFunc, 5);
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long b12 = __PERF_ENCODE_INDEXED(szFunc, 11);
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long b18 = __PERF_ENCODE_INDEXED(szFunc, 17);
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* get log private structures */
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        __PERF_log8(get_Private(hObject),
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (a18 & 0xf) | ((b6 & 0xf) << 4) | ((b12 & 0xf) << 8) |
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ((b18 & 0xf) << 12) | ((ulLine & 0xfff) << 16),
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFile, 0),
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 1),
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 2),
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 3),
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 4), a6),
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFile, 6),
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 7),
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 8),
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 9),
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 10), a12),
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFile, 12),
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 13),
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 14),
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 15),
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFile, 16), a18),
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFunc, 0),
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 1),
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 2),
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 3),
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 4), b6),
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFunc, 6),
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 7),
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 8),
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 9),
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 10), b12),
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFunc, 12),
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 13),
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 14),
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 15),
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 __PERF_ENCODE_INDEXED(szFunc, 16), b18),
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_ENCODE_INDEXED(szFile, 18) |
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (__PERF_ENCODE_INDEXED(szFile, 19) << 6)  |
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (__PERF_ENCODE_INDEXED(szFunc, 18) << 12) |
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (__PERF_ENCODE_INDEXED(szFunc, 19) << 18) |
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ((a6 & 0xf) << 24) | ((a12 & 0xf) << 28) );
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void __PERF_log1(PERF_Private *priv,
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1);
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void __PERF_log2(PERF_Private *priv,
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1,
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData2);
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void __PERF_log3(PERF_Private *priv,
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1,
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData2,
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData3);
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_LOG_LOCATION__
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern void __PERF_log8(PERF_Private *priv,
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData1,
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData2,
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData3,
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData4,
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData5,
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData6,
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData7,
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        unsigned long ulData8);
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_LOG_Location(hObject, szFile, ulLine, szFunc)           \
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo                                                                     \
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{                                                                      \
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (hObject)                                                       \
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {                                                                  \
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long a6  = __PERF_ENCODE_INDEXED(szFile, 5);          \
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long a12 = __PERF_ENCODE_INDEXED(szFile, 11);         \
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long a18 = __PERF_ENCODE_INDEXED(szFile, 17);         \
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long b6  = __PERF_ENCODE_INDEXED(szFunc, 5);          \
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long b12 = __PERF_ENCODE_INDEXED(szFunc, 11);         \
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        unsigned long b18 = __PERF_ENCODE_INDEXED(szFunc, 17);         \
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                       \
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        __PERF_log8(get_Private(hObject),                              \
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (a18 & 0xf)        | ((b6 & 0xf) << 4)   |         \
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ((b12 & 0xf) << 8) | ((b18 & 0xf) << 12) |         \
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ((ulLine & 0xfff) << 16),                          \
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFile, 0),     \
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 1),        \
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 2),        \
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 3),        \
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 4), a6),   \
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFile, 6),     \
443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 7),        \
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 8),        \
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 9),        \
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 10), a12), \
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFile, 12),    \
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 13),       \
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 14),       \
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 15),       \
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFile, 16), a18), \
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFunc, 0),     \
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 1),        \
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 2),        \
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 3),        \
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 4), b6),   \
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFunc, 6),     \
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 7),        \
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 8),        \
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 9),        \
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 10), b12), \
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_PACK6(__PERF_ENCODE_INDEXED(szFunc, 12),    \
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 13),       \
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 14),       \
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 15),       \
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              __PERF_ENCODE_INDEXED(szFunc, 16), b18), \
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    __PERF_ENCODE_INDEXED(szFile, 18) |                \
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (__PERF_ENCODE_INDEXED(szFile, 19) << 6)  |        \
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (__PERF_ENCODE_INDEXED(szFunc, 18) << 12) |        \
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (__PERF_ENCODE_INDEXED(szFunc, 19) << 18) |        \
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ((a6 & 0xf) << 24) |  ((a12 & 0xf) << 28));        \
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                                                  \
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}                                                                      \
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinwhile (0);
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
480