2 * This confidential and proprietary software may be used only as
3 * authorised by a licensing agreement from ARM Limited
4 * (C) COPYRIGHT 2010-2013 ARM Limited
6 * The entire notice above must be reproduced on all authorised
7 * copies and copies may only be made to the extent permitted
8 * by a licensing agreement from ARM Limited.
11 #ifndef __MALI_OSK_PROFILING_H__
12 #define __MALI_OSK_PROFILING_H__
14 #if defined(CONFIG_MALI400_PROFILING) && defined (CONFIG_TRACEPOINTS)
16 #include "mali_linux_trace.h"
17 #include "mali_profiling_events.h"
18 #include "mali_profiling_gator_api.h"
20 #define MALI_PROFILING_MAX_BUFFER_ENTRIES 1048576
22 #define MALI_PROFILING_NO_HW_COUNTER = ((u32)-1)
24 /** @defgroup _mali_osk_profiling External profiling connectivity
28 * Initialize the profiling module.
29 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
31 _mali_osk_errcode_t
_mali_osk_profiling_init(mali_bool auto_start
);
34 * Terminate the profiling module.
36 void _mali_osk_profiling_term(void);
39 * Start recording profiling data
41 * The specified limit will determine how large the capture buffer is.
42 * MALI_PROFILING_MAX_BUFFER_ENTRIES determines the maximum size allowed by the device driver.
44 * @param limit The desired maximum number of events to record on input, the actual maximum on output.
45 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
47 _mali_osk_errcode_t
_mali_osk_profiling_start(u32
* limit
);
50 * Add an profiling event
52 * @param event_id The event identificator.
53 * @param data0 First data parameter, depending on event_id specified.
54 * @param data1 Second data parameter, depending on event_id specified.
55 * @param data2 Third data parameter, depending on event_id specified.
56 * @param data3 Fourth data parameter, depending on event_id specified.
57 * @param data4 Fifth data parameter, depending on event_id specified.
58 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
60 /* Call Linux tracepoint directly */
61 #define _mali_osk_profiling_add_event(event_id, data0, data1, data2, data3, data4) trace_mali_timeline_event((event_id), (data0), (data1), (data2), (data3), (data4))
64 * Report a hardware counter event.
66 * @param counter_id The ID of the counter.
67 * @param value The value of the counter.
70 /* Call Linux tracepoint directly */
71 #define _mali_osk_profiling_report_hw_counter(counter_id, value) trace_mali_hw_counter(counter_id, value)
76 * @param counters array of counter values
78 void _mali_osk_profiling_report_sw_counters(u32
*counters
);
81 * Stop recording profiling data
83 * @param count Returns the number of recorded events.
84 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
86 _mali_osk_errcode_t
_mali_osk_profiling_stop(u32
* count
);
89 * Retrieves the number of events that can be retrieved
91 * @return The number of recorded events that can be retrieved.
93 u32
_mali_osk_profiling_get_count(void);
98 * @param index Event index (start with 0 and continue until this function fails to retrieve all events)
99 * @param timestamp The timestamp for the retrieved event will be stored here.
100 * @param event_id The event ID for the retrieved event will be stored here.
101 * @param data The 5 data values for the retrieved event will be stored here.
102 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
104 _mali_osk_errcode_t
_mali_osk_profiling_get_event(u32 index
, u64
* timestamp
, u32
* event_id
, u32 data
[5]);
107 * Clear the recorded buffer.
109 * This is needed in order to start another recording.
111 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
113 _mali_osk_errcode_t
_mali_osk_profiling_clear(void);
116 * Checks if a recording of profiling data is in progress
118 * @return MALI_TRUE if recording of profiling data is in progress, MALI_FALSE if not
120 mali_bool
_mali_osk_profiling_is_recording(void);
123 * Checks if profiling data is available for retrival
125 * @return MALI_TRUE if profiling data is avaiable, MALI_FALSE if not
127 mali_bool
_mali_osk_profiling_have_recording(void);
129 /** @} */ /* end group _mali_osk_profiling */
131 #else /* defined(CONFIG_MALI400_PROFILING) && defined(CONFIG_TRACEPOINTS) */
133 /* Dummy add_event, for when profiling is disabled. */
135 #define _mali_osk_profiling_add_event(event_id, data0, data1, data2, data3, data4)
137 #endif /* defined(CONFIG_MALI400_PROFILING) && defined(CONFIG_TRACEPOINTS) */
139 #endif /* __MALI_OSK_PROFILING_H__ */