15be73b69SJérôme Glisse /*
25be73b69SJérôme Glisse * Copyright 2018 Red Hat Inc.
35be73b69SJérôme Glisse *
45be73b69SJérôme Glisse * Permission is hereby granted, free of charge, to any person obtaining a
55be73b69SJérôme Glisse * copy of this software and associated documentation files (the "Software"),
65be73b69SJérôme Glisse * to deal in the Software without restriction, including without limitation
75be73b69SJérôme Glisse * the rights to use, copy, modify, merge, publish, distribute, sublicense,
85be73b69SJérôme Glisse * and/or sell copies of the Software, and to permit persons to whom the
95be73b69SJérôme Glisse * Software is furnished to do so, subject to the following conditions:
105be73b69SJérôme Glisse *
115be73b69SJérôme Glisse * The above copyright notice and this permission notice shall be included in
125be73b69SJérôme Glisse * all copies or substantial portions of the Software.
135be73b69SJérôme Glisse *
145be73b69SJérôme Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155be73b69SJérôme Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
165be73b69SJérôme Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
175be73b69SJérôme Glisse * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
185be73b69SJérôme Glisse * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
195be73b69SJérôme Glisse * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
205be73b69SJérôme Glisse * OTHER DEALINGS IN THE SOFTWARE.
215be73b69SJérôme Glisse */
225be73b69SJérôme Glisse #ifndef __NOUVEAU_DMEM_H__
235be73b69SJérôme Glisse #define __NOUVEAU_DMEM_H__
245be73b69SJérôme Glisse #include <nvif/os.h>
255be73b69SJérôme Glisse struct drm_device;
265be73b69SJérôme Glisse struct drm_file;
275be73b69SJérôme Glisse struct nouveau_drm;
28*e3d8b089SRalph Campbell struct nouveau_svmm;
295be73b69SJérôme Glisse struct hmm_range;
305be73b69SJérôme Glisse
315be73b69SJérôme Glisse #if IS_ENABLED(CONFIG_DRM_NOUVEAU_SVM)
325be73b69SJérôme Glisse void nouveau_dmem_init(struct nouveau_drm *);
335be73b69SJérôme Glisse void nouveau_dmem_fini(struct nouveau_drm *);
345be73b69SJérôme Glisse void nouveau_dmem_suspend(struct nouveau_drm *);
355be73b69SJérôme Glisse void nouveau_dmem_resume(struct nouveau_drm *);
365be73b69SJérôme Glisse
375be73b69SJérôme Glisse int nouveau_dmem_migrate_vma(struct nouveau_drm *drm,
38*e3d8b089SRalph Campbell struct nouveau_svmm *svmm,
395be73b69SJérôme Glisse struct vm_area_struct *vma,
405be73b69SJérôme Glisse unsigned long start,
415be73b69SJérôme Glisse unsigned long end);
422733ea14SJason Gunthorpe unsigned long nouveau_dmem_page_addr(struct page *page);
435be73b69SJérôme Glisse
445be73b69SJérôme Glisse #else /* IS_ENABLED(CONFIG_DRM_NOUVEAU_SVM) */
nouveau_dmem_init(struct nouveau_drm * drm)455be73b69SJérôme Glisse static inline void nouveau_dmem_init(struct nouveau_drm *drm) {}
nouveau_dmem_fini(struct nouveau_drm * drm)465be73b69SJérôme Glisse static inline void nouveau_dmem_fini(struct nouveau_drm *drm) {}
nouveau_dmem_suspend(struct nouveau_drm * drm)475be73b69SJérôme Glisse static inline void nouveau_dmem_suspend(struct nouveau_drm *drm) {}
nouveau_dmem_resume(struct nouveau_drm * drm)485be73b69SJérôme Glisse static inline void nouveau_dmem_resume(struct nouveau_drm *drm) {}
495be73b69SJérôme Glisse #endif /* IS_ENABLED(CONFIG_DRM_NOUVEAU_SVM) */
505be73b69SJérôme Glisse #endif
51