1 /* SPDX-License-Identifier: MIT */
2 /*
3 * Copyright © 2022 Intel Corporation
4 */
5
6 #ifndef _I915_GEM_OBJECT_H_
7 #define _I915_GEM_OBJECT_H_
8
9 #include <linux/types.h>
10
11 #include "xe_bo.h"
12
13 #define i915_gem_object_is_shmem(obj) (0) /* We don't use shmem */
14
i915_gem_object_get_dma_address(const struct xe_bo * bo,pgoff_t n)15 static inline dma_addr_t i915_gem_object_get_dma_address(const struct xe_bo *bo, pgoff_t n)
16 {
17 /* Should never be called */
18 WARN_ON(1);
19 return n;
20 }
21
i915_gem_object_is_tiled(const struct xe_bo * bo)22 static inline bool i915_gem_object_is_tiled(const struct xe_bo *bo)
23 {
24 /* legacy tiling is unused */
25 return false;
26 }
27
i915_gem_object_is_userptr(const struct xe_bo * bo)28 static inline bool i915_gem_object_is_userptr(const struct xe_bo *bo)
29 {
30 /* legacy tiling is unused */
31 return false;
32 }
33
i915_gem_object_read_from_page(struct xe_bo * bo,u32 ofs,u64 * ptr,u32 size)34 static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
35 u32 ofs, u64 *ptr, u32 size)
36 {
37 struct ttm_bo_kmap_obj map;
38 void *src;
39 bool is_iomem;
40 int ret;
41
42 ret = xe_bo_lock(bo, true);
43 if (ret)
44 return ret;
45
46 ret = ttm_bo_kmap(&bo->ttm, ofs >> PAGE_SHIFT, 1, &map);
47 if (ret)
48 goto out_unlock;
49
50 ofs &= ~PAGE_MASK;
51 src = ttm_kmap_obj_virtual(&map, &is_iomem);
52 src += ofs;
53 if (is_iomem)
54 memcpy_fromio(ptr, (void __iomem *)src, size);
55 else
56 memcpy(ptr, src, size);
57
58 ttm_bo_kunmap(&map);
59 out_unlock:
60 xe_bo_unlock(bo);
61 return ret;
62 }
63
64 #endif
65