Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
fork
Configure Feed
Select the types of activity you want to include in your feed.
1// SPDX-License-Identifier: GPL-2.0
2
3use kernel::{
4 drm,
5 drm::{gem, gem::BaseObject},
6 prelude::*,
7 types::ARef,
8};
9
10use crate::{
11 driver::{NovaDevice, NovaDriver},
12 file::File,
13};
14
15/// GEM Object inner driver data
16#[pin_data]
17pub(crate) struct NovaObject {}
18
19impl gem::BaseDriverObject<gem::Object<NovaObject>> for NovaObject {
20 fn new(_dev: &NovaDevice, _size: usize) -> impl PinInit<Self, Error> {
21 try_pin_init!(NovaObject {})
22 }
23}
24
25impl gem::DriverObject for NovaObject {
26 type Driver = NovaDriver;
27}
28
29impl NovaObject {
30 /// Create a new DRM GEM object.
31 pub(crate) fn new(dev: &NovaDevice, size: usize) -> Result<ARef<gem::Object<Self>>> {
32 let aligned_size = size.next_multiple_of(1 << 12);
33
34 if size == 0 || size > aligned_size {
35 return Err(EINVAL);
36 }
37
38 gem::Object::new(dev, aligned_size)
39 }
40
41 /// Look up a GEM object handle for a `File` and return an `ObjectRef` for it.
42 #[inline]
43 pub(crate) fn lookup_handle(
44 file: &drm::File<File>,
45 handle: u32,
46 ) -> Result<ARef<gem::Object<Self>>> {
47 gem::Object::lookup_handle(file, handle)
48 }
49}