1/* SPDX-License-Identifier: MIT */
2/*
3 * Copyright © 2025 Intel Corporation
4 */
5
6#ifndef _XE_GUC_ENGINE_ACTIVITY_TYPES_H_
7#define _XE_GUC_ENGINE_ACTIVITY_TYPES_H_
8
9#include <linux/types.h>
10
11#include "xe_guc_fwif.h"
12/**
13 * struct engine_activity - Engine specific activity data
14 *
15 * Contains engine specific activity data and snapshot of the
16 * structures from GuC
17 */
18struct engine_activity {
19 /** @active: current activity */
20 u64 active;
21
22 /** @last_cpu_ts: cpu timestamp in nsec of previous sample */
23 u64 last_cpu_ts;
24
25 /** @quanta: total quanta used on HW */
26 u64 quanta;
27
28 /** @quanta_ns: total quanta_ns used on HW */
29 u64 quanta_ns;
30
31 /**
32 * @quanta_remainder_ns: remainder when the CPU time is scaled as
33 * per the quanta_ratio. This remainder is used in subsequent
34 * quanta calculations.
35 */
36 u64 quanta_remainder_ns;
37
38 /** @total: total engine activity */
39 u64 total;
40
41 /** @running: true if engine is running some work */
42 bool running;
43
44 /** @metadata: snapshot of engine activity metadata */
45 struct guc_engine_activity_metadata metadata;
46
47 /** @activity: snapshot of engine activity counter */
48 struct guc_engine_activity activity;
49};
50
51/**
52 * struct engine_activity_group - Activity data for all engines
53 */
54struct engine_activity_group {
55 /** @engine: engine specific activity data */
56 struct engine_activity engine[GUC_MAX_ENGINE_CLASSES][GUC_MAX_INSTANCES_PER_CLASS];
57};
58
59/**
60 * struct engine_activity_buffer - engine activity buffers
61 *
62 * This contains the buffers allocated for metadata and activity data
63 */
64struct engine_activity_buffer {
65 /** @activity_bo: object allocated to hold activity data */
66 struct xe_bo *activity_bo;
67
68 /** @metadata_bo: object allocated to hold activity metadata */
69 struct xe_bo *metadata_bo;
70};
71
72/**
73 * struct xe_guc_engine_activity - Data used by engine activity implementation
74 */
75struct xe_guc_engine_activity {
76 /** @gpm_timestamp_shift: Right shift value for the gpm timestamp */
77 u32 gpm_timestamp_shift;
78
79 /** @num_activity_group: number of activity groups */
80 u32 num_activity_group;
81
82 /** @num_functions: number of functions */
83 u32 num_functions;
84
85 /** @supported: indicates support for engine activity stats */
86 bool supported;
87
88 /**
89 * @eag: holds the device level engine activity data in native mode.
90 * In SRIOV mode, points to an array with entries which holds the engine
91 * activity data for PF and VF's
92 */
93 struct engine_activity_group *eag;
94
95 /** @device_buffer: buffer object for global engine activity */
96 struct engine_activity_buffer device_buffer;
97
98 /** @function_buffer: buffer object for per-function engine activity */
99 struct engine_activity_buffer function_buffer;
100};
101#endif
102
103

source code of linux/drivers/gpu/drm/xe/xe_guc_engine_activity_types.h