一个GEM对象通过struct drm_gem_object来表示,驱动程序往往需要把struct drm_gem_object嵌入到自己的私有数据结构中,主要用于内存对象的管理。 struct drm_gem_object对象中不包含内存分配的管理,Backing memory分配将在memory分配段讨论。 在kernel中struct drm_gem_object的被定义为: struct drm_gem_object { struct...
GEM主要负责显示buffer的分配和释放,linux内核中使用struct drm_gem_object表示GEM对象,驱动一般需要用私有信息来扩展GEM对象,因此struct drm_gem_object都是嵌入在驱动自定义的GEM结构体内的。 gem object的创建以及初始化步骤如下: 创建一个GEM对象,驱动为自定义GEM对象申请内存; 通过drm_gem_object_init来初始化嵌...
drm_gem_object_put(gobj); if (ret) return ret; args->pitch = pitch; args->size = size; args->handle = handle; return 0; } 在lsdc_gem_object_create中,对于gem_object要设置一个重要的参数:gobj->funcs = &lsdc_gem_object_funcs。这个结构体负责管理用户对于gem_object读写的具体响应。 st...
drm_gem_object_put(kfb->base.obj[i]); kfree(kfb); return ERR_PTR(ret); } 10.在drm_framebuffer_init初始化的时候会依次传入drm_device,drm_framebuffer和drm_framebuffer_funcs,drm_framebuffer_funcs是对于drm framebuffer的回调函数,这个需要各自的厂商来完成实现,以komeda为例: komeda分别实现了destroy...
> > > > > > > > drm_gem_object_put(gpuvm->r_obj); > > > > > > > > } > > > > > > > > -EXPORT_SYMBOL_GPL(drm_gpuvm_destroy); > > > > > > > > + > > > > > > > > +static void > > > > > > > > +drm_gpuvm_free(struct kref *kref) ...
drm_gem_object_put(gpuvm->r_obj); } -EXPORT_SYMBOL_GPL(drm_gpuvm_destroy); + +static void +drm_gpuvm_free(struct kref *kref) +{ + struct drm_gpuvm *gpuvm = container_of(kref, struct drm_gpuvm, kref); + + if (drm_WARN_ON(gpuvm->drm, !gpuvm->ops->vm_free)) ...
struct rockchip_gem_object *rk_obj rk_obj;rk_obj = rockchip_gem_create_object(dev, size, ...
dma_buf_put(dmabuf); out: drm_gem_object_put(obj); out_unlock: mutex_unlock(&file_priv->prime.lock); returndmabuf; } EXPORT_SYMBOL(drm_gem_prime_handle_to_dmabuf); returnret; /** * drm_gem_prime_handle_to_fd - PRIME export function for GEM drivers ...
That is, if you put a name on your gem-object, every other client that has access to the DRM device and is authenticated via drmAuthMagic(3) to the current DRM-Master, can guess the name and open or access the gem-object. If you want more fine-grained access control, you can use...
nv_drm_gem_object_nvkms_memory_lookup 为plane设置 crtc memory->hRmHandle = hRmHandle; memory->size = size; memory->surfaceParams.layout = layout; funcsTable->grantPermissions = GrantPermissions; to_pci_dev drm_vma_node_offset_addr