1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2021 Intel Corporation 4 */ 5 #ifndef __TTM_KMAP_ITER_H__ 6 #define __TTM_KMAP_ITER_H__ 7 8 #include <linux/types.h> 9 10 struct ttm_kmap_iter; 11 struct iosys_map; 12 13 /** 14 * struct ttm_kmap_iter_ops - Ops structure for a struct 15 * ttm_kmap_iter. 16 * @maps_tt: Whether the iterator maps TT memory directly, as opposed 17 * mapping a TT through an aperture. Both these modes have 18 * struct ttm_resource_manager::use_tt set, but the latter typically 19 * returns is_iomem == true from ttm_mem_io_reserve. 20 */ 21 struct ttm_kmap_iter_ops { 22 /** 23 * @map_local: Map a PAGE_SIZE part of the resource using 24 * kmap_local semantics. 25 * @res_iter: Pointer to the struct ttm_kmap_iter representing 26 * the resource. 27 * @dmap: The struct iosys_map holding the virtual address after 28 * the operation. 29 * @i: The location within the resource to map. PAGE_SIZE granularity. 30 */ 31 void (*map_local)(struct ttm_kmap_iter *res_iter, 32 struct iosys_map *dmap, pgoff_t i); 33 /** 34 * @unmap_local: Unmap a PAGE_SIZE part of the resource previously 35 * mapped using kmap_local. 36 * @res_iter: Pointer to the struct ttm_kmap_iter representing 37 * the resource. 38 * @dmap: The struct iosys_map holding the virtual address after 39 * the operation. 40 */ 41 void (*unmap_local)(struct ttm_kmap_iter *res_iter, 42 struct iosys_map *dmap); 43 bool maps_tt; 44 }; 45 46 /** 47 * struct ttm_kmap_iter - Iterator for kmap_local type operations on a 48 * resource. 49 * @ops: Pointer to the operations struct. 50 * 51 * This struct is intended to be embedded in a resource-specific specialization 52 * implementing operations for the resource. 53 * 54 * Nothing stops us from extending the operations to vmap, vmap_pfn etc, 55 * replacing some or parts of the ttm_bo_util. cpu-map functionality. 56 */ 57 struct ttm_kmap_iter { 58 const struct ttm_kmap_iter_ops *ops; 59 }; 60 61 #endif /* __TTM_KMAP_ITER_H__ */ 62