]> Git Repo - J-linux.git/blob - drivers/gpu/drm/i915/gem/i915_gem_region.h
Merge tag 'nfsd-6.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
[J-linux.git] / drivers / gpu / drm / i915 / gem / i915_gem_region.h
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2019 Intel Corporation
4  */
5
6 #ifndef __I915_GEM_REGION_H__
7 #define __I915_GEM_REGION_H__
8
9 #include <linux/types.h>
10
11 struct intel_memory_region;
12 struct drm_i915_gem_object;
13 struct sg_table;
14
15 struct i915_gem_apply_to_region;
16
17 #define I915_BO_INVALID_OFFSET ((resource_size_t)-1)
18
19 /**
20  * struct i915_gem_apply_to_region_ops - ops to use when iterating over all
21  * region objects.
22  */
23 struct i915_gem_apply_to_region_ops {
24         /**
25          * @process_obj: Process the current object
26          *
27          * Note that if this function is part of a ww transaction, and
28          * if returns -EDEADLK for one of the objects, it may be
29          * rerun for that same object in the same pass.
30          */
31         int (*process_obj)(struct i915_gem_apply_to_region *apply,
32                            struct drm_i915_gem_object *obj);
33 };
34
35 /**
36  * struct i915_gem_apply_to_region - Argument to the struct
37  * i915_gem_apply_to_region_ops functions.
38  * @ops: The ops for the operation.
39  * @ww: Locking context used for the transaction.
40  * @interruptible: Whether to perform object locking interruptible.
41  *
42  * This structure is intended to be embedded in a private struct if needed
43  */
44 struct i915_gem_apply_to_region {
45         const struct i915_gem_apply_to_region_ops *ops;
46         struct i915_gem_ww_ctx *ww;
47         u32 interruptible:1;
48 };
49
50 void i915_gem_object_init_memory_region(struct drm_i915_gem_object *obj,
51                                         struct intel_memory_region *mem);
52 void i915_gem_object_release_memory_region(struct drm_i915_gem_object *obj);
53
54 struct drm_i915_gem_object *
55 i915_gem_object_create_region(struct intel_memory_region *mem,
56                               resource_size_t size,
57                               resource_size_t page_size,
58                               unsigned int flags);
59 struct drm_i915_gem_object *
60 i915_gem_object_create_region_at(struct intel_memory_region *mem,
61                                  resource_size_t offset,
62                                  resource_size_t size,
63                                  unsigned int flags);
64
65 int i915_gem_process_region(struct intel_memory_region *mr,
66                             struct i915_gem_apply_to_region *apply);
67 #endif
This page took 0.032413 seconds and 4 git commands to generate.