2021-06-02 16:38:10 +08:00
|
|
|
/* 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;
|
2022-02-05 01:05:41 +08:00
|
|
|
struct iosys_map;
|
2021-06-02 16:38:10 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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.
|
2022-02-05 01:05:41 +08:00
|
|
|
* @dmap: The struct iosys_map holding the virtual address after
|
2021-06-02 16:38:10 +08:00
|
|
|
* the operation.
|
|
|
|
* @i: The location within the resource to map. PAGE_SIZE granularity.
|
|
|
|
*/
|
|
|
|
void (*map_local)(struct ttm_kmap_iter *res_iter,
|
2022-02-05 01:05:41 +08:00
|
|
|
struct iosys_map *dmap, pgoff_t i);
|
2021-06-02 16:38:10 +08:00
|
|
|
/**
|
|
|
|
* 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.
|
2022-02-05 01:05:41 +08:00
|
|
|
* @dmap: The struct iosys_map holding the virtual address after
|
2021-06-02 16:38:10 +08:00
|
|
|
* the operation.
|
|
|
|
*/
|
|
|
|
void (*unmap_local)(struct ttm_kmap_iter *res_iter,
|
2022-02-05 01:05:41 +08:00
|
|
|
struct iosys_map *dmap);
|
2021-06-02 16:38:10 +08:00
|
|
|
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__ */
|