70 lines
2.0 KiB
C
70 lines
2.0 KiB
C
|
/* SPDX-License-Identifier: MIT */
|
||
|
/*
|
||
|
* Copyright © 2019 Intel Corporation
|
||
|
*/
|
||
|
|
||
|
#ifndef __I915_GEM_REGION_H__
|
||
|
#define __I915_GEM_REGION_H__
|
||
|
|
||
|
#include <linux/types.h>
|
||
|
|
||
|
struct intel_memory_region;
|
||
|
struct drm_i915_gem_object;
|
||
|
struct sg_table;
|
||
|
|
||
|
struct i915_gem_apply_to_region;
|
||
|
|
||
|
#define I915_BO_INVALID_OFFSET ((resource_size_t)-1)
|
||
|
|
||
|
/**
|
||
|
* struct i915_gem_apply_to_region_ops - ops to use when iterating over all
|
||
|
* region objects.
|
||
|
*/
|
||
|
struct i915_gem_apply_to_region_ops {
|
||
|
/**
|
||
|
* process_obj - Process the current object
|
||
|
* @apply: Embed this for private data.
|
||
|
* @obj: The current object.
|
||
|
*
|
||
|
* Note that if this function is part of a ww transaction, and
|
||
|
* if returns -EDEADLK for one of the objects, it may be
|
||
|
* rerun for that same object in the same pass.
|
||
|
*/
|
||
|
int (*process_obj)(struct i915_gem_apply_to_region *apply,
|
||
|
struct drm_i915_gem_object *obj);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* struct i915_gem_apply_to_region - Argument to the struct
|
||
|
* i915_gem_apply_to_region_ops functions.
|
||
|
* @ops: The ops for the operation.
|
||
|
* @ww: Locking context used for the transaction.
|
||
|
* @interruptible: Whether to perform object locking interruptible.
|
||
|
*
|
||
|
* This structure is intended to be embedded in a private struct if needed
|
||
|
*/
|
||
|
struct i915_gem_apply_to_region {
|
||
|
const struct i915_gem_apply_to_region_ops *ops;
|
||
|
struct i915_gem_ww_ctx *ww;
|
||
|
u32 interruptible:1;
|
||
|
};
|
||
|
|
||
|
void i915_gem_object_init_memory_region(struct drm_i915_gem_object *obj,
|
||
|
struct intel_memory_region *mem);
|
||
|
void i915_gem_object_release_memory_region(struct drm_i915_gem_object *obj);
|
||
|
|
||
|
struct drm_i915_gem_object *
|
||
|
i915_gem_object_create_region(struct intel_memory_region *mem,
|
||
|
resource_size_t size,
|
||
|
resource_size_t page_size,
|
||
|
unsigned int flags);
|
||
|
struct drm_i915_gem_object *
|
||
|
i915_gem_object_create_region_at(struct intel_memory_region *mem,
|
||
|
resource_size_t offset,
|
||
|
resource_size_t size,
|
||
|
unsigned int flags);
|
||
|
|
||
|
int i915_gem_process_region(struct intel_memory_region *mr,
|
||
|
struct i915_gem_apply_to_region *apply);
|
||
|
#endif
|