#ifndef __I915_VMA_H__
#define __I915_VMA_H__
#include <linux/io-mapping.h>
#include <linux/rbtree.h>
#include <drm/drm_mm.h>
#include "gt/intel_ggtt_fencing.h"
#include "gem/i915_gem_object.h"
#include "i915_gem_gtt.h"
#include "i915_active.h"
#include "i915_request.h"
#include "i915_vma_resource.h"
#include "i915_vma_types.h"
struct i915_vma *
i915_vma_instance(struct drm_i915_gem_object *obj,
struct i915_address_space *vm,
const struct i915_gtt_view *view);
void i915_vma_unpin_and_release(struct i915_vma **p_vma, unsigned int flags);
#define I915_VMA_RELEASE_MAP …
static inline bool i915_vma_is_active(const struct i915_vma *vma)
{ … }
#define __EXEC_OBJECT_NO_RESERVE …
#define __EXEC_OBJECT_NO_REQUEST_AWAIT …
int __must_check _i915_vma_move_to_active(struct i915_vma *vma,
struct i915_request *rq,
struct dma_fence *fence,
unsigned int flags);
static inline int __must_check
i915_vma_move_to_active(struct i915_vma *vma, struct i915_request *rq,
unsigned int flags)
{ … }
#define __i915_vma_flags(v) …
static inline bool i915_vma_is_ggtt(const struct i915_vma *vma)
{ … }
static inline bool i915_vma_is_dpt(const struct i915_vma *vma)
{ … }
static inline bool i915_vma_has_ggtt_write(const struct i915_vma *vma)
{ … }
static inline void i915_vma_set_ggtt_write(struct i915_vma *vma)
{ … }
static inline bool i915_vma_unset_ggtt_write(struct i915_vma *vma)
{ … }
void i915_vma_flush_writes(struct i915_vma *vma);
static inline bool i915_vma_is_map_and_fenceable(const struct i915_vma *vma)
{ … }
static inline bool i915_vma_set_userfault(struct i915_vma *vma)
{ … }
static inline void i915_vma_unset_userfault(struct i915_vma *vma)
{ … }
static inline bool i915_vma_has_userfault(const struct i915_vma *vma)
{ … }
static inline bool i915_vma_is_closed(const struct i915_vma *vma)
{ … }
static inline u64 __i915_vma_size(const struct i915_vma *vma)
{ … }
static inline u64 i915_vma_size(const struct i915_vma *vma)
{ … }
static inline u64 __i915_vma_offset(const struct i915_vma *vma)
{ … }
static inline u64 i915_vma_offset(const struct i915_vma *vma)
{ … }
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{ … }
static inline u32 i915_ggtt_pin_bias(struct i915_vma *vma)
{ … }
static inline struct i915_vma *i915_vma_get(struct i915_vma *vma)
{ … }
static inline struct i915_vma *i915_vma_tryget(struct i915_vma *vma)
{ … }
static inline void i915_vma_put(struct i915_vma *vma)
{ … }
static inline long
i915_vma_compare(struct i915_vma *vma,
struct i915_address_space *vm,
const struct i915_gtt_view *view)
{ … }
struct i915_vma_work *i915_vma_work(void);
int i915_vma_bind(struct i915_vma *vma,
unsigned int pat_index,
u32 flags,
struct i915_vma_work *work,
struct i915_vma_resource *vma_res);
bool i915_gem_valid_gtt_space(struct i915_vma *vma, unsigned long color);
bool i915_vma_misplaced(const struct i915_vma *vma,
u64 size, u64 alignment, u64 flags);
void __i915_vma_set_map_and_fenceable(struct i915_vma *vma);
void i915_vma_revoke_mmap(struct i915_vma *vma);
void vma_invalidate_tlb(struct i915_address_space *vm, u32 *tlb);
struct dma_fence *__i915_vma_evict(struct i915_vma *vma, bool async);
int __i915_vma_unbind(struct i915_vma *vma);
int __must_check i915_vma_unbind(struct i915_vma *vma);
int __must_check i915_vma_unbind_async(struct i915_vma *vma, bool trylock_vm);
int __must_check i915_vma_unbind_unlocked(struct i915_vma *vma);
void i915_vma_unlink_ctx(struct i915_vma *vma);
void i915_vma_close(struct i915_vma *vma);
void i915_vma_reopen(struct i915_vma *vma);
void i915_vma_destroy_locked(struct i915_vma *vma);
void i915_vma_destroy(struct i915_vma *vma);
#define assert_vma_held(vma) …
static inline void i915_vma_lock(struct i915_vma *vma)
{ … }
static inline void i915_vma_unlock(struct i915_vma *vma)
{ … }
int __must_check
i915_vma_pin_ww(struct i915_vma *vma, struct i915_gem_ww_ctx *ww,
u64 size, u64 alignment, u64 flags);
static inline int __must_check
i915_vma_pin(struct i915_vma *vma, u64 size, u64 alignment, u64 flags)
{ … }
int i915_ggtt_pin(struct i915_vma *vma, struct i915_gem_ww_ctx *ww,
u32 align, unsigned int flags);
static inline int i915_vma_pin_count(const struct i915_vma *vma)
{ … }
static inline bool i915_vma_is_pinned(const struct i915_vma *vma)
{ … }
static inline void __i915_vma_pin(struct i915_vma *vma)
{ … }
static inline void __i915_vma_unpin(struct i915_vma *vma)
{ … }
static inline void i915_vma_unpin(struct i915_vma *vma)
{ … }
static inline bool i915_vma_is_bound(const struct i915_vma *vma,
unsigned int where)
{ … }
static inline bool i915_node_color_differs(const struct drm_mm_node *node,
unsigned long color)
{ … }
void __iomem *i915_vma_pin_iomap(struct i915_vma *vma);
void i915_vma_unpin_iomap(struct i915_vma *vma);
int __must_check i915_vma_pin_fence(struct i915_vma *vma);
void i915_vma_revoke_fence(struct i915_vma *vma);
int __i915_vma_pin_fence(struct i915_vma *vma);
static inline void __i915_vma_unpin_fence(struct i915_vma *vma)
{ … }
static inline void
i915_vma_unpin_fence(struct i915_vma *vma)
{ … }
static inline int i915_vma_fence_id(const struct i915_vma *vma)
{ … }
void i915_vma_parked(struct intel_gt *gt);
static inline bool i915_vma_is_scanout(const struct i915_vma *vma)
{ … }
static inline void i915_vma_mark_scanout(struct i915_vma *vma)
{ … }
static inline void i915_vma_clear_scanout(struct i915_vma *vma)
{ … }
void i915_ggtt_clear_scanout(struct drm_i915_gem_object *obj);
#define for_each_until(cond) …
#define for_each_ggtt_vma(V, OBJ) …
struct i915_vma *i915_vma_make_unshrinkable(struct i915_vma *vma);
void i915_vma_make_shrinkable(struct i915_vma *vma);
void i915_vma_make_purgeable(struct i915_vma *vma);
int i915_vma_wait_for_bind(struct i915_vma *vma);
static inline int i915_vma_sync(struct i915_vma *vma)
{ … }
static inline struct i915_vma_resource *
i915_vma_get_current_resource(struct i915_vma *vma)
{ … }
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
void i915_vma_resource_init_from_vma(struct i915_vma_resource *vma_res,
struct i915_vma *vma);
#endif
void i915_vma_module_exit(void);
int i915_vma_module_init(void);
I915_SELFTEST_DECLARE(…);
I915_SELFTEST_DECLARE(…);
#endif