18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: MIT 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright © 2019 Intel Corporation 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include "gem/i915_gem_region.h" 78c2ecf20Sopenharmony_ci#include "intel_memory_region.h" 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include "mock_region.h" 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistatic const struct drm_i915_gem_object_ops mock_region_obj_ops = { 128c2ecf20Sopenharmony_ci .name = "mock-region", 138c2ecf20Sopenharmony_ci .get_pages = i915_gem_object_get_pages_buddy, 148c2ecf20Sopenharmony_ci .put_pages = i915_gem_object_put_pages_buddy, 158c2ecf20Sopenharmony_ci .release = i915_gem_object_release_memory_region, 168c2ecf20Sopenharmony_ci}; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_cistatic struct drm_i915_gem_object * 198c2ecf20Sopenharmony_cimock_object_create(struct intel_memory_region *mem, 208c2ecf20Sopenharmony_ci resource_size_t size, 218c2ecf20Sopenharmony_ci unsigned int flags) 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci static struct lock_class_key lock_class; 248c2ecf20Sopenharmony_ci struct drm_i915_private *i915 = mem->i915; 258c2ecf20Sopenharmony_ci struct drm_i915_gem_object *obj; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci if (size > mem->mm.size) 288c2ecf20Sopenharmony_ci return ERR_PTR(-E2BIG); 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci obj = i915_gem_object_alloc(); 318c2ecf20Sopenharmony_ci if (!obj) 328c2ecf20Sopenharmony_ci return ERR_PTR(-ENOMEM); 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci drm_gem_private_object_init(&i915->drm, &obj->base, size); 358c2ecf20Sopenharmony_ci i915_gem_object_init(obj, &mock_region_obj_ops, &lock_class); 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci obj->read_domains = I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci i915_gem_object_set_cache_coherency(obj, I915_CACHE_NONE); 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci i915_gem_object_init_memory_region(obj, mem, flags); 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci return obj; 448c2ecf20Sopenharmony_ci} 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cistatic const struct intel_memory_region_ops mock_region_ops = { 478c2ecf20Sopenharmony_ci .init = intel_memory_region_init_buddy, 488c2ecf20Sopenharmony_ci .release = intel_memory_region_release_buddy, 498c2ecf20Sopenharmony_ci .create_object = mock_object_create, 508c2ecf20Sopenharmony_ci}; 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistruct intel_memory_region * 538c2ecf20Sopenharmony_cimock_region_create(struct drm_i915_private *i915, 548c2ecf20Sopenharmony_ci resource_size_t start, 558c2ecf20Sopenharmony_ci resource_size_t size, 568c2ecf20Sopenharmony_ci resource_size_t min_page_size, 578c2ecf20Sopenharmony_ci resource_size_t io_start) 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci return intel_memory_region_create(i915, start, size, min_page_size, 608c2ecf20Sopenharmony_ci io_start, &mock_region_ops); 618c2ecf20Sopenharmony_ci} 62