/**
 * Copyright (C) ARM Limited 2013-2014. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 */

#ifndef __MALI_MJOLLNIR_PROFILING_GATOR_API_H__
#define __MALI_MJOLLNIR_PROFILING_GATOR_API_H__

#ifdef __cplusplus
extern "C"
{
#endif


/*
 * The number of processor cores.  Update to suit your hardware implementation.
 */
#define MAX_NUM_FP_CORES            (4)
#define MAX_NUM_VP_CORES            (1)
#define MAX_NUM_L2_CACHE_CORES      (1)

enum counters
{
    /* Timeline activity */
    ACTIVITY_VP_0 = 0,
    ACTIVITY_FP_0,
    ACTIVITY_FP_1,
    ACTIVITY_FP_2,
    ACTIVITY_FP_3,

    /* L2 cache counters */
    COUNTER_L2_0_C0,
    COUNTER_L2_0_C1,

    /* Vertex processor counters */
    COUNTER_VP_0_C0,
    COUNTER_VP_0_C1,

    /* Fragment processor counters */
    COUNTER_FP_0_C0,
    COUNTER_FP_0_C1,
    COUNTER_FP_1_C0,
    COUNTER_FP_1_C1,
    COUNTER_FP_2_C0,
    COUNTER_FP_2_C1,
    COUNTER_FP_3_C0,
    COUNTER_FP_3_C1,

    /* EGL Software Counters */
    COUNTER_EGL_BLIT_TIME,

    /* GLES Software Counters */
    COUNTER_GLES_DRAW_ELEMENTS_CALLS,
    COUNTER_GLES_DRAW_ELEMENTS_NUM_INDICES,
    COUNTER_GLES_DRAW_ELEMENTS_NUM_TRANSFORMED,
    COUNTER_GLES_DRAW_ARRAYS_CALLS,
    COUNTER_GLES_DRAW_ARRAYS_NUM_TRANSFORMED,
    COUNTER_GLES_DRAW_POINTS,
    COUNTER_GLES_DRAW_LINES,
    COUNTER_GLES_DRAW_LINE_LOOP,
    COUNTER_GLES_DRAW_LINE_STRIP,
    COUNTER_GLES_DRAW_TRIANGLES,
    COUNTER_GLES_DRAW_TRIANGLE_STRIP,
    COUNTER_GLES_DRAW_TRIANGLE_FAN,
    COUNTER_GLES_NON_VBO_DATA_COPY_TIME,
    COUNTER_GLES_UNIFORM_BYTES_COPIED_TO_MALI,
    COUNTER_GLES_UPLOAD_TEXTURE_TIME,
    COUNTER_GLES_UPLOAD_VBO_TIME,
    COUNTER_GLES_NUM_FLUSHES,
    COUNTER_GLES_NUM_VSHADERS_GENERATED,
    COUNTER_GLES_NUM_FSHADERS_GENERATED,
    COUNTER_GLES_VSHADER_GEN_TIME,
    COUNTER_GLES_FSHADER_GEN_TIME,
    COUNTER_GLES_INPUT_TRIANGLES,
    COUNTER_GLES_VXCACHE_HIT,
    COUNTER_GLES_VXCACHE_MISS,
    COUNTER_GLES_VXCACHE_COLLISION,
    COUNTER_GLES_CULLED_TRIANGLES,
    COUNTER_GLES_CULLED_LINES,
    COUNTER_GLES_BACKFACE_TRIANGLES,
    COUNTER_GLES_GBCLIP_TRIANGLES,
    COUNTER_GLES_GBCLIP_LINES,
    COUNTER_GLES_TRIANGLES_DRAWN,
    COUNTER_GLES_DRAWCALL_TIME,
    COUNTER_GLES_TRIANGLES_COUNT,
    COUNTER_GLES_INDEPENDENT_TRIANGLES_COUNT,
    COUNTER_GLES_STRIP_TRIANGLES_COUNT,
    COUNTER_GLES_FAN_TRIANGLES_COUNT,
    COUNTER_GLES_LINES_COUNT,
    COUNTER_GLES_INDEPENDENT_LINES_COUNT,
    COUNTER_GLES_STRIP_LINES_COUNT,
    COUNTER_GLES_LOOP_LINES_COUNT,

    COUNTER_FILMSTRIP,
    COUNTER_FREQUENCY,
    COUNTER_VOLTAGE,

    NUMBER_OF_EVENTS
};

#define FIRST_ACTIVITY_EVENT    ACTIVITY_VP_0
#define LAST_ACTIVITY_EVENT     ACTIVITY_FP_3

#define FIRST_HW_COUNTER        COUNTER_L2_0_C0
#define LAST_HW_COUNTER         COUNTER_FP_3_C1

#define FIRST_SW_COUNTER        COUNTER_EGL_BLIT_TIME
#define LAST_SW_COUNTER         COUNTER_GLES_LOOP_LINES_COUNT

/* Signifies that the system is able to report voltage and frequency numbers. */
#define DVFS_REPORTED_BY_DDK 1

/**
 * Structure to pass performance counter data of a Mali core
 */
typedef struct _mali_profiling_core_counters
{
    u32 source0;
    u32 value0;
    u32 source1;
    u32 value1;
} _mali_profiling_core_counters;

/*
 * For compatibility with utgard.
 */
typedef struct _mali_profiling_l2_counter_values
{
    struct _mali_profiling_core_counters cores[MAX_NUM_L2_CACHE_CORES];
} _mali_profiling_l2_counter_values;

typedef struct _mali_profiling_mali_version
{
    u32 mali_product_id;
    u32 mali_version_major;
    u32 mali_version_minor;
    u32 num_of_l2_cores;
    u32 num_of_fp_cores;
    u32 num_of_vp_cores;
} _mali_profiling_mali_version;

extern void _mali_profiling_get_mali_version(struct _mali_profiling_mali_version *values);
extern u32 _mali_profiling_get_l2_counters(_mali_profiling_l2_counter_values *values);

/*
 * List of possible actions allowing DDK to be controlled by Streamline.
 * The following numbers are used by DDK to control the frame buffer dumping.
 */
#define FBDUMP_CONTROL_ENABLE (1)
#define FBDUMP_CONTROL_RATE (2)
#define SW_COUNTER_ENABLE      (3)
#define FBDUMP_CONTROL_RESIZE_FACTOR (4)


#ifdef __cplusplus
}
#endif

#endif /* __MALI_MJOLLNIR_PROFILING_GATOR_API_H__ */
