cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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