18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * SPDX-License-Identifier: MIT 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright © 2019 Intel Corporation 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <drm/drm_file.h> 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include "i915_drv.h" 108c2ecf20Sopenharmony_ci#include "igt_mmap.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ciunsigned long igt_mmap_node(struct drm_i915_private *i915, 138c2ecf20Sopenharmony_ci struct drm_vma_offset_node *node, 148c2ecf20Sopenharmony_ci unsigned long addr, 158c2ecf20Sopenharmony_ci unsigned long prot, 168c2ecf20Sopenharmony_ci unsigned long flags) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci struct file *file; 198c2ecf20Sopenharmony_ci int err; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci /* Pretend to open("/dev/dri/card0") */ 228c2ecf20Sopenharmony_ci file = mock_drm_getfile(i915->drm.primary, O_RDWR); 238c2ecf20Sopenharmony_ci if (IS_ERR(file)) 248c2ecf20Sopenharmony_ci return PTR_ERR(file); 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci err = drm_vma_node_allow(node, file->private_data); 278c2ecf20Sopenharmony_ci if (err) { 288c2ecf20Sopenharmony_ci addr = err; 298c2ecf20Sopenharmony_ci goto out_file; 308c2ecf20Sopenharmony_ci } 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci addr = vm_mmap(file, addr, drm_vma_node_size(node) << PAGE_SHIFT, 338c2ecf20Sopenharmony_ci prot, flags, drm_vma_node_offset_addr(node)); 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci drm_vma_node_revoke(node, file->private_data); 368c2ecf20Sopenharmony_ciout_file: 378c2ecf20Sopenharmony_ci fput(file); 388c2ecf20Sopenharmony_ci return addr; 398c2ecf20Sopenharmony_ci} 40