xref: /openbmc/linux/drivers/gpu/drm/i915/i915_perf.h (revision b8d49f28aa03e4678e450e588b10c0faf96e4118)
1db94e9f1SJani Nikula /* SPDX-License-Identifier: MIT */
2db94e9f1SJani Nikula /*
3db94e9f1SJani Nikula  * Copyright © 2019 Intel Corporation
4db94e9f1SJani Nikula  */
5db94e9f1SJani Nikula 
6db94e9f1SJani Nikula #ifndef __I915_PERF_H__
7db94e9f1SJani Nikula #define __I915_PERF_H__
8db94e9f1SJani Nikula 
96a45008aSLionel Landwerlin #include <linux/kref.h>
10db94e9f1SJani Nikula #include <linux/types.h>
11db94e9f1SJani Nikula 
121d0f2ebfSLionel Landwerlin #include "i915_perf_types.h"
131d0f2ebfSLionel Landwerlin 
14db94e9f1SJani Nikula struct drm_device;
15db94e9f1SJani Nikula struct drm_file;
16db94e9f1SJani Nikula struct drm_i915_private;
176a45008aSLionel Landwerlin struct i915_oa_config;
18db94e9f1SJani Nikula struct intel_context;
19db94e9f1SJani Nikula struct intel_engine_cs;
20db94e9f1SJani Nikula 
21db94e9f1SJani Nikula void i915_perf_init(struct drm_i915_private *i915);
22db94e9f1SJani Nikula void i915_perf_fini(struct drm_i915_private *i915);
23db94e9f1SJani Nikula void i915_perf_register(struct drm_i915_private *i915);
24db94e9f1SJani Nikula void i915_perf_unregister(struct drm_i915_private *i915);
25*b8d49f28SLionel Landwerlin int i915_perf_ioctl_version(void);
26db94e9f1SJani Nikula 
27db94e9f1SJani Nikula int i915_perf_open_ioctl(struct drm_device *dev, void *data,
28db94e9f1SJani Nikula 			 struct drm_file *file);
29db94e9f1SJani Nikula int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
30db94e9f1SJani Nikula 			       struct drm_file *file);
31db94e9f1SJani Nikula int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data,
32db94e9f1SJani Nikula 				  struct drm_file *file);
336a45008aSLionel Landwerlin 
347dc56af5SChris Wilson void i915_oa_init_reg_state(const struct intel_context *ce,
357dc56af5SChris Wilson 			    const struct intel_engine_cs *engine);
36db94e9f1SJani Nikula 
376a45008aSLionel Landwerlin struct i915_oa_config *
386a45008aSLionel Landwerlin i915_perf_get_oa_config(struct i915_perf *perf, int metrics_set);
396a45008aSLionel Landwerlin 
406a45008aSLionel Landwerlin static inline struct i915_oa_config *
416a45008aSLionel Landwerlin i915_oa_config_get(struct i915_oa_config *oa_config)
426a45008aSLionel Landwerlin {
436a45008aSLionel Landwerlin 	if (kref_get_unless_zero(&oa_config->ref))
446a45008aSLionel Landwerlin 		return oa_config;
456a45008aSLionel Landwerlin 	else
466a45008aSLionel Landwerlin 		return NULL;
476a45008aSLionel Landwerlin }
486a45008aSLionel Landwerlin 
496a45008aSLionel Landwerlin void i915_oa_config_release(struct kref *ref);
506a45008aSLionel Landwerlin static inline void i915_oa_config_put(struct i915_oa_config *oa_config)
516a45008aSLionel Landwerlin {
526a45008aSLionel Landwerlin 	if (!oa_config)
536a45008aSLionel Landwerlin 		return;
546a45008aSLionel Landwerlin 
556a45008aSLionel Landwerlin 	kref_put(&oa_config->ref, i915_oa_config_release);
566a45008aSLionel Landwerlin }
576a45008aSLionel Landwerlin 
58db94e9f1SJani Nikula #endif /* __I915_PERF_H__ */
59