Loading...
Note: File does not exist in v5.4.
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
11struct intel_memory_region;
12struct drm_i915_gem_object;
13struct sg_table;
14
15struct 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 */
23struct i915_gem_apply_to_region_ops {
24 /**
25 * process_obj - Process the current object
26 * @apply: Embed this for private data.
27 * @obj: The current object.
28 *
29 * Note that if this function is part of a ww transaction, and
30 * if returns -EDEADLK for one of the objects, it may be
31 * rerun for that same object in the same pass.
32 */
33 int (*process_obj)(struct i915_gem_apply_to_region *apply,
34 struct drm_i915_gem_object *obj);
35};
36
37/**
38 * struct i915_gem_apply_to_region - Argument to the struct
39 * i915_gem_apply_to_region_ops functions.
40 * @ops: The ops for the operation.
41 * @ww: Locking context used for the transaction.
42 * @interruptible: Whether to perform object locking interruptible.
43 *
44 * This structure is intended to be embedded in a private struct if needed
45 */
46struct i915_gem_apply_to_region {
47 const struct i915_gem_apply_to_region_ops *ops;
48 struct i915_gem_ww_ctx *ww;
49 u32 interruptible:1;
50};
51
52void i915_gem_object_init_memory_region(struct drm_i915_gem_object *obj,
53 struct intel_memory_region *mem);
54void i915_gem_object_release_memory_region(struct drm_i915_gem_object *obj);
55
56struct drm_i915_gem_object *
57i915_gem_object_create_region(struct intel_memory_region *mem,
58 resource_size_t size,
59 resource_size_t page_size,
60 unsigned int flags);
61struct drm_i915_gem_object *
62i915_gem_object_create_region_at(struct intel_memory_region *mem,
63 resource_size_t offset,
64 resource_size_t size,
65 unsigned int flags);
66
67int i915_gem_process_region(struct intel_memory_region *mr,
68 struct i915_gem_apply_to_region *apply);
69#endif