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 | * kmap_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 | |