162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright © 2020 Intel Corporation 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __I915_DRM_CLIENT_H__ 762306a36Sopenharmony_ci#define __I915_DRM_CLIENT_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/kref.h> 1062306a36Sopenharmony_ci#include <linux/list.h> 1162306a36Sopenharmony_ci#include <linux/spinlock.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <uapi/drm/i915_drm.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define I915_LAST_UABI_ENGINE_CLASS I915_ENGINE_CLASS_COMPUTE 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct drm_file; 1862306a36Sopenharmony_cistruct drm_printer; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistruct i915_drm_client { 2162306a36Sopenharmony_ci struct kref kref; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci unsigned int id; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci spinlock_t ctx_lock; /* For add/remove from ctx_list. */ 2662306a36Sopenharmony_ci struct list_head ctx_list; /* List of contexts belonging to client. */ 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci /** 2962306a36Sopenharmony_ci * @past_runtime: Accumulation of pphwsp runtimes from closed contexts. 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_ci atomic64_t past_runtime[I915_LAST_UABI_ENGINE_CLASS + 1]; 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic inline struct i915_drm_client * 3562306a36Sopenharmony_cii915_drm_client_get(struct i915_drm_client *client) 3662306a36Sopenharmony_ci{ 3762306a36Sopenharmony_ci kref_get(&client->kref); 3862306a36Sopenharmony_ci return client; 3962306a36Sopenharmony_ci} 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_civoid __i915_drm_client_free(struct kref *kref); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic inline void i915_drm_client_put(struct i915_drm_client *client) 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci kref_put(&client->kref, __i915_drm_client_free); 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistruct i915_drm_client *i915_drm_client_alloc(void); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_civoid i915_drm_client_fdinfo(struct drm_printer *p, struct drm_file *file); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#endif /* !__I915_DRM_CLIENT_H__ */ 53