/* SPDX-License-Identifier: MIT */
/*
 * Copyright © 2021 Intel Corporation
 */
#ifndef __TTM_KMAP_ITER_H__
#define __TTM_KMAP_ITER_H__

#include <linux/types.h>

struct ttm_kmap_iter;
struct iosys_map;

/**
 * struct ttm_kmap_iter_ops - Ops structure for a struct
 * ttm_kmap_iter.
 * @maps_tt: Whether the iterator maps TT memory directly, as opposed
 * mapping a TT through an aperture. Both these modes have
 * struct ttm_resource_manager::use_tt set, but the latter typically
 * returns is_iomem == true from ttm_mem_io_reserve.
 */
struct ttm_kmap_iter_ops {
	/**
	 * kmap_local() - Map a PAGE_SIZE part of the resource using
	 * kmap_local semantics.
	 * @res_iter: Pointer to the struct ttm_kmap_iter representing
	 * the resource.
	 * @dmap: The struct iosys_map holding the virtual address after
	 * the operation.
	 * @i: The location within the resource to map. PAGE_SIZE granularity.
	 */
	void (*map_local)(struct ttm_kmap_iter *res_iter,
			  struct iosys_map *dmap, pgoff_t i);
	/**
	 * unmap_local() - Unmap a PAGE_SIZE part of the resource previously
	 * mapped using kmap_local.
	 * @res_iter: Pointer to the struct ttm_kmap_iter representing
	 * the resource.
	 * @dmap: The struct iosys_map holding the virtual address after
	 * the operation.
	 */
	void (*unmap_local)(struct ttm_kmap_iter *res_iter,
			    struct iosys_map *dmap);
	bool maps_tt;
};

/**
 * struct ttm_kmap_iter - Iterator for kmap_local type operations on a
 * resource.
 * @ops: Pointer to the operations struct.
 *
 * This struct is intended to be embedded in a resource-specific specialization
 * implementing operations for the resource.
 *
 * Nothing stops us from extending the operations to vmap, vmap_pfn etc,
 * replacing some or parts of the ttm_bo_util. cpu-map functionality.
 */
struct ttm_kmap_iter {
	const struct ttm_kmap_iter_ops *ops;
};

#endif /* __TTM_KMAP_ITER_H__ */
