1/* SPDX-License-Identifier: MIT */
2/*
3 * Copyright © 2019 Intel Corporation
4 */
5
6#ifndef __I915_PERF_H__
7#define __I915_PERF_H__
8
9#include <linux/kref.h>
10#include <linux/types.h>
11
12#include "i915_perf_types.h"
13
14struct drm_device;
15struct drm_file;
16struct drm_i915_private;
17struct i915_oa_config;
18struct intel_context;
19struct intel_engine_cs;
20
21int i915_perf_init(struct drm_i915_private *i915);
22void i915_perf_fini(struct drm_i915_private *i915);
23void i915_perf_register(struct drm_i915_private *i915);
24void i915_perf_unregister(struct drm_i915_private *i915);
25int i915_perf_ioctl_version(struct drm_i915_private *i915);
26int i915_perf_sysctl_register(void);
27void i915_perf_sysctl_unregister(void);
28
29int i915_perf_open_ioctl(struct drm_device *dev, void *data,
30 struct drm_file *file);
31int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
32 struct drm_file *file);
33int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data,
34 struct drm_file *file);
35
36void i915_oa_init_reg_state(const struct intel_context *ce,
37 const struct intel_engine_cs *engine);
38
39struct i915_oa_config *
40i915_perf_get_oa_config(struct i915_perf *perf, int metrics_set);
41
42static inline struct i915_oa_config *
43i915_oa_config_get(struct i915_oa_config *oa_config)
44{
45 if (kref_get_unless_zero(kref: &oa_config->ref))
46 return oa_config;
47 else
48 return NULL;
49}
50
51void i915_oa_config_release(struct kref *ref);
52static inline void i915_oa_config_put(struct i915_oa_config *oa_config)
53{
54 if (!oa_config)
55 return;
56
57 kref_put(kref: &oa_config->ref, release: i915_oa_config_release);
58}
59
60u32 i915_perf_oa_timestamp_frequency(struct drm_i915_private *i915);
61
62#endif /* __I915_PERF_H__ */
63

source code of linux/drivers/gpu/drm/i915/i915_perf.h