1d9483ecdSChristian König /*
2d9483ecdSChristian König * Copyright 2017 Advanced Micro Devices, Inc.
3d9483ecdSChristian König *
4d9483ecdSChristian König * Permission is hereby granted, free of charge, to any person obtaining a
5d9483ecdSChristian König * copy of this software and associated documentation files (the "Software"),
6d9483ecdSChristian König * to deal in the Software without restriction, including without limitation
7d9483ecdSChristian König * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8d9483ecdSChristian König * and/or sell copies of the Software, and to permit persons to whom the
9d9483ecdSChristian König * Software is furnished to do so, subject to the following conditions:
10d9483ecdSChristian König *
11d9483ecdSChristian König * The above copyright notice and this permission notice shall be included in
12d9483ecdSChristian König * all copies or substantial portions of the Software.
13d9483ecdSChristian König *
14d9483ecdSChristian König * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15d9483ecdSChristian König * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16d9483ecdSChristian König * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17d9483ecdSChristian König * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18d9483ecdSChristian König * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19d9483ecdSChristian König * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20d9483ecdSChristian König * OTHER DEALINGS IN THE SOFTWARE.
21d9483ecdSChristian König *
22d9483ecdSChristian König * Authors: Christian König
23d9483ecdSChristian König */
24d9483ecdSChristian König #ifndef __AMDGPU_MN_H__
25d9483ecdSChristian König #define __AMDGPU_MN_H__
26d9483ecdSChristian König
27d9483ecdSChristian König #include <linux/types.h>
28d9483ecdSChristian König #include <linux/hmm.h>
29d9483ecdSChristian König #include <linux/rwsem.h>
30d9483ecdSChristian König #include <linux/workqueue.h>
31d9483ecdSChristian König #include <linux/interval_tree.h>
32*f95f51a4SFelix Kuehling #include <linux/mmu_notifier.h>
33d9483ecdSChristian König
34d9483ecdSChristian König int amdgpu_hmm_range_get_pages(struct mmu_interval_notifier *notifier,
35d4cbff46SChristian König uint64_t start, uint64_t npages, bool readonly,
36d4cbff46SChristian König void *owner, struct page **pages,
37d4cbff46SChristian König struct hmm_range **phmm_range);
38*f95f51a4SFelix Kuehling bool amdgpu_hmm_range_get_pages_done(struct hmm_range *hmm_range);
39d9483ecdSChristian König
40d9483ecdSChristian König #if defined(CONFIG_HMM_MIRROR)
41d9483ecdSChristian König int amdgpu_hmm_register(struct amdgpu_bo *bo, unsigned long addr);
42d9483ecdSChristian König void amdgpu_hmm_unregister(struct amdgpu_bo *bo);
43d9483ecdSChristian König #else
amdgpu_hmm_register(struct amdgpu_bo * bo,unsigned long addr)44d9483ecdSChristian König static inline int amdgpu_hmm_register(struct amdgpu_bo *bo, unsigned long addr)
45d9483ecdSChristian König {
46d9483ecdSChristian König DRM_WARN_ONCE("HMM_MIRROR kernel config option is not enabled, "
47d9483ecdSChristian König "add CONFIG_ZONE_DEVICE=y in config file to fix this\n");
48d9483ecdSChristian König return -ENODEV;
49d9483ecdSChristian König }
amdgpu_hmm_unregister(struct amdgpu_bo * bo)50d9483ecdSChristian König static inline void amdgpu_hmm_unregister(struct amdgpu_bo *bo) {}
51d9483ecdSChristian König #endif
52d9483ecdSChristian König
53d9483ecdSChristian König #endif
54