i915_gem_region.h (2030B)
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