/* SPDX-License-Identifier: MIT */
/*
 * Copyright © 2020 Intel Corporation
 */

#ifndef __INTEL_MIGRATE__
#define __INTEL_MIGRATE__

#include <linux/types.h>

#include "intel_migrate_types.h"

struct dma_fence;
struct i915_deps;
struct i915_request;
struct i915_gem_ww_ctx;
struct intel_gt;
struct scatterlist;
enum i915_cache_level;

int intel_migrate_init(struct intel_migrate *m, struct intel_gt *gt);

struct intel_context *intel_migrate_create_context(struct intel_migrate *m);

int intel_migrate_copy(struct intel_migrate *m,
		       struct i915_gem_ww_ctx *ww,
		       const struct i915_deps *deps,
		       struct scatterlist *src,
		       enum i915_cache_level src_cache_level,
		       bool src_is_lmem,
		       struct scatterlist *dst,
		       enum i915_cache_level dst_cache_level,
		       bool dst_is_lmem,
		       struct i915_request **out);

int intel_context_migrate_copy(struct intel_context *ce,
			       const struct i915_deps *deps,
			       struct scatterlist *src,
			       enum i915_cache_level src_cache_level,
			       bool src_is_lmem,
			       struct scatterlist *dst,
			       enum i915_cache_level dst_cache_level,
			       bool dst_is_lmem,
			       struct i915_request **out);

int
intel_migrate_clear(struct intel_migrate *m,
		    struct i915_gem_ww_ctx *ww,
		    const struct i915_deps *deps,
		    struct scatterlist *sg,
		    enum i915_cache_level cache_level,
		    bool is_lmem,
		    u32 value,
		    struct i915_request **out);
int
intel_context_migrate_clear(struct intel_context *ce,
			    const struct i915_deps *deps,
			    struct scatterlist *sg,
			    enum i915_cache_level cache_level,
			    bool is_lmem,
			    u32 value,
			    struct i915_request **out);

void intel_migrate_fini(struct intel_migrate *m);

#endif /* __INTEL_MIGRATE__ */
