Update cl_profile_amd.h header to add support for stable GPU clocks
diff --git a/3-0/include/CL/internal/cl_profile_amd.h b/3-0/include/CL/internal/cl_profile_amd.h
index 1c6e281..24d542c 100755
--- a/3-0/include/CL/internal/cl_profile_amd.h
+++ b/3-0/include/CL/internal/cl_profile_amd.h
@@ -99,22 +99,50 @@
 extern "C" {
 #endif /*__cplusplus*/
 
-typedef struct _cl_perfcounter_amd * cl_perfcounter_amd;
+typedef struct _cl_perfcounter_amd* cl_perfcounter_amd;
 typedef cl_ulong cl_perfcounter_property;
 typedef cl_uint cl_perfcounter_info;
 
 /* cl_perfcounter_info */
-enum PerfcounterInfo
-{
-    CL_PERFCOUNTER_NONE                 = 0x0,
-    CL_PERFCOUNTER_REFERENCE_COUNT      = 0x1,
-    CL_PERFCOUNTER_DATA                 = 0x2,
-    CL_PERFCOUNTER_GPU_BLOCK_INDEX      = 0x3,
-    CL_PERFCOUNTER_GPU_COUNTER_INDEX    = 0x4,
-    CL_PERFCOUNTER_GPU_EVENT_INDEX      = 0x5,
-    CL_PERFCOUNTER_LAST
+enum PerfcounterInfo {
+  CL_PERFCOUNTER_NONE = 0x0,
+  CL_PERFCOUNTER_REFERENCE_COUNT = 0x1,
+  CL_PERFCOUNTER_DATA = 0x2,
+  CL_PERFCOUNTER_GPU_BLOCK_INDEX = 0x3,
+  CL_PERFCOUNTER_GPU_COUNTER_INDEX = 0x4,
+  CL_PERFCOUNTER_GPU_EVENT_INDEX = 0x5,
+  CL_PERFCOUNTER_LAST
 };
 
+/*********************************
+* Set device clock mode data
+*********************************/
+enum cl_DeviceClockMode_AMD {
+  CL_DEVICE_CLOCK_MODE_DEFAULT_AMD = 0x0, /*Device clocks and other power settings are restored to default*/
+  CL_DEVICE_CLOCK_MODE_QUERY_AMD = 0x1, /*Queries the current device clock ratios. Leaves the clock mode of the device unchanged*/
+  CL_DEVICE_CLOCK_MODE_PROFILING_AMD = 0x2, /*Scale down from peak ratio*/
+  CL_DEVICE_CLOCK_MODE_MINIMUMMEMORY_AMD = 0x3, /* Memory clock is set to the lowest available level*/
+  CL_DEVICE_CLOCK_MODE_MINIMUMENGINE_AMD = 0x4, /*Engine clock is set to the lowest available level*/
+  CL_DEVICE_CLOCK_MODE_PEAK_AMD = 0x5, /*Clocks set to maximum when possible. Fan set to maximum.*/
+  CL_DEVICE_CLOCK_MODE_QUERYPROFILING_AMD = 0x6, /*Queries the profiling device clock ratios. Leaves the clock mode of the device unchanged*/
+  CL_DEVICE_CLOCK_MODE_QUERYPEAK_AMD = 0x7, /*Queries the peak device clock ratios.Leaves the clock mode of the device unchanged*/
+  CL_DEVICE_CLOCK_MODE_COUNT_AMD = 0x8, /*Maxmium count of device clock mode*/
+};
+
+typedef struct _cl_set_device_clock_mode_input_amd
+{
+  /* specify the clock mode for AMD GPU device*/
+  cl_DeviceClockMode_AMD clock_mode;
+} cl_set_device_clock_mode_input_amd;
+
+typedef struct _cl_set_device_clock_mode_output_amd
+{
+  /*Ratio of current mem clock to peak clock as obtained from DeviceProperties::maxGpuClock*/
+  cl_float memory_clock_ratio_to_peak;
+  /*Ratio of current gpu core clock to peak clock as obtained from DeviceProperties::maxGpuClock*/
+  cl_float engine_clock_ratio_to_peak;
+} cl_set_device_clock_mode_output_amd;
+
 /*! \brief Creates a new HW performance counter
  *   for the specified OpenCL context.
  *
@@ -129,12 +157,9 @@
  *
  *  \return the created perfcounter object
  */
-extern CL_API_ENTRY cl_perfcounter_amd CL_API_CALL
-clCreatePerfCounterAMD(
-    cl_device_id                /* device */,
-    cl_perfcounter_property*    /* properties */,
-    cl_int*                     /* errcode_ret */
-) CL_API_SUFFIX__VERSION_1_0;
+extern CL_API_ENTRY cl_perfcounter_amd CL_API_CALL clCreatePerfCounterAMD(
+    cl_device_id /* device */, cl_perfcounter_property* /* properties */, cl_int* /* errcode_ret */
+    ) CL_API_SUFFIX__VERSION_1_0;
 
 /*! \brief Destroy a performance counter object.
  *
@@ -144,10 +169,8 @@
  *  - CL_SUCCESS if the function is executed successfully.
  *  - CL_INVALID_OPERATION if we failed to release the object
  */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clReleasePerfCounterAMD(
-    cl_perfcounter_amd  /* perf_counter */
-) CL_API_SUFFIX__VERSION_1_0;
+extern CL_API_ENTRY cl_int CL_API_CALL clReleasePerfCounterAMD(cl_perfcounter_amd /* perf_counter */
+                                                               ) CL_API_SUFFIX__VERSION_1_0;
 
 /*! \brief Increments the perfcounter object reference count.
  *
@@ -157,10 +180,8 @@
  *  - CL_SUCCESS if the function is executed successfully.
  *  - CL_INVALID_OPERATION if we failed to release the object
  */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clRetainPerfCounterAMD(
-    cl_perfcounter_amd  /* perf_counter */
-) CL_API_SUFFIX__VERSION_1_0;
+extern CL_API_ENTRY cl_int CL_API_CALL clRetainPerfCounterAMD(cl_perfcounter_amd /* perf_counter */
+                                                              ) CL_API_SUFFIX__VERSION_1_0;
 
 /*! \brief Enqueues the begin command for the specified counters.
  *
@@ -174,15 +195,11 @@
  *  - CL_SUCCESS if the function is executed successfully.
  *  - CL_INVALID_OPERATION if we failed to enqueue the begin operation
  */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueBeginPerfCounterAMD(
-    cl_command_queue    /* command_queue */,
-    cl_uint             /* num_perf_counters */,
-    cl_perfcounter_amd* /* perf_counters */,
-    cl_uint             /* num_events_in_wait_list */,
-    const cl_event*     /* event_wait_list */,
-    cl_event*           /* event */
-) CL_API_SUFFIX__VERSION_1_0;
+extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueBeginPerfCounterAMD(
+    cl_command_queue /* command_queue */, cl_uint /* num_perf_counters */,
+    cl_perfcounter_amd* /* perf_counters */, cl_uint /* num_events_in_wait_list */,
+    const cl_event* /* event_wait_list */, cl_event* /* event */
+    ) CL_API_SUFFIX__VERSION_1_0;
 
 /*! \brief Enqueues the end command for the specified counters.
  *
@@ -198,15 +215,11 @@
  *  - CL_SUCCESS if the function is executed successfully.
  *  - CL_INVALID_OPERATION if we failed to enqueue the end operation
  */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clEnqueueEndPerfCounterAMD(
-    cl_command_queue    /* command_queue */,
-    cl_uint             /* num_perf_counters */,
-    cl_perfcounter_amd* /* perf_counters */,
-    cl_uint             /* num_events_in_wait_list */,
-    const cl_event*     /* event_wait_list */,
-    cl_event*           /* event */
-) CL_API_SUFFIX__VERSION_1_0;
+extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueEndPerfCounterAMD(
+    cl_command_queue /* command_queue */, cl_uint /* num_perf_counters */,
+    cl_perfcounter_amd* /* perf_counters */, cl_uint /* num_events_in_wait_list */,
+    const cl_event* /* event_wait_list */, cl_event* /* event */
+    ) CL_API_SUFFIX__VERSION_1_0;
 
 /*! \brief Retrieves the results from the counter objects.
  *
@@ -231,17 +244,18 @@
  *  - CL_PROFILING_INFO_NOT_AVAILABLE if event isn't finished.
  *  - CL_INVALID_OPERATION if we failed to get the data
  */
-extern CL_API_ENTRY cl_int CL_API_CALL
-clGetPerfCounterInfoAMD(
-    cl_perfcounter_amd  /* perf_counter */,
-    cl_perfcounter_info /* param_name */,
-    size_t              /* param_value_size */,
-    void*               /* param_value */,
-    size_t*             /* param_value_size_ret */
-) CL_API_SUFFIX__VERSION_1_0;
+extern CL_API_ENTRY cl_int CL_API_CALL clGetPerfCounterInfoAMD(
+    cl_perfcounter_amd /* perf_counter */, cl_perfcounter_info /* param_name */,
+    size_t /* param_value_size */, void* /* param_value */, size_t* /* param_value_size_ret */
+    ) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL clSetDeviceClockModeAMD(
+    cl_device_id /* device*/, cl_set_device_clock_mode_input_amd /* Clock_Mode_Input */,
+    cl_set_device_clock_mode_output_amd* /* Clock_Mode_Output */
+    ) CL_API_SUFFIX__VERSION_1_0;
 
 #ifdef __cplusplus
 } /*extern "C"*/
 #endif /*__cplusplus*/
 
-#endif  /*__CL_PROFILE_AMD_H*/
+#endif /*__CL_PROFILE_AMD_H*/